Сбой приложений только в версии выпуска

При запуске приложения в режиме отладки приложение не может аварийно завершить работу. Но при создании файла .apk release происходит сбой приложения. Эта ошибка не выполняется на всех телефонах, всего лишь у некоторых, у которых есть android 6.

Лог-код показывает, что проблема заключается в NullPointerException в классе (android.support.v4.widget.drawerlayout). Как NullPointerException запускается только в версии apk?

Мы уже отключили proguard, minify и shrinkResources. Не удалось устранить эту ошибку.

Здесь несколько журналов:

Attempt to invoke virtual method 'int android.view.WindowInsets.getSystemWindowInsetLeft()' on a null object reference
  at android.support.v4.widget.i.a(Unknown Source)
  at android.support.v4.widget.DrawerLayout$d.a(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)

Ответы

Ответ 1

Вы получаете NullPointerException в android.support.v4.widget.drawerlayout

NullPointerException генерируется, когда приложение пытается использовать ссылка на объект, имеющая нулевое значение.

Как NullPointerException запускается только в версии apk?

Когда вы готовите приложение к выпуску, вы настраиваете, и протестировать версию вашего приложения. Конфигурация задачи просты, включая базовую очистку кода и код которые помогают оптимизировать ваше приложение.

Вы можете настроить свой build.gradle следующим образом

 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

    }
}

Убедитесь, что вы используете стабильную библиотеку поддержки и инструменты сборки.

    compileSdkVersion 24
    buildToolsVersion "24.0.2"

     compile 'com.android.support:appcompat-v7:24.2.0'
     compile 'com.android.support:design:24.2.0'

Уровень проекта

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

Затем

В главном меню выберите Файл | Недействительный кеш/перезапуск. Появится сообщение Invalidate Caches, информирующее вас о том, что кэши будут быть недействительными и перестроены при следующем запуске. Используйте кнопки в диалоговое окно для отмены кэширования, перезапустите Android Studio.

Примечание. Вы можете предоставить нам build.gradle. Отключить "instant run" Объект.

.

Ответ 2

если вы используете proguard при выпуске, уменьшите версию gradle до версии 2.1.2

classpath 'com.android.tools.build:gradle:2.1.2'

Ответ 3

buildTypes {
    release {
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }
}
lintOptions {
    abortOnError false
    checkReleaseBuilds false
    disable 'MissingTranslation'
}

Попробуйте это или просто очистите проект и перезапустите проект. Или Недействить кеши/перезапуск из опции файла. Файл → Invalidate cache/restart

Ответ 4

Ниже приведены некоторые шаги, которые вы можете предпринять для исправления этих типов ошибок и убедитесь, что ваше приложение не разбивается о будущих обновлениях платформы:

  • Если ваше приложение использует библиотеки частных платформ, вы должны обновить его, чтобы включить его собственную копию этих библиотек или использовать общедоступные API NDK.

  • Если ваше приложение использует стороннюю библиотеку, которая обращается к закрытым символам, обратитесь к автору библиотеки, чтобы обновить библиотеку.

  • Убедитесь, что вы упаковываете все свои библиотеки, отличные от NDK, с помощью APK.

  • Используйте стандартные функции JNI вместо getJavaVM и getJNIEnv из libandroid_runtime.so:

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

Используйте __system_property_get вместо частного символа property_get от libcutils.so. Для этого используйте __system_property_get с следующие включают:

включить

Примечание. Доступность и содержимое системных свойств не проверяется с помощью CTS. Лучшим решением было бы избежать использования этих свойств в целом.     Используйте локальную версию символа SSL_ctrl из libcrypto.so. Например, вы должны статически ссылаться на libcyrpto.a в вашем .so файле или включить динамически связанную версию libcrypto.so из BoringSSL/OpenSSL и упакуйте его в APK.

Ответ 5

В соответствии с ссылкой android api - Справочник разработчика Api для Android

Если ваш макет настраивает более одного представления ящика по вертикальному краю окна, исключение будет выведено во время выполнения. Я подозреваю, что макет вашего ящика неверен. Также убедитесь, что плотность макета лотка установлена ​​на "старт"

android:layout_gravity="start"

Ответ 6

android{
  buildTypes{
     release{
        minifyEnabled false
     }
  }
}

Попробуйте это в своем build.grade.

Или

Попробуйте перезагрузить Android Studio, а также ваш компьютер. Как известно всем, Android Studio может иногда выполнять глупость.