android.view.InflateException(错误充气类)仅适用于生产环境

android.view.InflateException(错误充气类)仅适用于生产环境,android,exception,crash,production-environment,production,Android,Exception,Crash,Production Environment,Production,我的应用程序使用了第三方CustomView,但我没有将其正确添加到项目中。 在我所做的工作中,我将项目的文件下载为*.java,并将它们手动添加到包com.blabla.utils.CustomView下的项目中(这是我在使用该类的*.xml文件中定义它的方式)。 当我在多个设备上调试/测试应用程序时(使用usb电缆,并向测试仪发送签名的apk),一切似乎都正常。 但当我把这个应用程序上传到制作时,我突然发现了一个异常 java.lang.RuntimeException:无法启动活动组件信息

我的应用程序使用了第三方CustomView,但我没有将其正确添加到项目中。 在我所做的工作中,我将项目的文件下载为*.java,并将它们手动添加到包com.blabla.utils.CustomView下的项目中(这是我在使用该类的*.xml文件中定义它的方式)。 当我在多个设备上调试/测试应用程序时(使用usb电缆,并向测试仪发送签名的apk),一切似乎都正常。 但当我把这个应用程序上传到制作时,我突然发现了一个异常

java.lang.RuntimeException:无法启动活动组件信息{com.*.}:
android.view.InflateException:二进制XML文件行#55:膨胀类时出错
com.*.CustomView

现在,我意识到我的问题是,我没有正确添加项目, 我需要将库作为一个现有项目添加到我的工作区中,并将该项目链接到我的主项目。 我在*.xml文件中将com.blabla.utils.CustomView更改为com.theoriginaldeveloper.package。 它确实解决了问题,上传了一个新的APK

但我的问题是,为什么我在调试应用程序时没有收到这条消息? 我如何确保在生产中避免此类异常? 我错过了什么

(注意:我确实使用测试和使用Eclipse时使用的相同密钥库对APK进行了签名)


谢谢。

很可能,您的发布版本已经运行并混淆了类名称,而调试版本没有混淆

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

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

具体来说,在项目目录中查找
proguard project.txt
,并在其中查找规则,如

-keep public class foo.somepackage.SomeClassName

如果您更改了软件包或类名,请确保更新规则。

据我所知,他还签署并导出了一个作为第三方应用程序安装的软件包,没有问题。当应用程序发布到play store上时,您认为ProGuard混淆会受到影响吗?