仅在三星Lollipop 5.0和5.1版本设备上收到本机崩溃报告

11

在过去的两个月中,我们只在一些三星设备上的开发人员控制台中收到了本地崩溃的信息。

以下是崩溃追踪信息:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/ha3gjv/ha3g:5.0/LRX21V/N9000QXXUEBOG3:user/release-keys'
Revision: '11'
ABI: 'arm'
pid: 10422, tid: 10478, name: AsyncTask #2  >>> com.sample.app <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c
    r0 131413a0  r1 131413a0  r2 b1687070  r3 00262827
    r4 00000349  r5 131413a0  r6 00000000  r7 00000002
    r8 131412c0  r9 af071800  sl 87783218  fp 13141360
    ip 000031d0  sp 9530e8c0  lr 7446c91f  pc a0a83596  cpsr 000f0030

backtrace:
    #00 pc 001bc596  /data/dalvik-cache/arm/data@app@com.sample.app-2@base.apk@classes.dex
    #01 pc 0008091d  /system/framework/arm/boot.oat

以下是迄今为止收到崩溃报告的设备列表 -

Galaxy S6 (zeroflte)
Galaxy S6 Edge+ (zenltevzw)
Galaxy A5(2016) (a5xelte)
Galaxy S5 Neo (s5neolte)    
Galaxy S6 Edge (zerolte)    
Galaxy S6 (zerofltetmo)
Galaxy Note3 (ha3g)
Galaxy J7 (j7elte)
Galaxy Note4 (trelte)
Galaxy S5 (k3g)
Galaxy Alpha (slte)

有什么想法是为什么会这样吗?

这是 build.gradle 文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.test" 
        minSdkVersion 14
        targetSdkVersion 22
    }

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

dependencies {
    compile files('libs/okhttp-2.4.0.jar')
    compile files('libs/okhttp-urlconnection-2.4.0.jar')
    compile files('libs/okio-1.4.0.jar')
    compile files('libs/mediaplayersdk.jar')


    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.android.support:appcompat-v7:23.1.0'
}

谢谢Sunil,但是你提到的那个似乎不是本地崩溃。 - user669231
你使用了zipalign吗? - Alexander
我通过Android Studio选项生成APK, Build -> Generate Signed APK。 - user669231
你能发一下你的 build.gradle 文件吗? - antonio
你使用本地库吗?也许你尝试使用32位本地库,而所有这些设备都是64位的?(只是猜测) - Basic Coder
2个回答

7
根据Android native crash initiating from /system/framework/arm/boot.oat,在一些三星设备上,当apk使用Zopfli进行zipalign时会产生此错误。
根据您的build.gradle,您正在使用buildToolsVersion "23.0.0",因此我认为您的apk是使用Zopfli进行zipalign的,这是您遇到问题的原因(Zopfli添加在版本21.0.0中)。
请注意,当您使用Build -> Generate Signed APK生成apk时,您的apk会自动进行zipalign。根据文档

zipalign是一个存档对齐工具,可为Android应用程序(.apk)文件提供重要优化

要解决此问题,您可以在build.gradlerelease部分中添加zipAlignEnabled false以避免自动zipalign。
release {
    //...
    zipAlignEnabled false
}

接下来,您需要再次生成您的apk文件(您可以通过运行zipalign -c -v 4 yourapk.apk命令检查您的apk是否已完成对齐。如果输出Verification FAILED则表示未对齐),然后按照zipalign指南手动对齐apk,避免使用-z选项。

zipalign -f -v 4 yourapk.apk yourzipalignedapk.apk

另一种选择是将buildToolsVersion更改为,例如20.0.0(该版本的zipalign工具不包括Zopfli),但这不被推荐(来自文档):
“您应始终通过使用Android SDK Manager下载最新版本来更新Build Tools组件。默认情况下,Android SDK使用已下载的Build Tools的最新版本。如果您的项目依赖于旧版本的Build Tools,则SDK Manager允许您下载和维护用于这些项目的独立工具版本。”

感谢Antonio提供详细的答案。我会尝试这个方法,并确认是否解决了问题。然而,我的疑虑是,我也有多个Android 5.0和Android 5.1设备,但无法复现此问题。那么,问题是否可能是随机发生的,并非所有设备都会出现? - user669231
1
是的,我认为问题可能会随机发生或仅在某些设备上出现。这种问题非常烦人,因为它们真的很难追踪。请让我知道您是否取得了任何进展。 - antonio
@user669231 这个话题有什么新消息吗?它有帮助吗?如果您能提供一些见解并接受这个答案,那就太好了。 - anon
@Nick Jian,zipalign优化apk文件,但有些三星设备似乎与其不兼容。根据 这个(2016年9月23日)的报告,zipalign -z在buildtools 2.2+上已不再受支持 - antonio
总之,三星应该停止制造新的Android设备。 - Kimi Chiu
显示剩余2条评论

0

我在这里找到了合适的解决方案。通过使用

 -keep class !android.support.v7.internal.view.menu.**,android.support.v7.**      {*;}

替代

 -keep class android.support.v7.** {*;}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接