我的APK對於很大的(對很多方法),並且我試圖把一些庫類(例如android/support/v4)放到framework.jar中。我拉framework.jar,提取classes.dex,baksmali,然後添加然後android/support/v4,smali,建立一個新的framework.jar,簽名,推到設備,並重新啓動設備。不幸的是我得到一些奇怪的dalvikvm驗證錯誤:把額外的庫代碼放到framework.jar
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文件。
雖然這是一個有趣的方法,但更簡單的方法是隻使用多個dex。 Gradle非常簡單。 –
我必須在Android上完成<5 –
它在API Level 15及更高版本上完美運行。由於我從未嘗試過,因此無法確定早期版本。 –