After migration to AndroidX i have the following exception at startup:
LoadedApk: Unable to instantiate appComponentFactory
java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/com.apps.entertainmentsolutions.offhole-yUKw5A4ysDVrPyO-DpnhKg==/lib/arm64, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.LoadedApk.createAppFactory(LoadedApk.java:217)
at android.app.LoadedApk.updateApplicationInfo(LoadedApk.java:329)
at android.app.ActivityThread.handleDispatchPackageBroadcast(ActivityThread.java:5410)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1743)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at com.android.server.SystemServer.run(SystemServer.java:460)
at com.android.server.SystemServer.main(SystemServer.java:300)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:838)
I´m using Android Studio 3.4.1 in Windows 10.
I tried all solutions that I could find, but the problem persists:
Android design support library for API 28 (P) not working
AndroidX Build Fails in Release Mode regarding appComponentFactory
I added -keep class androidx.core.app.CoreComponentFactory { *; } to proguard-rules.pro, i added android.useAndroidX=true and android.enableJetifier=true to gradle.properties... clean, re-built, invalidate chaches and restart...
Disable instant run, too...
Another curious fact, is that I can import the class without problems (import androidx.core.app.CoreComponentFactory;) from other classes.
My gradle files. Project gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.google.gms:google-services:4.2.0'
classpath 'io.fabric.tools:gradle:1.28.0'
}
}
allprojects {
repositories {
maven {
url "https://maven.google.com" // Google's Maven repository
}
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
App gradle:
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion 28
defaultConfig {
applicationId "co.offtime.kit"
minSdkVersion 24
targetSdkVersion 28
versionCode 1
versionName "4.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
beta {
versionNameSuffix ".beta"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlignEnabled true
signingConfig signingConfigs.debug
}
debug {
versionNameSuffix ".debug"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlignEnabled true
signingConfig signingConfigs.debug
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt' ), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
productFlavors {
//main application
kit {
applicationId "co.offtime.kit"
dimension "release"
versionName "v.kit.4.0"
versionCode 236
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
}
def AAVersion = '4.6.0'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
implementation "org.androidannotations:androidannotations-api:$AAVersion"
implementation 'org.springframework.android:spring-android-rest-template:2.0.0.M3'
implementation 'com.fasterxml.jackson.core:jackson-core:2.4.1'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.4.1'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.4.1'
implementation 'com.google.firebase:firebase-core:16.0.9'
implementation 'com.google.firebase:firebase-messaging:18.0.0'
implementation 'com.google.firebase:firebase-core:16.0.9'
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.0'
implementation 'com.google.android.gms:play-services-gcm:16.1.0'
repositories {
maven {
url 'https://repo.spring.io/libs-milestone'
}
}
}
apply plugin: 'com.google.gms.google-services'
Gradle properties:
org.gradle.jvmargs=-Xmx1536m
android.useAndroidX=true
android.enableJetifier=true
Proguard:
-keep class androidx.core.app.CoreComponentFactory { *; }
Manifest:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<application
android:name="co.offtime.kit.core.AppGlobals_"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="co.offtime.kit.SplashScreen_"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.offtime.app"
android:scheme="http" />
</intent-filter>
</activity>
<activity
android:name=".ParentActivity_"
android:label="parentActivity" />
<activity
android:name="co.offtime.kit.InitialDataLoadActivity_"
android:parentActivityName=".ParentActivity_" />
<activity
android:name="co.offtime.kit.LoginActivity_"
android:configChanges="orientation|screenSize"
android:label="@string/login_title"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<activity
android:name="co.offtime.kit.NewUserFormActivity_"
android:configChanges="orientation|screenSize"
android:label="@string/new_user_form_title"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<activity
android:name="co.offtime.kit.TestButtonsActivity_"
android:label="@string/app_name"
android:parentActivityName="co.offtime.kit.DisableHardwareButtonsActivity_">
</activity>
<activity
android:name="co.offtime.kit.DisableHardwareButtonsActivity_"
android:label="disableHardwareButtonsActivity" />
<activity
android:name="co.offtime.kit.EventListActivity_"
android:label="@string/event_list_title" />
<activity
android:name="co.offtime.kit.EventDetailFormActivity_"
android:label="@string/new_event_title" />
<!-- ACTIVITIES -->
<activity
android:name="co.offtime.kit.BlockActivity_"
android:configChanges="orientation|screenSize"
android:launchMode="singleTask"
android:parentActivityName="co.offtime.kit.DisableHardwareButtonsActivity_"
android:screenOrientation="portrait" />
<service android:name="co.offtime.kit.core.services.ClosingAppWatcherService_"
android:stopWithTask="false" />
<receiver android:name="co.offtime.kit.core.AvoidCameraUseDeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_policies" />
<meta-data android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notifications_white_24dp" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
</intent-filter>
</receiver>
<receiver android:name="co.offtime.kit.core.broadcastreceiver.CallBlockerReceiver_">
<intent-filter android:priority="9999">
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
<receiver
android:name="co.offtime.kit.core.broadcastreceiver.BootCompleteDeviceBroadcastReceiver_"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<service
android:name="co.offtime.kit.core.services.LaunchBlockJobService"
android:label="LaunchBlockJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service android:name="co.offtime.kit.core.services.EventExecutorService_"
android:enabled="true"
android:exported="true"
android:stopWithTask="false" />
<service android:name="co.offtime.kit.core.fcmpushnotifications.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service android:name="co.offtime.kit.core.fcmpushnotifications.FcmTokenUpdateService_"
android:enabled="true"
android:exported="true"
android:stopWithTask="false" />
</application>
For now this doesn't cause an ANR, the app starts and works normally, but i'm afraid it will cause problems in the future, and i would like to know why that's happening.
Has anyone had this problem? How was it solved?
Looks CoreComponentFactory
class is getting encrypted. Try adding the above class to proguard-rules.
-keep class androidx.core.app.CoreComponentFactory { *; }
So the CoreComponentFactory
won't be the encrypted anymore.
I hit this error while trying to run a debug
android app on an AVD emulator.
Wiping the data from the emulator (from the AVD Manager) fixed the issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With