【发布时间】:2015-12-02 00:48:06
【问题描述】:
我的 APK 太大(有很多方法),作为一种解决方案,我试图将一些库类(例如 android/support/v4)放到 framework.jar 中。我拉framework.jar,提取classes.dex,baksmali,然后添加android/support/v4,smali,构建一个新的framework.jar,签名,推送到设备并重启设备。不幸的是,我收到了一些奇怪的 dalvikvm 验证错误:
FATAL EXCEPTION: main
Process: com.example.myapp, PID: 3792
java.lang.VerifyError: android/support/v4/view/ViewPager
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Method.invokeNative(Native Method)
at dalvik.system.NativeStart.main(Native Method)
/system/framework/framework2.jar odex has stale dependencies
/system/framework/telephony-common.jar odex has stale dependencies
/system/framework/voip-common.jar odex has stale dependencies
/system/framework/mms-common.jar odex has stale dependencies
/system/framework/android.policy.jar odex has stale dependencies
/system/framework/services.jar odex has stale dependencies
/system/framework/apache-xml.jar odex has stale dependencies
/system/framework/webviewchromium.jar odex has stale dependencies
/system/framework/am.jar odex has stale dependencies
VFY: unable to resolve virtual method 283: Landroid/content/Context
.getCodeCacheDir ()Ljava/io/File
/system/framework/framework2.jar odex has stale dependencies
/system/framework/telephony-common.jar odex has stale dependencies
/system/framework/voip-common.jar odex has stale dependencies
/system/framework/mms-common.jar odex has stale dependencies
/system/framework/android.policy.jar odex has stale dependencies
/system/framework/services.jar odex has stale dependencies
/system/framework/apache-xml.jar odex has stale dependencies
/system/framework/webviewchromium.jar odex has stale dependencies
DexOpt: resolve class illegal access: Landroid/support/v4/app/BackStackRecord$2
-> Landroid/support/v4/app/BackStackRecord
DexOpt: resolve class illegal access: Landroid/support/v4/app/BackStackRecord$3
-> Landroid/support/v4/app/BackStackRecord
知道我做错了什么吗?我只是使用一台设备进行测试。所以我不希望我的 apk 在任何其他设备上运行。
我认为这与:
Is it necessary to keep classes of the same package in the same dex while using multiple dex files
但是我不明白框架是如何工作的,因为它包含自己单独的 dex 文件。
【问题讨论】:
-
虽然这是一种有趣的方法,但更简单的方法是使用 multi-dex。使用 Gradle 非常简单。
-
我必须在 Android
-
它在 API 级别 15 及更高级别上完美运行。不能肯定地说早期版本,因为我从未尝试过。
-
仍然想了解它为什么不起作用。