Сбой приложений только в версии выпуска
При запуске приложения в режиме отладки приложение не может аварийно завершить работу. Но при создании файла .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 может иногда выполнять глупость.