La aplicación se bloquea sólo en la versión de lanzamiento

Cuando ejecuta la aplicación en modo de depuración , la aplicación no puede bloquearse. Pero cuando genera la liberación del archivo .apk, la aplicación se bloquea. Este error no ocurre en todos los teléfonos , en sólo unos pocos que tienen el android 6.

El logcat muestra que el problema es NullPointerException en la clase ( android.support.v4.widget.drawerlayout ). ¿Cómo se puede lanzar una NullPointerException sólo en la versión apk?

Ya desactivamos proguard, minify y shrinkResources. No resolvió este error.

Aquí algunos registros:

Attempt to invoke virtual method 'int android.view.WindowInsets.getSystemWindowInsetLeft()' on a null object reference at android.support.v4.widget.ia(Unknown Source) at android.support.v4.widget.DrawerLayout$da(Unknown Source) at android.support.v4.widget.DrawerLayout.onMeasure(Unknown Source) at android.view.View.measure(View.java:18799) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.support.v7.widget.ContentFrameLayout.onMeasure(Unknown Source) at android.view.View.measure(View.java:18799) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 

Usted está recibiendo NullPointerException en android.support.v4.widget.drawerlayout

NullPointerException se activa cuando una aplicación intenta utilizar una referencia de objeto que tiene el valor nulo.

¿Cómo se puede lanzar una NullPointerException sólo en la versión apk?

Cuando prepara su aplicación para la liberación, configura, crea y prueba una versión de la aplicación. Las tareas de configuración son sencillas, con tareas básicas de limpieza de código y de modificación de código que ayudan a optimizar su aplicación.

  1. Leer Preparar para la liberación

  2. establecer minifyEnabled false

Usted puede personalizar su build.gradle como este

  buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' debuggable false zipAlignEnabled true jniDebuggable false renderscriptDebuggable false } } 

Asegúrese de usar una biblioteca de soporte estable y herramientas de compilación .

  compileSdkVersion 24 buildToolsVersion "24.0.2" compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.android.support:design:24.2.0' 

Nivel del proyecto

  classpath 'com.android.tools.build:gradle:2.1.2' // or 2.2.2 

Entonces

En el menú principal, elija Archivo | Invalidar cachés / reiniciar. El mensaje Invalidate Caches aparece informándole que las cachés se invalidarán y reconstruirán en el siguiente inicio. Utilice los botones del diálogo para invalidar las cachés, reinicie Android Studio.

Nota: Puede proporcionarnos su build.gradle . Inhabilite la instalación de "instant run" .

.

si está usando proguard en el lanzamiento, disminuya su versión gradle a 2.1.2

 classpath 'com.android.tools.build:gradle:2.1.2' 
 buildTypes { release { minifyEnabled false shrinkResources false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { abortOnError false checkReleaseBuilds false disable 'MissingTranslation' } 

Pruebe esto o simplemente limpie el proyecto y reinicie el proyecto. O Invalidate caches / restart de la opción de archivo. Archivo >> Invalidate caches / restart

A continuación, se indican algunos pasos que puede seguir para corregir este tipo de errores y asegurarse de que su aplicación no se bloquea en futuras actualizaciones de la plataforma:

  • Si su aplicación utiliza bibliotecas de plataformas privadas, debe actualizarla para incluir su propia copia de esas bibliotecas o utilizar las API públicas de NDK.

  • Si su aplicación utiliza una biblioteca de terceros que accede a símbolos privados, póngase en contacto con el autor de la biblioteca para actualizar la biblioteca.

  • Asegúrese de empaquetar todas sus bibliotecas que no sean NDK con su APK.

  • Utilice las funciones JNI estándar en lugar de getJavaVM y getJNIEnv de libandroid_runtime.so:

  AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h> AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or JavaVM::AttachCurrentThread from <jni.h>. 

Utilice __system_property_get en lugar del símbolo private property_get de libcutils.so. Para ello, utilice __system_property_get con lo siguiente:

incluir

Nota: La disponibilidad y el contenido de las propiedades del sistema no se comprueba a través de CTS. Una mejor solución sería evitar el uso de estas propiedades en conjunto. Utilice una versión local del símbolo SSL_ctrl de libcrypto.so. Por ejemplo, debe enlazar estáticamente libcyrpto.a en su archivo .so o incluir una versión enlazada dinámicamente de libcrypto.so desde BoringSSL / OpenSSL y empaquetarla en su APK.

De acuerdo con la referencia de Android api – Android Developer Api Reference

Si su diseño configura más de una vista de cajón por borde vertical de la ventana, se producirá una excepción en tiempo de ejecución. Sospecho que el diseño de su cajón es incorrecto. También compruebe que la gravedad de la disposición del cajón esté ajustada en "start"

 android:layout_gravity="start" 
 android{ buildTypes{ release{ minifyEnabled false } } } 

Pruebe esto en su build.grade.

O

Trate de reiniciar su Android Studio, así como su computadora. Como es conocido por todos, Android Studio puede realizar estúpido de vez en cuando.

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