¿Por qué la aplicación no funciona con Android 4.x en Kotlin?

Hay una aplicación muy simple hecha por Kotlin, puede funcionar bien en Android 8.0, Android 6.0 y Android 5.1 en Android Studio 3.0

pero obtengo el post de error "java.lang.RuntimeException: no se puede crear una instancia de la actividad ComponentInfo {info.dodata.mirror / ui.UIMain}: java.lang.ClassNotFoundException: ui.UIMain" cuando ejecuto la aplicación en Android 4.1. 2 (Este es un teléfono mobile real) y Android 4.2.2

Puede probarlo descargando la aplicación en https://www.dropbox.com/s/9f0yxp5pqqxtcxq/Mirror.zip?dl=0

enter image description here

UIMain.kt

package ui import android.os.Bundle import android.support.v7.app.AppCompatActivity import info.dodata.mirror.R class UIMain : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_main) } } 

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="info.dodata.mirror"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="ui.UIMain"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

build.gradle (Módulo: aplicación)

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 26 flavorDimensions "default" defaultConfig { // Enabling multidex support. multiDexEnabled true applicationId "info.dodata.mirror" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.01" archivesBaseName = "BackupSettings-V" + versionName } productFlavors { free { applicationId "info.dodata.mirror" } pro { applicationId "info.dodata.mirror.pro" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' buildConfigField "boolean", "IsDebugMode", "false" } debug { buildConfigField "boolean", "IsDebugMode", "true" } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:multidex:1.0.2' implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation "org.jetbrains.anko:anko-commons:$anko_version" implementation "org.jetbrains.anko:anko-sqlite:$anko_version" } 

build.gradle (arriba)

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.51' ext.anko_version = '0.10.2' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 

En Android 5.0 y versiones posteriores, ART combina automáticamente varios files .dex. Sin embargo, en las versiones anteriores de Android, Dalvik inicia la aplicación solo con las classs principales.dex, y la aplicación debe cargar los files secundarios .dex antes de que se haga cualquier otra cosa.

Esto es manejado por la biblioteca de soporte multidex, pero no siguió las instrucciones . Esto significa que algunas de sus classs no están presentes cuando el sistema intenta comenzar su actividad, lo que provoca un queuepso.

Dependiendo de si anula la class de la Application , realice una de las siguientes acciones:

  • Si no anula la class de la Application , edite su file de manifiesto para configurar android: name en la label <application> siguiente manera:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application android:name="android.support.multidex.MultiDexApplication" > ... </application> </manifest> 
  • Si reemplaza la class de la Application , cámbiela para extender la MultiDexApplication (si es posible) de la siguiente manera:

     public class MyApplication extends MultiDexApplication { ... } 
  • O si anula la class de la Application , pero no es posible cambiar la class base, puede replace el método attachBaseContext() y llamar a MultiDex.install(this) para habilitar multidex:

     public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } 

Actualmente no está anulando la Application , por lo que debe seguir el primer caso.

  • Float es un campo no válido para la comparación de Realm
  • ¿Cómo mostrar solo día y mes en el cuadro de dialog selector de date en Kotlin (Android)?
  • Cómo convertir si expresión a cuando en Kotlin
  • Se llama a Kotlin OnTouchListener pero no anula el funcionamientoHaga clic en
  • Java ArrayList a Kotlin Array
  • ejecución de inicializador de propiedad kotlin en testings JUnit
  • ¿Cómo inyectar los resources de spring en las classs Apache Ignite?
  • Error de image del elemento de RecyclerView
  • Kotlin: ArrayIndexOutOfBoundsException durante la conversión de DispatchTask a cadena
  • Operador interesante '===' en Kotlin
  • Problemas para resolver la versión de la biblioteca anko 0.9.1