android.view.InflateException(错误膨胀类)仅适用于生产

Nad*_*vN7 5 crash production android exception production-environment

我的应用程序使用了一些第三方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进行签名).

谢谢.

laa*_*lto 0

很可能,您的发布版本已通过混淆器运行,该混淆器破坏了类名称,而调试版本并未被混淆。

Android 应用程序通常使用 ProGuard 作为混淆器/优化器。

为什么它使用原始类名是因为库项目有一个 proguard 配置文件,其中包含不混淆特定类的规则,因为它们需要从 XML 布局动态引用。当您更改包名称时,混淆器规则与新的包名称不匹配。

proguard-project.txt具体来说,在项目目录中查找类似的规则

-keep public class foo.somepackage.SomeClassName
Run Code Online (Sandbox Code Playgroud)

并确保在更改包或类名称时更新规则。