Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SmartNews 5.0 ちょっと苦労した話 / shibuya.apk #19

hideoohashi
October 27, 2017

SmartNews 5.0 ちょっと苦労した話 / shibuya.apk #19

2017/10/27 shibuya.apk #19で発表したスライドです。
SmartNewsアプリについての簡単な紹介と、主にtargetSdkVersionを上げた時に遭遇した問題とその対応についての説明です。

hideoohashi

October 27, 2017
Tweet

More Decks by hideoohashi

Other Decks in Technology

Transcript

  1. 4

  2. 1.Support LibraryのminSdkVersionが9 (1) • compileSdkVersionとSupport Libraryのバージョンが違うと Android Studio上でエラー表示になる • Support

    Libraryのバージョンをあげるとビルドエラー ◦ > Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [com.android.support:support-v4:25.3.1] • 24.2.0からAPI level 8以下はサポート外になってました 11
  3. 2.Display size変更してもdensityが以前のまま (3) • View周りのソースコードを読んだり reflectionを使ってprivate memberの中身を 覗いてみたりしたところ、 TypedArray#mMetricsのdensityが 変わっていなかった

    • そこからオブジェクトの所有関係を 辿っていき、WebViewを生成していることが densityが変わらなくなる条件の 1つであることを突き止めました 15
  4. 2.Display size変更してもdensityが以前のまま (5) public class MyActivity extends Activity { @Override

    protected void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODE.N) { Resources res = getResources(); for (int i = 0; i < 5; i++) { res.obtainTypedArray(R.array.dummy) } } super.onCreate(savedInstanceState); } } <resources> <integer-array name=”dummy”> </integer-array> </resources> 17
  5. 3.Applicationクラスが呼ばれないことがある (2) • 数日後、別のユーザから同じような報告が届く • Google Developer Consoleを見てみると日に日に増えている クラッシュがあった •

    Applicationを継承したクラスのonCreate()が呼ばれていない と思われるようなクラッシュだった ◦ onCreate()でCrashlyticsの初期化を行なっているので、検出されないのも辻 褄があう • ApplicationのonCreate()が呼ばれないことがある? 19
  6. 3.Applicationクラスが呼ばれないことがある (3) • あった • 自動バックアップ処理が 実行されるときは AndroidManifest.xmlに Applicationクラスを 設定していても素の

    Applicationクラスが使われる ◦ https://android.googlesource.com/platform/frameworks/bas e/+/android-6.0.0_r7/services/core/java/com/android/server/ am/ActivityManagerService.java#6070 LoadedApk.java 20
  7. 3.Applicationクラスが呼ばれないことがある (5) • コマンドラインからのバックアップ実行とアプリ起動をぶつけて みる ◦ adb shell bmgr fullbackup

    <package> • クラッシュが発生し、同じコールスタックが取れた ◦ クラッシュ発生以降、普通に起動してもクラッシュが発生する状態になった(お そらくActivityManagerService側のフラグ管理がおかしくなったため) 22