我的应用使用了一些第三方CustomView,我没有将其正确添加到项目中。 我做了什么,我将项目的文件下载为* .java并将它们手动添加到com.blabla.utils.Custom包下的项目中(这是我在使用此类的* .xml文件中定义它的方式)。 当我在多个设备上调试/测试应用程序时(使用USB线缆,并将签名的apk发送给测试人员),一切似乎都没问题。 但是当我将应用程序上传到制作时,我突然异常
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*.*}:
android.view.InflateException: Binary XML file line #55: Error inflating class
com.*.*.CustomView
现在,我意识到我的问题是什么,我没有正确添加项目, 我需要将库作为现有项目添加到我的工作区中,并将这个项目链接到我的主项目。 我将com.blabla.utils.CustomView更改为* .xml文件中的com.theoriginaldeveloper.package。 它确实解决了上传新APK的问题。
但我的问题是,为什么我在调试应用程序时没有收到此消息? 我怎么能确定在生产中避免这种例外? 我在这里缺少什么?
(注意:我确实使用与测试和使用Eclipse相同的密钥库对APK进行签名。)
感谢。
答案 0 :(得分:0)
可能,你的发布版本已经运行并且混淆器会破坏类名,而调试版本没有被混淆。
Android应用通常使用ProGuard作为混淆器/优化器。
为什么它与原始类名一起使用是因为库项目有一个proguard配置文件,其中包含不混淆特定类的规则,因为它们需要可以从XML布局动态引用。更改包名称时,混淆器规则与新包名称不匹配。
具体来说,在项目目录中查找proguard-project.txt
,并在
-keep public class foo.somepackage.SomeClassName
并确保在更改包名或类名时更新规则。