Я использую Android P и компилирую под AndroidX.Отлично работает в debug / beta, но когда я делаю релиз, я получаю загадочный сбой во время выполнения:
2018-06-24 00: 21: 26.080 11971-11971 /?E / LoadedApk: не удалось создать экземпляр appComponentFactory java.lang.ClassNotFoundException: не найден класс "androidx.core.app.CoreComponentFactory" по пути: DexPathList [[zip-файл] /data/app/app.itsyour.elegantstockWeg= / base.apk "], nativeLibraryDirectories = [/ data / app / app.itsyour.elegantstocks-EuVZWdDgzplhm0Hpa90VwA == / lib / x86, / system / lib]] в dalvik.system.BaseDexClassLoader.findClass: Base.ex.jav) в java.lang.ClassLoader.loadClass (ClassLoader.java:379) в java.lang.ClassLoader.loadClass (ClassLoader.java:312) в android.app.LoadedApk.createAppFactory (LoadedApk.java:226) в android.app.LoadedApk.createOrUpdateClassLoaderLocked (LoadedApk.java:731) в android.app.LoadedApk.getClassLoader (LoadedApk.java:772) в android.app.LoadedApk.get.Resources (LoadedAp4.AppContext)ContextImpl.java:2345) в android.app.ActivityThread.handleBindApplication (ActivityThread.java:5736) в android.app.ActivityThread.access $ 1000 (ActivityThread.java:197) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1634) в android.os.Handler.dispatchMessage (Handler.java:106) в android.os.Looper.loop (Looper.java): 193) в android.app.ActivityThread.main (ActivityThread.java:6642) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java): 493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) 2018-06-24 00: 21: 26.145 1667-1854 /?E / SurfaceFlinger: ro.sf.lcd_density должен быть определен как свойство сборки 2018-06-24 00: 21: 26.233 1667-1703 /?E / SurfaceFlinger: ro.sf.lcd_density должен быть определен как свойство сборки 2018-06-24 00: 21: 29.627 1796-1913 /?E / TaskPersister: Ошибка файла при доступе к каталогу recents (каталог не существует?).2018-06-24 00: 21: 30,087 11971-11971 /?E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: app.itsyour.elegantstocks, PID: 11971 java.lang.IllegalArgumentException: параметр, заданный как ненулевой, имеет значение null: метод cdbhb, параметр $ receiver в app.itsyour.elegantstocks.aba (неизвестно)Источник: 2) на app.itsyour.elegantstocks.feature.navigator.ba $ aa (Неизвестный источник: 24) на app.itsyour.elegantstocks.feature.navigator.baa (Неизвестный источник: 13) на app.itsyour.elegantstocks.feature.navigator.baa (неизвестный источник: 2) в androidx.recyclerview.widget.RecyclerView $ aa (неизвестный источник: 0) в androidx.recyclerview.widget.RecyclerView $ ab (неизвестный источник: 29) в androidx.recyclerview.widget.RecyclerView$ pa (неизвестный источник: 39) в androidx.recyclerview.widget.RecyclerView $ pa (неизвестный источник: 510) в androidx.recyclerview.widget.RecyclerView $ pa (неизвестный источник: 5) в androidx.recyclerview.widget.RecyclerView $ pc(Неизвестный источник: 1) в androidx.recyclerview.widget.LinearLayoutManager $ ca (Неизвестный источник: 11) в androidx.recyclerview.widget.LinearLayoutManager.a (Неизвестный кислыйce: 0) в androidx.recyclerview.widget.LinearLayoutManager.a (неизвестный источник: 44) в androidx.recyclerview.widget.LinearLayoutManager.c (неизвестный источник: 371) в androidx.recyclerview.widget.RecyclerView.O (неизвестный источник:42) на androidx.recyclerview.widget.RecyclerView.q (неизвестный источник: 41) на androidx.recyclerview.widget.RecyclerView.onLayout (неизвестный источник: 5) на android.view.View.layout (View.java:20670) наandroid.view.ViewGroup.layout (ViewGroup.java:6194)на android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
на android.widget.FrameLayout.onLayout (FrameLayout.java:261)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на androidx.constraintlayout.widget.ConstraintLayout.onLayout (Неизвестно
Источник: 66)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
на android.widget.FrameLayout.onLayout (FrameLayout.java:261)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout (Неизвестно
Источник: 60)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на androidx.coordinatorlayout.widget.CoordinatorLayout.d (Неизвестно
Источник: 143)
на androidx.coordinatorlayout.widget.CoordinatorLayout.a (Неизвестно
Источник: 32)
на androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout (Неизвестно
Источник: 48)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
на android.widget.FrameLayout.onLayout (FrameLayout.java:261)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на android.widget.LinearLayout.setChildFrame (LinearLayout.java:1812)
на android.widget.LinearLayout.layoutVertical (LinearLayout.java:1656)
на android.widget.LinearLayout.onLayout (LinearLayout.java:1565)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
на android.widget.FrameLayout.onLayout (FrameLayout.java:261)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на android.widget.LinearLayout.setChildFrame (LinearLayout.java:1812)
на android.widget.LinearLayout.layoutVertical (LinearLayout.java:1656)
на android.widget.LinearLayout.onLayout (LinearLayout.java:1565)
на android.view.View.layout (View.java:20670)
на android.view.ViewGroup.layout (ViewGroup.java:6194)
на android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
на android.widget.FrameLayout.onLayout (FrameLayout.java:261)
на com.android.internal.policy.DecorView.onLayout (DecorView.java:753)
atroid.view.View.layout (View.java:20670) 2018-06-24 00: 21: 30.087 11971-11971 /? E / AndroidRuntime: в
android.view.ViewGroup.layout (ViewGroup.java:6194)
на android.view.ViewRootImpl.performLayout (ViewRootImpl.java:2767)
на android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2294)
на android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1447)
на android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:7130)
на android.view.Choreographer $ CallbackRecord.run (Хореограф.java:935)
на android.view.Choreographer.doCallbacks (Choreographer.java:747)
на android.view.Choreographer.doFrame (Хореограф.java:682)
на android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:921)
на android.os.Handler.handleCallback (Handler.java:873)
на android.os.Handler.dispatchMessage (Handler.java:99)
на android.os.Looper.loop (Looper.java:193)
на android.app.ActivityThread.main (ActivityThread.java:6642)
в java.lang.reflect.Method.invoke (родной метод)в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) 2018-06-24 00: 21: 30.1371796-1880 /?E / InputDispatcher: канал '5896582 app.itsyour.elegantstocks / app.itsyour.elegantstocks.feature.navigator.NavigatorActivity (server)' ~ Канал неисправен и будет удален!2018-06-24 00: 21: 30.253 5198-9377 /?E / EntrySyncManager: Невозможно определить имя учетной записи: запрос на удаление 2018-06-24 00: 21: 30.253 5198-9377 /?E / NowController: не удалось получить доступ к данным из EntryProvider.ExecutionException.java.util.concurrent.ExecutionException: com.google.android.apps.gsa.sidekick.main.hn: не удалось выполнить запланированный запрос на обновление записей.ClientErrorCode: 3 на com.google.common.util.concurrent.d.eA (SourceFile: 85) на com.google.common.util.concurrent.d.get (SourceFile: 23) на com.google.common.util.concurrent.l.get (SourceFile: 2) на com.google.android.apps.gsa.staticplugins.nowstream.babe.caI (SourceFile: 47) на com.google.android.apps.gsa.staticplugins.nowstream.babe.caH (SourceFile: 176) на com.google.android.apps.gsa.staticplugins.nowstream.babh.run (неизвестный источник: 2) на com.google.android.apps.gsa.shared.util.concurrent.at.run(SourceFile: 4) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:458) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.Executors $RunnableAdapter.call (Executors.java:458) на java.util.concurrent.FutureTask.run (FutureTask.java:266) на com.google.android.apps.gsa.shared.util.concurrent.bgrun (неизвестный источник: 4) на com.google.android.apps.gsa.shared.util.concurrent.b.aw.run (SourceFile: 4) на com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile: 4) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:641) на java.runTh..java: 764) at com.google.android.apps.gsa.shared.util.concurrent.birun (SourceFile: 6). Причина: com.google.android.apps.gsa.sidekick.main.hn: не удалось завершить.Запланированный запрос на обновление записей.ClientErrorCode: 3 на com.google.android.apps.gsa.staticplugins.nowstream.baaq.az (неизвестный источник: 4) на com.google.common.util.concurrent.q.ap (SourceFile: 7) на com.google..common.util.concurrent.p.run (SourceFile: 32) на com.google.common.util.concurrent.bt.execute (SourceFile: 3) на com.google.common.util.concurrent.db (SourceFile: 275) на com.google.common.util.concurrent.d.addListener (SourceFile: 135) на com.google.common.util.concurrent.pb (SourceFile: 3) на com.google.android.apps.gsa.shared.util.concurrent.ha (SourceFile: 16) на com.google.android.apps.gsa.shared.util.concurrent.ha (SourceFile: 13) на com.google.android.apps.gsa.staticplugins.nowstream.babe.caI (SourceFile: 45) на com.google.android.apps.gsa.staticplugins.nowstream.babe.caH (SourceFile: 176) на com.google.android.apps.gsa.staticplugins.nowstream.babh.run (неизвестный источник: 2) на com.google.android.apps.gsa.shared.util.concurrent.at.run (SourceFile: 4) на java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:458) на java.Util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:458) в java.util.concurrent.FutureTask.run (FutureTask.java:266)com.google.android.apps.gsa.shared.util.concurrent.bgrun (неизвестный источник: 4) на com.google.android.apps.gsa.shared.util.concurrent.b.aw.run (SourceFile: 4)на com.google.android.apps.gsa.shared.util.concurrent.b.aw.run (SourceFile: 4)
в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:641)
на java.lang.Thread.run (Thread.java:764)
на com.google.android.apps.gsa.shared.util.concurrent.b.i.run (SourceFile: 6)
Мои файлы Gradle.
Проект Gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
ext {
androidXVersion = '1.0.0-alpha3'
supportLibraryVersion = '28.0.0-alpha1'
}
buildscript {
ext.kotlin_version = '1.2.50'
repositories {
google()
jcenter()
maven {
url "https://maven.google.com"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0-beta01'
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()
maven { url 'https://jitpack.io' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Приложение Gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
def versionMajor = 1
def versionMinor = 0
def versionPatch = project.hasProperty('buildNumber') ? project.getProperties().get('buildNumber').toInteger() : 0
android {
compileSdkVersion 28
defaultConfig {
applicationId "app.itsyour.elegantstocks"
minSdkVersion 25
targetSdkVersion 28
// Version
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
versionCode versionMajor * 1000000 * versionMinor * 10000 + versionPatch
resValue "string", "build_number", "Version ${versionName}"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas".toString())
}
}
}
buildTypes {
release {
resValue "string", "app_name", "Elegant Stocks"
signingConfig signingConfigs.release
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-release.pro'
}
staging {
resValue "string", "app_name", "Elegant Stocks"
signingConfig signingConfigs.staging
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-staging.pro'
}
beta {
signingConfig signingConfigs.beta
debuggable true
minifyEnabled false
applicationIdSuffix ".beta"
versionNameSuffix "-BETA"
resValue "string", "app_name", "Elegant Stocks Beta"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-beta.pro'
}
debug {
debuggable true
minifyEnabled false
resValue "string", "app_name", "Elegant Stocks Debug"
applicationIdSuffix ".debug"
versionNameSuffix = "-DEBUG"
}
}
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
testOptions {
unitTests {
includeAndroidResources = true
all {
testLogging {
events "passed", "failed", "skipped"
}
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "androidx.appcompat:appcompat:$androidXVersion"
implementation "androidx.fragment:fragment-ktx:$androidXVersion"
implementation "com.google.android.material:material:$androidXVersion"
implementation "androidx.recyclerview:recyclerview:$androidXVersion"
implementation "androidx.core:core-ktx:$androidXVersion"
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
// Dagger 2
implementation 'com.google.dagger:dagger:2.16'
implementation 'com.google.dagger:dagger-android:2.16'
implementation 'com.google.dagger:dagger-android-support:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'
kapt 'com.google.dagger:dagger-android-processor:2.16'
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0'
// Stetho
implementation 'com.facebook.stetho:stetho:1.5.0'
implementation 'com.facebook.stetho:stetho-okhttp3:1.5.0'
// Rx
implementation 'io.reactivex.rxjava2:rxjava:2.1.13'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-kotlin:2.1.1'
implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7-kotlin:2.1.1'
implementation 'com.jakewharton.rx2:replaying-share:2.0.1'
// Room
implementation "androidx.room:room-runtime:2.0.0-alpha1"
implementation "androidx.room:room-rxjava2:2.0.0-alpha1"
kapt "androidx.room:room-compiler:2.0.0-alpha1"
// Logging
implementation 'com.jakewharton.timber:timber:4.7.0'
// Time
implementation 'com.jakewharton.threetenabp:threetenabp:1.1.0'
// UI
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
implementation 'net.opacapp:multiline-collapsingtoolbar:27.1.1'
implementation 'com.balysv:material-ripple:1.0.2'
// Testing
androidTestImplementation "com.android.support.test:runner:1.0.2"
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
testImplementation 'junit:junit:4.12'
testImplementation "org.jetbrains.kotlin:kotlin-test-junit:${kotlin_version}"
testImplementation "com.nhaarman:mockito-kotlin-kt1.1:1.5.0"
testImplementation "org.mockito:mockito-core:2.18.3"
testImplementation "org.robolectric:robolectric:3.8"
testImplementation "org.robolectric:shadows-multidex:3.8"
}
Proguard:
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn org.codehaus.mojo.animal_sniffer.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**