仅使用Lollipop 5.0&amp ;;三星设备接收本机崩溃。 5.1版本

时间:2016-04-08 05:47:45

标签: android crash android-5.0-lollipop native samsung-mobile

自过去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

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

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'
}

2 个答案:

答案 0 :(得分:7)

根据Android native crash initiating from /system/framework/arm/boot.oat,当使用Zopfli对apk进行压码时,某些三星设备会产生此错误。

根据您使用的build.gradle buildToolsVersion "23.0.0"所以我会说你的apk是使用Zopfli压缩对齐的,这是你找到的问题的根源(Zopfli是在{{{ 1}})。

请注意,当您使用21.0.0生成apk时,您的apk会自动压缩对齐。来自the documentation

  

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

要解决此问题,您可以避免将Build -> Generate Signed APK自动压缩添加到zipAlignEnabled false的{​​{1}}部分:

release

然后,你需要再次生成你的apk(你可以检查你的apk不是zipaligned运行build.gradle。它将输出release { //... zipAlignEnabled false } )然后使用the zipalign instructions手动压缩apk ,避免使用zipalign -c -v 4 yourapk.apk选项。

Verification FAILED

其他选项是将-z更改为,例如zipalign -f -v 4 yourapk.apk yourzipalignedapk.apk (此版本中的zipalign工具不包括Zopfli)但不建议这样做(来自the documentation):

  

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

答案 1 :(得分:0)

我找到了正确的解决方案here。      使用

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

而不是

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