仅在Lollipop 5.0和5.1版本的三星设备中收到本机崩溃

use*_*231 10 crash android native samsung-mobile android-5.0-lollipop

自从过去2个月以来,我们已经开始在我们的开发者控制台中仅针对某些三星设备接收本机崩溃.

这是崩溃跟踪

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
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
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

关于它为什么会发生的任何想法?

这是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'
}
Run Code Online (Sandbox Code Playgroud)

ant*_*nio 7

根据从/system/framework/arm/boot.oat启动的Android本机崩溃,当使用Zopfli对apk进行zipaligned时,在某些三星设备上会产生此错误.

根据build.gradle你的使用buildToolsVersion "23.0.0",我会说你的apk是使用Zopfli zipaligned,这是你找到的问题的来源(Zopfli在版本中添加21.0.0).

请注意,使用Build -> Generate Signed APKapk 生成apk时会自动进行zipaligned.从文档:

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

要解决此问题,您可以避免自动zipalign添加zipAlignEnabled falserelease您的部分build.gradle:

release {
    //...
    zipAlignEnabled false
}
Run Code Online (Sandbox Code Playgroud)

然后,你需要再次生成你的apk(你可以检查你的apk是不是zipaligned运行zipalign -c -v 4 yourapk.apk.它将输出Verification FAILED)然后使用zipalign指令手动zipalign apk ,避免-z选项.

zipalign -f -v 4 yourapk.apk yourzipalignedapk.apk
Run Code Online (Sandbox Code Playgroud)

其他选项是更改buildToolsVersion为,例如20.0.0(此版本中的zipalign工具不包括Zopfli)但不建议这样做(从文档中):

您应该始终使用Android SDK Manager下载最新版本来更新Build Tools组件.默认情况下,Android SDK使用最新下载的Build Tools版本.如果您的项目依赖于较早版本的Build Tools,则SDK Manager允许您下载和维护用于这些项目的工具的单独版本.