安平做网站的电话,百度网站好评,站长工具亚洲,请人做网站卖东西好吗问题
安装应用#xff0c;点击图标启动立马闪退#xff01; 诡异的闪退#xff1a;AGP4 打包运行闪退#xff0c;AGP7 正常 unity 导出的 Android
日志两个主要点#xff1a; com.android.boot.App 是 Android 的 application 子类#xff0c;程序入口 java.lang.Class…
问题
安装应用点击图标启动立马闪退 诡异的闪退AGP4 打包运行闪退AGP7 正常 unity 导出的 Android
日志两个主要点 com.android.boot.App 是 Android 的 application 子类程序入口 java.lang.ClassNotFoundException: Didn’t find class “com.android.boot.App” o0o0O0o/OOO0oo/Ooo0oo/Ooo0oo/o0OOo0oo/oOo0o 是混淆之后的一个类类名 java.lang.NoClassDefFoundError: Failed resolution of: Lo0o0O0o/OOO0oo/Ooo0oo/Ooo0oo/o0OOo0oo/oOo0o;
10:59:48.668 1664-1664 AndroidRuntime pid-1664 Shutting down VM
10:59:48.668 1664-1664 AndroidRuntime pid-1664 FATAL EXCEPTION: main
Process: com.primer.hello.world.gamecenter, PID: 1664
java.lang.RuntimeException: Unable to instantiate application com.android.boot.App package com.primer.hello.world.gamecenter: java.lang.ClassNotFoundException: Didnt find class com.android.boot.App on path: DexPathList[[zip file /data/app/~~W6mjZeLN-UnIJxZJb7wgMg/com.primer.hello.world.gamecenter-Bem74GRkWNj-5Qcy_nln7A/base.apk],nativeLibraryDirectories[/data/app/~~W6mjZeLN-UnIJxZJb7wgMg/com.primer.hello.world.gamecenter-Bem74GRkWNj-5Qcy_nln7A/lib/arm64,/data/app/~~W6mjZeLN-UnIJxZJb7wgMg/com.primer.hello.world.gamecenter-Bem74GRkWNj-5Qcy_nln7A/base.apk!/lib/arm64-v8a, /system/lib64,/system_ext/lib64]]at android.app.LoadedApk.makeApplication(LoadedApk.java:1377)at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7029)at android.app.ActivityThread.access$1600(ActivityThread.java:274)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2128)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loopOnce(Looper.java:210)at android.os.Looper.loop(Looper.java:299)at android.app.ActivityThread.main(ActivityThread.java:8258)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)Caused by: java.lang.ClassNotFoundException: Didnt find class com.android.boot.App on path: DexPathList[[zip file /data/app/~~W6mjZeLN-UnIJxZJb7wgMg/com.primer.hello.world.gamecenter-Bem74GRkWNj-5Qcy_nln7A/base.apk],nativeLibraryDirectories[/data/app/~~W6mjZeLN-UnIJxZJb7wgMg/com.primer.hello.world.gamecenter-Bem74GRkWNj-5Qcy_nln7A/lib/arm64,/data/app/~~W6mjZeLN-UnIJxZJb7wgMg/com.primer.hello.world.gamecenter-Bem74GRkWNj-5Qcy_nln7A/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218)at java.lang.ClassLoader.loadClass(ClassLoader.java:379)at java.lang.ClassLoader.loadClass(ClassLoader.java:312)at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)at androidx.core.app.CoreComponentFactory.instantiateApplication(SourceFile:1)at android.app.Instrumentation.newApplication(Instrumentation.java:1177)at android.app.LoadedApk.makeApplication(LoadedApk.java:1369)at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7029) at android.app.ActivityThread.access$1600(ActivityThread.java:274) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2128) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8258) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045) Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lo0o0O0o/OOO0oo/Ooo0oo/Ooo0oo/o0OOo0oo/oOo0o;at java.lang.VMClassLoader.findLoadedClass(Native Method)at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738)at java.lang.ClassLoader.loadClass(ClassLoader.java:363)Caused by: java.lang.ClassNotFoundException: o0o0O0o.OOO0oo.Ooo0oo.Ooo0oo.o0OOo0oo.oOo0o分析
反编译查看安装包上述两个日志说不存在的类包里面确实是都存在的那很奇怪为什么还报错找不到类
仔细查看日志发现这么一条日志
15:22:18.220 17555-17555 arme.gamecente com...earme.gamecenter Zip open failed: Failure to verify dex file
/data/app/~~NiJHoKmY37f-XK_bubBobg
/com.primer.hello.world.gamecenter-HWN-Qr8S9Owht9MQ9453lA
/base.apk!classes2.dex: Method 62683(Lcom/unity3d/player/ReflectionHelper;.OOO)
has code, but is marked native or abstract这条日志有两点 好巧不巧上述日志两个找不到的类刚好都在 classes2.dex 这个文件中 Failure to verify dex file … classes2.dex 因为这个是 unity 引擎导出的 Android 工程所以有 ReflectionHelper 这个类 Lcom/unity3d/player/ReflectionHelper;.OOO) has code, but is marked native or abstract
解决
误打误撞一番搜索看到了希望竟没想到闪退和 AGP 版本有关系就此记录下其实具体原因我也还没搞清楚。
说明一下情况unity 导出的 Android 工程默认是 APG7那么用这个刚打出的 Android 工程打包得到的安装包运行是正常的
因出包需求我们会把 Android 工程相关的 unity 部分比如 assets/bin/data导单独抽出来放到另外的 Android 工程集成了自定义混淆插件等的 Android 模板工程主要负责出线上包,这个模板工程一只使用的是 AGP4在这个模板工程打包得到的安装包运行是闪退的。
一开始还怀疑过是自定义混淆导致的闪退可能混淆了 unity 相关的某些类或资源导致但是经测试似乎和混淆并无关系。
问题解决了
第二天在 GitHub 看到了这个 issue跟着操作问题得到了解决。
Failure to verify dex file #1404 模板工程升级到 AGP7 再打包运行不闪退了。
你别说你还真别说让我想起了 unity 导出时就是 AGP7
这里的报错日志也是相似的 Method 56370(Lorg/webrtc/PeerConnectionFactory;. -$ N e s t Nest NestsmnativeCreatePeerConnectionFactory) has code, but is marked native or abstract 我对字节码也不是很熟悉还是没搞清楚这个报错日志是啥意思先记录下以后再说吧。