Android.view.InflateException (Error inflar clase) sólo en la producción

Mi aplicación utiliza un tercero de terceros CustomView, que no lo agregué correctamente al proyecto. Lo que hice, descargé los archivos del proyecto como * .java y los agregué manualmente al proyecto bajo el paquete com.blabla.utils.CustomView (así lo definí en los archivos * .xml que usaban esta clase). Cuando estaba depurando / probando la aplicación en varios dispositivos (utilizando el cable usb, y el envío de un apk firmado a probador), todo estaba parece estar bien. Pero cuando subí la aplicación a la producción, de repente recibí una excepción

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*.*}: android.view.InflateException: Binary XML file line #55: Error inflating class com.*.*.CustomView

Ahora, me di cuenta de cuál era mi problema, no agregué el proyecto correctamente, necesitaba agregar la biblioteca como un proyecto existente en mi área de trabajo y ellos vincularan este proyecto a mi proyecto principal. Y cambié el com.blabla.utils.CustomView a com.theoriginaldeveloper.package en archivos * .xml. Se resolvió el problema subido un nuevo APK.

Pero mi pregunta es, ¿por qué no recibí este mensaje mientras estaba depurando la aplicación? ¿Cómo puedo estar seguro de evitar tales excepciones en la producción? ¿Que me estoy perdiendo aqui?

(Aviso: firmé el APK con el mismo almacén de claves que utilicé para probar y usar Eclipse).

Gracias.

Lo más probable es que tu versión de lanzamiento se ejecutara y obfuscator que mangled los nombres de las clases, mientras que las compilaciones de depuración no fueron ofuscadas.

Las aplicaciones de Android suelen utilizar ProGuard como obfuscador / optimizador.

¿Por qué funciona con los nombres de clase originales es porque el proyecto de biblioteca tiene un archivo de configuración proguard que contiene reglas para no ofuscar las clases particulares porque necesitan ser dinámicamente referenciables de diseños XML. Cuando cambió el nombre del paquete, la regla obfuscator no coincidía con el nuevo nombre del paquete.

Específicamente, busque proguard-project.txt en el directorio del proyecto y allí hay reglas como

 -keep public class foo.somepackage.SomeClassName 

Y asegúrese de que las reglas se actualizan si cambia nombres de paquete o clase.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.