当您在调试模式下运行应用程序时,应用程序无法崩溃。但是当生成.apk文件发布时,应用程序崩溃。 所有手机上都不会发生此错误,只有少数拥有Android 6的手机。
logcat显示问题是类中的 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)
答案 0 :(得分:4)
当应用程序尝试使用时抛出NullPointerException 具有空值的对象引用。
准备发布的应用程序时,需要配置,构建, 并测试您的应用程序的发布版本。配置 任务很简单,涉及基本代码清理和代码 有助于优化应用程序的修改任务。
设置 minifyEnabled false
您可以像这样自定义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"
工具。
答案 1 :(得分:0)
如果您在发布时使用proguard, 将您的gradle版本降低到2.1.2
classpath 'com.android.tools.build:gradle:2.1.2'
答案 2 :(得分:0)
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
checkReleaseBuilds false
disable 'MissingTranslation'
}
尝试此操作或只清理项目并重新启动项目。 或者从文件选项中无效缓存/重新启动。 文件>>无效缓存/重新启动
答案 3 :(得分:0)
您可以采取以下步骤来修复这些类型的错误,并确保您的应用在未来的平台更新中不会崩溃:
如果您的应用使用私有平台库,则应更新它以包含其自己的库副本或使用公共NDK API。
如果您的应用使用访问私有符号的第三方库,请与库作者联系以更新库。
确保使用APK打包所有非NDK库。
使用标准JNI函数代替libandroid_runtime.so中的getJavaVM和getJNIEnv:
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进行测试。更好的解决方法是避免完全使用这些属性。 使用libcrypto.so中的本地版本的SSL_ctrl符号。例如,您应该在.so文件中静态链接libcyrpto.a,或者 包含一个动态链接的libcrypto.so版本 BoringSSL / OpenSSL并将其打包到您的APK中。
答案 4 :(得分:0)
根据android api参考 - Android Developer Api Reference
如果您的布局在窗口的每个垂直边缘配置多个抽屉视图,则会在运行时抛出异常。 我怀疑您的抽屉布局不正确。还要检查抽屉的布局重力是否设置为“开始”
android:layout_gravity="start"
答案 5 :(得分:-2)
android{
buildTypes{
release{
minifyEnabled false
}
}
}
在build.grade中尝试此操作。
或
尝试重新启动Android Studio以及您的计算机。众所周知,Android Studio偶尔会执行愚蠢的操作。