2020-04-12 22:03:24.204 18100-18100/com.laojizhang.compile_insert E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.laojizhang.compile_insert, PID: 18100
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/R$drawable;
at androidx.appcompat.widget.AppCompatDrawableManager$1.(AppCompatDrawableManager.java:63)
at androidx.appcompat.widget.AppCompatDrawableManager.preload(AppCompatDrawableManager.java:57)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:328)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:278)
at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:221)
at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:543)
at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:98)
at android.app.Activity.attach(Activity.java:6909)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2750)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.appcompat.R$drawable" on path: DexPathList[[zip file "/data/app/com.laojizhang.compile_insert-6QI6CYdHxt2f3XyKbd9MaQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.laojizhang.compile_insert-6QI6CYdHxt2f3XyKbd9MaQ==/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at androidx.appcompat.widget.AppCompatDrawableManager$1.(AppCompatDrawableManager.java:63)
at androidx.appcompat.widget.AppCompatDrawableManager.preload(AppCompatDrawableManager.java:57)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:328)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:278)
at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:221)
at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:543)
at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:98)
at android.app.Activity.attach(Activity.java:6909)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2750)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
导致出现该错误的原因是:从Android Gradle插件3.6.0-alpha01开始,不再生成R.java,并且将R片段与其他源分开编译为R.jar。修改Gradle 插件版本低于3.6就可以了,或者是在Transform 中copy R文件。
把这段代码复制到LifeCycleTransfrom.groovy的transfrom中就可以了
transformInput.jarInputs.each { JarInput jarInput ->
File file = jarInput.file
System.out.println("find jar input: " + file.name)
def dest = outputProvider.getContentLocation(jarInput.name,
jarInput.contentTypes,
jarInput.scopes, Format.JAR)
FileUtils.copyFile(file, dest)
}