gpt4 book ai didi

android - 将额外的库代码放入 framework.jar

转载 作者:行者123 更新时间:2023-11-29 20:26:55 24 4
gpt4 key购买 nike

我的 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 文件。

最佳答案

可能是因为使用支持库的应用程序(我猜除了你的应用程序)现在将具有来自两个来源的支持库类:一个来自框架,一个包含在他们的应用程序中。

所以你会得到这样的错误,其中(如果我正确阅读此错误日志)不允许内部类访问其父类:

DexOpt: resolve class illegal access:
Landroid/support/v4/app/BackStackRecord$3
-> Landroid/support/v4/app/BackStackRecord

如果我们假设 BackStackRecord$3BackStackRecord 类最终是从两个不同的来源引入的,这是合理的:BackStackRecord 不是公开的 ( it's package-protected ) ,因此不允许访问其包外的类(显然包括“具有相同包名但来源不同的类”)。或者也许内部类试图访问私有(private)字段,但被拒绝访问?无论如何,类似的东西。

如果您重命名添加到框架中的所有类(以及它们相互之间的所有引用),它可能会起作用,但是...就像问题评论所说的那样,您可能应该使用 multidex相反。

关于android - 将额外的库代码放入 framework.jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com