以前 Android 4.3 (JB) を入れてしまった Galaxy S4 でデバッグができない!と嘆いていましたが、最近 KitKat (4.4) のファームウェアが公開されたのでこれを導入してみることにしました。
4.3が入った状態のものについて、もう少し状況を説明しておきます。工場出荷状態では 4.2 だったようですが、これを 4.3へと上げてしまったところ、ダウングレードできない状態となっていました。また、ダウンロードモードに入ったときでも、”Write Protection: Enable” という表示が出るようになってしまい、ネイティブデバッグを必要とするような状況で開発機として使うには向かない状態となっていました。
KitKat のインストール
先に結果ですが、バージョンアップは成功しました。その結果 Kitkat(4.4.2)がインストール成功しました(Write Protection: Enableと表示されている状況のまま更新はできた)。
かるく作業の流れを書いておきますが、詳しくは検索してもっと親切なサイトをみたほうがよいと思います・・・。
使用したのは odin 3.09 です。また使用したファームは、I9505XXUFNB8_I9505OXAFNB8_DBT.zip です。
このzipを展開して I9505XXUFNB8_I9505OXAFNB8_I9505XXUFNB8_HOME.tar.md5 というファイルができあがるので、これをodinの AP ボタンを押してファイル選択しておきます。
Galaxy S4をダウンロードモードにして PCに接続してデバイスマネージャーから確認しておきます。?マークが出ていたりしてデバイスが正常に認識できていない場合、ファームの更新は行えないので対象となるUSBドライバをインストールして認識できるようにしておきます。(SAMSUNG USB Driver for MobilePhones というものがあるので).
adbが使えるようになっているからこのドライバも適用済み、とは限らないので開発者であってもドライバインストールすることになる可能性があります。
うまくいくと、odin3 の画面で COM:** というような表記で認識していることがわかります。これが出ていない場合認識されていないので認識できるように設定して下さい。
認識できていればあとはSTARTボタンを押して、しばらく放置します。
うまくいくと書き込み終了後にはデバイスがリブートして、新システムで起動してきます。
書き込み成功したときには odin はこんな感じで表示されています。
また起動後の Galaxy S4 のほうでのOSバージョン確認画面ではこんな感じです。
ndk-gdb の動作確認
hello-jni のサンプルを起動させて ndk-gdb-py にて接続してみたときを前回と同様に確認してみます。
$ adb shell $ run-as com.example.hellojni $ ls -l ls -l drwxrwx--x u0_a202 u0_a202 2013-01-10 21:12 cache srwxrwxrwx u0_a202 u0_a202 2014-03-08 21:05 debug-socket lrwxrwxrwx install install 2014-03-08 19:09 lib -> /data/app-lib/com. example.hellojni-1 $ ls -l /proc/19315 # gdbserverのPIDが 19315 だったので. dr-xr-xr-x u0_a202 u0_a202 2014-03-08 21:10 attr -r-------- u0_a202 u0_a202 0 2014-03-08 21:10 auxv -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 cgroup --w------- u0_a202 u0_a202 0 2014-03-08 21:10 clear_refs -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:05 cmdline -rw-r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 comm -rw-r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 coredump_filter lrwxrwxrwx u0_a202 u0_a202 2014-03-08 21:10 cwd -> /data/data/com.exa mple.hellojni -r-------- u0_a202 u0_a202 0 2014-03-08 21:10 environ lrwxrwxrwx u0_a202 u0_a202 2014-03-08 21:10 exe -> /data/app-lib/com. example.hellojni-1/gdbserver dr-x------ u0_a202 u0_a202 2014-03-08 21:10 fd dr-x------ u0_a202 u0_a202 2014-03-08 21:10 fdinfo -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 limits -rw-r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 loginuid -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 maps -rw------- u0_a202 u0_a202 0 2014-03-08 21:10 mem -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 mountinfo -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 mounts -r-------- u0_a202 u0_a202 0 2014-03-08 21:10 mountstats dr-xr-xr-x u0_a202 u0_a202 2014-03-08 21:10 net dr-x--x--x u0_a202 u0_a202 2014-03-08 21:10 ns -rw-r--r-- u0_a202 u0_a202 0 2014-03-08 21:05 oom_adj -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 oom_score -rw-r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 oom_score_adj -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 pagemap -r--r--r-- u0_a202 u0_a202 0 2014-03-08 21:10 personality lrwxrwxrwx u0_a202 u0_a202 2014-03-08 21:10 root -> /
以前の4.3の時と比べてうまくパーミッションの設定ができているようです。
これなら ndk-gdb の接続がうまくいくのも納得です。
(記事中では書いていませんが、ちゃんとブレークポイントを設定できることも確認してみました)。
まとめ
無事にネイティブデバッグができる端末として復活できた Galaxy S4 で、一安心です。4.3バージョンでは色々と問題があちこちで起こっているようなので、どの端末も 4.4 が使えるようになるといいなと思います。
また、この S4 ですが実は友人のもので、快くfirmwareの更新を許可してくれたことにとても感謝しています。
コメント
はじめまして。質問失礼します
GalaxyS4 4.3 なのですが、事情があって4.2.2までダウングレードしたく、Odinでいろいろやってみたのですが、どうもダウンロードモードに書いてある「WRITE PROTECTION:enable」が言っているように書き込み禁止になっているようです。
このまま4.4 Kitkatに上げれたということですが、4.4のダウンロードモードではWRITE PROTECTION:enable はなくなっていらっしゃいますか?
4.4の状態のものでも WRITE PROTECTION: Enableの状態は変化せずでした。
個人的にも4.2系へ戻したかったのですが、今のところはそれは叶わずの状態ですね。
そうですか…回答ありがとうございます。
あ、そういえば、4.4ではダイヤルで*#*#4636#*#*と入力して設定画面でてきますか??
そういえば試していなかったので、ちょっと試してみました。
残念ながら、設定画面などへ遷移することはありませんでした。
ありがとうございます~!