2016-04-08 54 views
7

Od ostatnich 2 miesięcy zaczęliśmy otrzymywać awarie w rodzimych wypadkach w naszej konsoli programisty tylko na niektórych urządzeniach Samsung.Rodzime awarie odbierane w urządzeniach Samsung tylko w wersjach Lollipop 5.0 i 5.1

Oto ślad katastrofy

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
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/[email protected]@[email protected]@classes.dex 
    #01 pc 0008091d /system/framework/arm/boot.oat 

A oto lista urządzeń, gdzie awarie zostały otrzymane do tej pory -

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) 

Wszelkie pomysły, dlaczego to się dzieje?

Oto 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' 
} 
+0

może być coś związane z tym .. http://developer.samsung.com/forum/board/thread/view.do?boardName=General&messageId= 280930 –

+0

Dziękuję Sunil, ale ten, o którym wspomniałeś, nie wydaje się być rodzimą awarią. – user669231

+0

Użyłeś zipalign? – Alexander

Odpowiedz

4

Według Android native crash initiating from /system/framework/arm/boot.oat błąd ten jest produkowany na niektórych urządzeniach Samsung kiedy apk jest wyrównany narzędziem zipalign użyciu Zopfli.

zgodnie z własnymi build.gradle używasz buildToolsVersion "23.0.0" więc powiedziałbym, że apk jest wyrównany narzędziem zipalign użyciu Zopfli i to jest źródłem problemu, które napotykają (Zopfli został dodany w wersji 21.0.0).

Należy pamiętać, że po wygenerowaniu apk przy użyciu Build -> Generate Signed APK plik apk jest automatycznie zipaligned. Od the documentation:

zipalign jest narzędziem, które zapewnia wyrównanie archiwum istotną optymalizację do aplikacji Android (.apk) plików

Aby go rozwiązać, można uniknąć automatycznie zipalign dodając zipAlignEnabled false do sekcji release z Twój build.gradle:

release { 
    //... 
    zipAlignEnabled false 
} 

Następnie trzeba ponownie wygenerować apk (można sprawdzić, czy apk nie został wyrównany narzędziem zipalign uruchomiony zipalign -c -v 4 yourapk.apk. Zostanie wydrukowany Verification FAILED), a następnie ręcznie zipalign apk za pomocą the zipalign instructions, unikając opcji -z.

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

Inną opcją jest zmiana buildToolsVersion, na przykład 20.0.0 (the zipalign narzędzie w tej wersji obejmują Zopfli doen't), ale nie jest to zalecane (Z the documentation):

Powinieneś zawsze aktualizuj komponent Narzędzia do budowania, pobierając najnowszą wersję za pomocą Menedżera Android SDK. Domyślnie zestaw SDK systemu Android korzysta z najnowszej pobranej wersji Narzędzi do budowania. Jeśli twoje projekty zależą od starszych wersji Narzędzi do budowania, Menedżer SDK umożliwia pobieranie i utrzymywanie oddzielnych wersji narzędzi do użytku z tymi projektami.

+0

Dziękuję Antonio za szczegółową odpowiedź. Spróbuje tego i potwierdzi, czy to rozwiąże problem. Mam jednak jedną wątpliwość, że ja też mam wiele urządzeń z Androidem 5.0 i Androidem 5.1, ale nie udało się odtworzyć problemu. Czy to możliwe, że problem występuje przypadkowo, a nie na wszystkich urządzeniach? – user669231

+0

Tak, myślę, że problem może się zdarzyć losowo lub tylko na niektórych urządzeniach. Tego rodzaju problemy są bardzo denerwujące, ponieważ są naprawdę trudne do śledzenia. Daj mi znać, jeśli zrobisz jakieś postępy. – antonio

+0

Czy w końcu rozwiązałeś swój problem? – antonio

0

Znalazłem właściwe rozwiązanie here. Korzystając

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

zamiast

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