我肯定有一个与multidex
有关的问题。基本上,我使用的一个库在jar中有一个.properties
资源包。随着我的应用程序开始增长,我开始遇到问题。过去,我曾发表过几篇文章,但从未提出任何解决方案(post 1,post 2)。实际上,第2个帖子对此问题有更多详细信息。
基本上,缺少此资源,除非我强制该Jar上的某些代码在Application
onCreate
方法上运行。至少直到昨天才是问题。
昨天我更新了一个与此无关的jar,但现在它的体积比以前大(我认为这意味着它具有更多的方法),现在代码在同一问题上再次失败{{1 }},但现在它对所有人都失败了,而不仅仅是某些用户。
我使用apktool分解了apk,其中一个有效,一个不起作用(基本上将那些不相关的jar降级了),两个apk中都有一个java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale en_US
文件夹,但是一个可用的{ }}放在该文件夹中,而那个不起作用的文件夹不在该文件夹中。我已经解压缩了那些无关的jar,只是为了确保它们没有unknown
软件包,它们是jar,所以它们没有其他可能影响gradle构建的东西。
基本上我现在的理论是,这些罐子足够大,可以将LocalStrings.properties
的东西从第一个dex文件中推出,但这并不完全正确,因为javax.servlet
文件没有甚至进入dex文件。如果我只是解压缩apk,则可以在根文件夹上看到javax.servlet
包,并在正确的位置看到资源文件,但不能看到properties
,而如果我对一个可用的apk这样做,我可以看到javax
在其中。
现在我正在测试LocalStrings.properties
,并且所有LocalStrings.properties
都进入了主dex文件,但仍然无法multiDexKeepProguard
出现在apk中,即使:
javax.servlet
我还尝试了其他一些疯狂的事情,例如使用LocalStrings.properties
包将
-keepclassmembers class **$Properties
文件放入我的主应用程序包中,但它也无济于事。
那我还能尝试什么?这是一个错误还是我做错了什么?
谢谢。
编辑:我想报告,我已经通过删除不再使用的依赖项(广告网络)再次摆脱了这个问题。当我使用dex2smali查看第一个dex文件并看到它存在时,我意识到我仍然具有这种依赖性。因此,它放在第一个dex文件中的罐子的大小绝对似乎是一个问题。
编辑:我在我的proguard设置中设置了它:
LocalStrings.properties
答案 0 :(得分:0)
您的软件包属性文件似乎已被 ProGuard 剥离。我不确定您是否尝试过以下配置
-keep class javax.servlet.**
或
-keep class javax.servlet.** { *; }
或
-optimizations !javax.servlet
-dontoptimize
此外,更多参考文献:
答案 1 :(得分:0)
不确定这样做是否正确,但显然proguard误为我删除了* .properties文件。
使用它进行构建的固定方法
minifyEnabled false
然后返回
minifyEnabled true
之后,*。properties文件在最终版本中再次可用。