代码之家  ›  专栏  ›  技术社区  ›  Sharp Steel Software

关于appcomponentfactory,androidx构建在发布模式下失败

  •  11
  • Sharp Steel Software  · 技术社区  · 8 年前

    我正在使用android p并编译androidx。在调试/ beta中工作得很好,但是当我发布时,我在运行时得到了一个神秘的崩溃:

    2018-06-24 00:21:26.080 11971-11971/?e/loadedapk:无法 实例化appcomponentfactory java.lang.ClassNotFoundException:在路径:dexpathlist[[zip]上未找到类“androidx.core.app.CoreComponentFactory” 文件 “/data/app/app.itsur.elegantstocks-euvzwddgzplhm0hpa90vwa==/base.apk”],nativelibrarydirectories=[/data/app/app.itsur.elegantstocks-euvzwddgzplhm0hpa90vwa===/lib/x86, /系统/lib]] 在Dalvik.Stase.BaseDeXCultLooul.FiffCype(BaseDeXCubLoopule.java:126) 在java.lang.classloader.loadClass上(classloader.java:379) 在java.lang.classloader.loadClass上(classloader.java:312) 在Android .App.Load DaPk.CudiaAppF工厂(LoADDAPK.java:226) 在Android .App.Load DaPk.CurtRoopUpDeCelsLoad Server(LoADDAPK.java:731) 在Android .App.Load DaPk.GETCaseLoad(LoADDAPK.java:772) 在Android .App.Load DaPk.GETReales(LoADDAPK.java:994) 在安卓.App.CurrimePult.CurdiaAppEngult(CurrimthPL,Java:2345) 在android.app.activitythread.handlebindapplication上(activitythread.java:5736) Auto.App.ActuviyTrime.Access 1000美元(ActuviyTrim.java:197) 在安卓.App.ActuviyT线$ H.HuffLeMeSeX(ActuviyTrim.java:1634) 在android.os.handler.DispatchMessage上(handler.java:106) 在android.os.looper.loop上(looper.java:193) 在Addio.App.ActuviyTrime.Mead(ActuviyToel.java:6642) 在java. 在COM.Android .No.OS.RunTimeIn $方法和AdjSaleal.Run(RunTimeIn.java:493) 在com.android.internal.os.zygenetinit.main上(zygenetinit.java:858) 2018-06-24 00:21:26.145 1667-1854/?E/表面: Ro.SF.LCD U密度必须定义为建筑属性2018-06-24 00:21:26.233 1667-1703/?e/surfaceflinger:ro.sf.lcd_密度必须为 定义为建筑财产2018-06-24 00:21:29.627 1796-1913/? e/taskpersister:访问recents目录(目录)时发生文件错误 不存在?).2018-06-24 00:21:30.087 11971-11971/? E/ANDROIDRunTime:致命异常:主要 进程:app.itsury.elegantstocks,PID:11971 参数:指定为非null的参数为null 在app.itsur.elegantstocks.a.b.a(未知来源:2) 在app.itsur.elegantstocks.feature.navigator.b.a$a.a(未知来源:24) 在app.itsur.elegantstocks.feature.navigator.b.a.a(未知来源:13) 在app.itsur.elegantstocks.feature.navigator.b.a.a(未知来源:2) 位于androidx.recyclerview.widget.recyclerview$a.a(未知源:0) 位于androidx.recyclerview.widget.recyclerview$A.B(未知来源:29) 在androidx.recyclerview.widget.recyclerview$p.a(未知来源:39) 在androidx.recyclerview.widget.recyclerview$p.a(未知来源:510) 在androidx.recyclerview.widget.recyclerview$p.a(未知来源:5) 在androidx.recyclerview.widget.recyclerview$p.c(未知来源:1) 在androidx.recyclerview.widget.linearlayoutmanager$c.a(未知 来源:11) 位于androidx.recyclerview.widget.linearlayoutmanager.a(未知源: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) 在安卓.view .view .Dead(View,Java:20670) 在android.view.viewgroup.layout上(viewgroup.java:6194) 在Android .WIDGET.FrAMLayayOut.LayOutSt娃(FrAMLayayOut.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) 在安卓.view .view .Dead(View,Java:20670) 在android.view.viewgroup.layout上(viewgroup.java:6194) 在android.widget.framelayout.layoutChildren上(framelayout.java:323) 在Android环境下的小部件。 在安卓.view .view .Dead(View,Java:20670) 在android.view.viewgroup.layout上(viewgroup.java:6194) 在androidx.swiperefreshlayout.widget.swiperefreshlayout.onlayout(未知 来源:60) 在安卓.view .view .Dead(View,Java:20670) 在Android环境下的布局(Java:6194) 在ANDROIDX上。 资料来源:143) 在androidx.coordinatorlayout.widget.coordinatorlayout.a(未知 资料来源:32) 在androidx.coordinatorlayout.widget.coordinatorlayout.onlayout(未知 来源:48) 在android.view.view.layout上(view.java:20670) 在Android环境下的布局(Java:6194) 在Android .WIDGET.FrAMLayayOut.LayOutSt娃(FrAMLayayOut.java:323) 在android.widget.framelayout.onlayout上(framelayout.java:261) 在安卓.view .view .Dead(View,Java:20670) 在android.view.viewgroup.layout上(viewgroup.java:6194) 在Android中.WIDGET .LayStay.StEngStfFrime.(线性布局. Java:1812) 在android.widget.linearlayout.layoutVertical上(linearlayout.java:1656) 在android.widget.linearlayout.onlayout上(linearlayout.java:1565) 在安卓.view .view .Dead(View,Java:20670) 在Android上.View .View Goop.Dead(View GROUP,Java:6194) 在Android .WIDGET.FrAMLayayOut.LayOutSt娃(FrAMLayayOut.java:323) 在Android环境下的小部件。 在安卓.view .view .Dead(View,Java:20670) 在Android上.View .View Goop.Dead(View GROUP,Java:6194) 在Android中.WIDGET .LayStay.StEngStfFrime.(线性布局. Java:1812) 在Android中. WIDGET .线性布局. LayOutStand(线性布局. Java:1656) 在android.widget.linearlayout.onlayout上(linearlayout.java:1565) 在安卓.view .view .Dead(View,Java:20670) 在Android上.View .View Goop.Dead(View GROUP,Java:6194) 在android.widget.framelayout.layoutChildren上(framelayout.java:323) 在Android环境下的小部件。 在COM.Android .No.Orth.DealVIEW .OnDead(DeloVIEW,Java:753) 在Android环境下,视图.布局(视图:Java 20670:)30.087?E/ANDROIDRunTime: AT android.view.viewgroup.layout(viewgroup.java:6194) 在Android上.View .ViefRoTimpL.PrPrimeDead(ViefRooTimpL.java:2767) 在android.view.viewrootimpl.performTraversals上(viewrootimpl.java:2294) 在Android上.View .ViefRooTimPL。doTrAcess(ViefRooTimPL,Java:1447) 在Android上.View .ViefRooTimPL $ TracValSunnRel.Run(ViefRooTimPL,Java:7130) 在Android .View .CopooReals$CalbEdTrace.Run(编排程序. Java:935) 在安卓.View .编舞. DopLeBACK(编舞. Java:747) 在安卓.View。编舞。DoFrAME(编舞。Java:682) 在Android上.View .CordoRealgs$FrimDeDistPrimeField.Run(编排程序. Java:921) 在安卓.OS.Halder-HooLeCalBe后退(Helt.java:873) 在安卓.OS.Halder-Debug消息(HANDL.java:99) 在安卓.OS.Looper-Loo.(循环器.java:193) 在Addio.App.ActuviyTrime.Mead(ActuviyToel.java:6642) 在java. 在com.android.internal.os.runtimeinit$methodandargscaller.run(runtimeinit.java:493) 在COM.Android .No.OS.ZyGoTyIn.Mault(ZyGoTynIt.java:858) 2018-06-24 00:21:30.137 1796-1880/?E/输入调度程序:通道 5896582年 app.itsour.elegantstocks/app.itsour.elegantstocks.feature.navigator.navigatorActivity (服务器)'~通道不可恢复地被破坏,将被处理! 2018-06-24 00:21:30.253 5198-9377/?E/EntrySyncManager:无法 确定账户名称:撤销请求2018-06-24 00:21:30.253 5198-9377/?e/NoWror:无法访问来自EngyPvices的数据。 执行异常。 com谷歌。 刷新条目的计划请求。客户端错误代码:3 在COM.谷歌.Un.U.L..O.D.EA(SooCyFr档:85) 在com.google.common.util.concurrent.d.get上(源文件:23) 在COM.谷歌.Un.U.L.R.L.GET(SooCyFr档:2) 在com.google.android.apps.gsa.staticplugins.nowstream.b.a.be.cai上(源文件:47) 在com.google.android.apps.gsa.staticplugins.nowstream.b.a.be.cah(源文件:176) 在谷歌。Android。Apps.gsa. StutoPuxin。NoSoo.B.A.BH.Run(未知) 资料来源:2) 在谷歌,Android,Apps.Asv.GSA.共享.UTI.Or.R...Run(SooCyFr:4) 在java.util.concurrent.executors$runnableadapter.call上(executors.java:458) 在java.util.concurrent.futuretask.run上运行(futuretask.java:266) 在Java.UTI.Actual.ExtUntuals$RunnabLeAdPult.Cele:(执行器.java:458) 在java.util.concurrent.futuretask.run上运行(futuretask.java:266) 在COM。谷歌。Android。Apps.gsa.共享.U.I.O.M.R.B.G.Run(未知) 资料来源:4) 在com.google.android.apps.gsa.shared.util.concurrent.b.aw.run上(源文件:4) 在com.google.android.apps.gsa.shared.util.concurrent.b.aw.run上(源文件:4) 在Java.UTI.Orth.TycRePoLeExtUnor。RunWork(TythPoLeExcel)。Java:1167) 在java.util.concurrent.threadpoolexecutor$worker.run上(threadpoolexecutor.java:641) 运行(thread.java:764) 在com.google.android.apps.gsa.shared.util.concurrent.b.i.run上(源文件:6) 原因:com.google.android.apps.gsa.sidekick.main.h.n:无法完成刷新条目的计划请求。客户端错误代码:3 在com.google.android.apps.gsa.staticplugins.nowstream.b.a.aq.az(未知 资料来源:4) 在COM.谷歌上.Un.U.L.Qual.Q.AP(SooCyFr档:7) 在谷歌上,常见的。 在COM.谷歌上.Un.U.L.O.B.T.Excel(SooCyFr:3) 在com.google.common.util.concurrent.d.b上(源文件:275) 在com.google.common.util.concurrent.d.addListener上(源文件:135) 在com.google.common.util.concurrent.p.b上(源文件:3) 在com.google.android.apps.gsa.shared.util.concurrent.h.a上(源文件:16) 在com.google.android.apps.gsa.shared.util.concurrent.h.a(源文件:13) com,谷歌,Android,Apps.gs. StutoPuxin . NoStask.B.A.B.CI(SooCyFr:45) 在com.google.android.apps.gsa.staticplugins.nowstream.b.a.be.cah(源文件:176) 在谷歌。Android。Apps.gsa. StutoPuxin。NoSoo.B.A.BH.Run(未知) 资料来源:2) 在谷歌上运行。 在java.util.concurrent.executors$runnableadapter.call上(executors.java:458) 在java.util.concurrent.futuretask.run上运行(futuretask.java:266) 在Java.UTI.Actual.ExtUntuals$RunnabLeAdPult.Cele:(执行器.java:458) 在运行时,运行时为266。 在com.google.android.apps.gsa.shared.util.concurrent.b.g.run(未知 资料来源:4) 在谷歌,Android,Apps.Asv.Gas.Posial.UTI.Or.B.A.R.Run(SooCyFr:4) 在COM.谷歌. Android .App.gs.共享.UTI.Or.B.AW.Run(SoeCyFr:4) 在Java.UTI.Orth.TycRePoLeExtUnor。RunWork(TythPoLeExcel)。Java:1167) 在Java.UTI.Orth.TycRePoLeExtor中$WorkWork.Run(TythPoLeExpCutoor,Java:641) 在Java.Lang.Trime.Run(线程.java:764) 在谷歌,Android,Apvest.GSA.共享.UTI.Or.B.I.Run(SooCyFr:6)

    我的毕业档案。 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"
    }
    

    前锋:

    # 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.**
    
    1 回复  |  直到 8 年前
        1
  •  26
  •   Shmuel Developer_vaibhav    8 年前

    添加 -keep class androidx.core.app.CoreComponentFactory { *; } 到你的proguard配置,这样这个类就不会被proguard

    推荐文章