Last modified: Thu Dec 21 23:08:54 JST 2017

[root不要でFireタブレットでGoogle Playを動かす方法に戻る]

資料編

「root不要でFireタブレットでGoogle Playを動かす方法」が長くなったので、実験した証拠画像はこちらに載せます。あまりみなさんの役には立たないと思いますが、私は憶測で書いているわけではない、という事ですね。

Fire OS 5.6.0.0 でインストール押せず問題

注:これは2017-11-19 頃の情報です

Fire OS 5.6.0.0 にシステムアップデートした状態だと、Google Play 関係の APK をダウンロードしても、「インストール」がグレイアウトしたままでインストールできません。もちろん「不明ソースからのアプリ」は許可にしています。右の画像をクリックしてみてください。なお Fire タブレット (2015年モデル) にて確認。

回避策発見

APK のインストール画面で、

上記の謎の操作を、4つの APK の1つ1つに実施

Google の登録面登場、セーフ!

追・記回: Google Play と無関係な APK でも、いったんスリープにしないとインストールできない所までわかりました。これをどう考えたらいいですかね。Fire OS 5.6.0.0 になってバグっただけのか、何かしらのセキュリティーを高めようとして APK のインストール前に操作を追加要求するようにしたのか、Google Play のインストール許すまじと対策しようとしたがやり損なったが近々インストールできないようにしてくるのか。いや…Amazon って低価格の割に OS のバージョナップは頻繁 (オンラインショッピングに使うので脆弱性の対策が早い) なんですが、何が変わったのか情報を出してこないので。

とはいえ、「単なるバグ」の可能性が一番、高いと思います。そう思う理由は、以下をご覧ください。

APK の「インストール」がグレイアウトしているのは単なるバグだと思う理由

Fire OS 5.6.0.0 にアップデートして以降、Google Play 関係の APK をインストールするのに、回避策が必要になりましたが、それは恐らくバグだろうと思う理由は以下です。

私が気に入っている「フォルダツリー型音楽プレイヤー」のLISNAですが、実験のためあえて他タブレットから APK を抜き出して Fire タブレットにインストールを試みた所、Google Play と同様に「インストール」がグレイアウト、の問題が再現しました。

回避策も一緒で、電源ボタンをちょこっと押し、ロック画面を解除、で「インストール」が有効になりました。

LISNA が正常に起動・動作しました。

   

よってもしこれがバグでないとすると、「不明ソースからのアプリ」の許可・不許可を変更する設定が無意味という事になりますので、やはりこれはバグで、Google Play インストール禁止対策のようなものではなかろう、と判断しました。

システムコンポーネントのバージョンが上がる件

工場出荷時にリセットした端末です。ホーム画面は以下。なお、アプリストアの自動更新はオフにしています。

   

工場出荷時にリセットしたすぐ後のKindle、Music、写真のバージョンです。

   

厳密には、工場出荷時ではないですね。2015年秋は OS 5.4.0.1 じゃなかったので。とにかく「アップデート」をタップします。

ロック画面に、システムがアップデートされた事、および、「Amazon Photos」のアプリ名が「Prime Photos」に変わったと表示されます。いや…以前も「Amazon Photos」ではなかった筈だが。「写真」だったろうに。

ホーム画面で「Kindle」と「写真」のアイコンが変更になっています。

   

OS が 5.6.0.1 にアップデートしたすぐ後のKindle、Music、写真のバージョンです。それぞれ、アップデートされています。

   

追試験

根性で再び工場出荷時にリセットして詳細に調べ直しました。

左の画像は、既に Fire OS が 5.6.0.0 にアップデートされている事を示しています。 中央の画像は、特に操作していないのに工場出荷時にリセットしてからしばらくすると「インストール可能なシステムコンポーネントのアップデートが10個あります。」と表示されている所です。 右の画像は、アプリストアの自動更新はオフにしていたのに、しばらく経つと「インストール可能なシステムコンポーネントのアップデート」という表示が消えた所です。確認したら幾つかのアプリ (10個なんでしょうが) のバージョンが問答無用で上がっていました。

   

当方で確認できた問答無用でバージョンが上がっていたアプリ

※ 残りの3つは分かりませんでした

これらの調査結果からは「システムアップデート」では、Fire OS だけでなく、”システムコンポーネント”すなわち Amazon が開発のプリインストールアプリもアップデートされる仕組みになっているようです。アプリストアで自動更新しない、としても無視するのは、アプリストア管理下のアプリとは別扱いしているのだと思います。

現時点 (2017-11末) では、「Google Play 版でバージョンを上げたら駄目なアプリ」は Kindle だけですが、Amazon Music やプライムビデオ、プライム・フォトも、将来はバージョン競合が発生するかもしれません。これらも Google Play 版をインストールするのは避け、Amazon の物を使用するのが良いと思われます。一方、「アプリストア」、「キャンペーン情報」、「Silk ブラウザ」は Google Play 版などは無いので無関係です。

アカウント登録せずに Google Play をインストール

かつては、Google Play とアプリストアの上書き合戦を避ける過激な方法として、アプリストアからは一切アプリが来なくなるので「変わった方法ではあるが希望するならあり」な手でしたが、前述のようにシステムアップデートでシステムコンポーネントとして Kindle 等のバージョンが上がるようになってからはメリットも無くなり、もしこのテクニックを使うとしたら「どうしても Amazon にアカウント登録できない、なぜだ・・・もう疲れたよ」というケース (知恵袋で質問なさった方で、そういう人が一人いらっしゃいました) ぐらいでしょうね。そこで超絶、役に立たないテクニックですが「できる」という事を示します。

購入直後、あるいは、工場出荷時にリセットした直後であれば、「Wi-Fi に接続」の画面で「後で」を押し、「完了」を押す。「Fire をセットアップせずに続行しますか?」と出るので「スキップ」すると、Wi-Fi の接続設定無しでホーム画面になる。「設定」で Wi-Fi を設定しネットにつなげる。

Silkブラウザで Google Play をインストールする。

左図は、Google Play がインストールされホーム画面にアイコンが表示されている所。右図は、端末が未登録であるという証拠画面。

 

プライム会員の方ですと、この方法だと Kindle、Music、ビデオを楽めなくなります。Music は起動はしますが聴き放題が使えず、Kindle とビデオは起動もしなくなります。

64bit化を見送った理由

Google Play の APK の 64bit 化に言及しているサイトをチラホラ見かけるようになりました。疑り深い性格なので (この目で動く所を見るまでは動くとは考えない) 飛びつきはしないのですが、技術力に定評のある Qiita というサイトにAmazon Fire 2015,2017 / Fire HD8 2016,2017 にGoogle PlayStoreをインストールする方法という詳しい内容があり、それを参考に手持ちの Fire HD 8 の 2016年版モデルに、Google_Play開発者サービスの64bit 版を入れました。

ところが、このような現象に見舞われました。

  1. Google Play開発者サービスをアンインストール
  2. 64bit 対応の Version 11.7.44 (240-173432861) を入れる
  3. Google Play開発者サービスを入れなおすと Google 関係の再認証が要求されるのでメアドやパスワードを入れてログイン
  4. Play ストアが動いてアプリのインストールやアップデートができる事を確認
  5. ところが、設定でGoogle Play開発者サービスのバージョンを調べると、32bit版になっている。
  6. なぜだぁ! と再度、苦心して手順 1. から繰り返す
  7. ところが、設定でGoogle Play開発者サービスのバージョンを調べると、32bit版になっている。

「64bit版」を入れてもすぐに32bit版に自動的に更新される現象が2回中2回発生という実験結果からは、「64bit版」とされているバージョンの APK を入れてもメリットはゼロ、というよりデメリットしかありません。

こうなる理由はわかりませんが、もし私が「こういう事かもしれない」と推測するとしたら

ではないかな、と。

どうなんでしょうね。64bit版と称する手順を書いていらっしゃる方は、紹介するだけではなくて「実験結果」も公開してくださるとありがたいです。

※ 検索した所、「APKがマルチアーキテクチャ構成をとっている」と呼ぶようです。

この件での調査結果

APK の構成

調査方法:圧縮された APK の内容をそのまま見れるファイルマネージャーで構造を見てみました。「ビンゴ」でした。

「230」のAPK

/lib の下のフォルダ構成から、ARM の 32bit 版のみがパッケージ化されていると思われる。

64bit版とされている「240」のAPK

/lib の下のフォルダ構成から、ARM の 64bit 版、および、32bit 版の両方がパッケージ化されていると思われる。

OS は 64 ビットで動いているか

Droid Hardware Info というツールをインストールし、Fire タブレット (左の図) と Fire HD 8 (2016年版、右の図) を調べてみました。

 

Fire タブレットのカーネルは32bit、Fire HD 8 のカーネルは64bit で動いている。

APKMirror の FAQ より

Is it OK to install arm64 apps on an arm device? What about arm apps on an arm64 device? Likewise, for x86 and x86_64?
Since 64-bit operating systems are backwards-compatible with 32-bit apps, but not vice versa, it’s safe to install 32-bit apps on both 32-bit and 64-bit OSes, but not the other way around.

32-bit APKs installed on 64-bit devices may not be as optimized, so if you have a 64-bit device, install a 64-bit APK when it becomes available, if it exists at all. Many developers simply don’t bother building 64-bit-optimized APKs.

64bit の Linux は 32bit のアプリを動かせる、多くのアプリ開発者は 64bit 版までビルドしない、との事。

これの調査結果から考察したこと

「240」のAPKを入れた所で、動くのは 32bit版の方の Google Play開発者サービスではないのか? いずれにせよ、インストールして Play ストアにアクセスするや否や 32bit の最新版にアップデートされる「儚い命」の”64bit対応のAPK”ではありがたがる意味が無い。

さらなる追加調査

64bit化なるAPKが全くの無益である証明

他の Google Play 導入解説サイトとの差異

このサイトで解説している手順の特徴としては、「Amazon アカウントに登録されていない Fire でも Google Play をインストールできる」ですかね。これ自体は今ではメリットになるケースは稀ですが。

ファイルマネージャーを使う手順では Google Play を入れる前にファイルマネージャーをインストールしないといけない、しかもファイルマネージャーは複数ある上に、良く解説で使用されているESファイルエクスプローラーは baidu.com に不審な通信をしているのを当方で実験して確認しているので入れさせた後でバージョンアップして個人情報やキー入力情報を抜くなど凶悪化したら責任が取れない、しかし代わりに知恵ノートを書き「File Commander」を皆さんに勧めたものの使い勝手が不評でしかも最近は広告がウザいとなると、必ずあるSilkブラウザだけで確実にインストールできるのに、わざわざファイルマネージャーを使う手順が優れているとは思えないのですが、他の解説サイトを執筆くださった方にはそれぞれの考えがあるのでしょう。ブラウザの左上の「三」のマークをタップして「ダウンロード」をタップするなんて難しすぎて出来ないとか。私などは、かつて日本政府が Baidu IME にインストール禁止令を出した位なのに、その Baidu と不審な通信をしている、無料にしては不自然に高機能なファイルマネージャーなど使いたくないですし、皆さんにも非奨励とする以外にありません。

他には、Google Play とアプリストアのバージョンの競合 (アプリの上書き合戦) を避ける運用方法も、他サイトは解説していないと思います。


Google Play 関連プロセスの実行権限

ps の結果例

最初から Google Play が動く物を比較対象とすべく、手持ちの Android 4.1.2 の古いソニー製スマホで ps した結果の一部を示しますが、


USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
root      1     0     464    336   ffffffff 00000000 S /init
root      2     0     0      0     ffffffff 00000000 S kthreadd
root      3     2     0      0     ffffffff 00000000 S ksoftirqd/0
root      5     2     0      0     ffffffff 00000000 S kworker/u:0
nobody    173   1     8436   540   ffffffff 00000000 S /system/bin/rmt_storage
root      215   1     10164  1000  ffffffff 00000000 S /system/bin/netd
drm       220   1     26900  3916  ffffffff 00000000 S /system/bin/drmserver
bluetooth 222   1     1504   280   ffffffff 00000000 S /system/bin/dbus-daemon
radio     946   219   493592 35540 ffffffff 00000000 S com.android.phone
nfc       1002  219   482440 31076 ffffffff 00000000 S com.android.nfc
u0_a99    1093  219   562712 49196 ffffffff 00000000 S com.google.process.gapps
sdcardd   1654  1     2360   1632  ffffffff 00000000 S /system/bin/sdcard
u0_a189   1885  219   483092 32188 ffffffff 00000000 S com.kddi.android.auoneidsetting
u0_a99    2012  219   559860 57340 ffffffff 00000000 S com.google.android.gms.persistent
u0_a99    2088  219   691272 60628 ffffffff 00000000 S com.google.android.gms
root      2410  2     0      0     ffffffff 00000000 S msm_sat0
u0_a225   2451  219   502808 42412 ffffffff 00000000 S jp.co.yahoo.android.emg
u0_a42    2792  219   482388 32860 ffffffff 00000000 S com.kddi.android.email
u0_a224   3262  219   530552 47376 ffffffff 00000000 S jp.naver.line.android
u0_a245   9064  9045  900    508   c001121c 400375a4 S /system/bin/sh

※ com.google.android.gms: Google mobile services。Google Play Services の社内呼称。

このように、Google Play Services は一般ユーザー権限で動いています。

他のアプリ、例えば jp.co.yahoo.android.emg (防災速報) や com.kddi.android.email (KDDI の Eメール)、jp.naver.line.android (無料通話 LINE) なども、一般ユーザー権限で動いています。

Android は アプリ毎に UID が振られる件は Android のマルチユーザ環境で ユーザID を取得するに詳しくかかれています。

某掲示板では APK をダウンロードしてインストールする方法を広めたために動かない人が続出して迷惑、この方法だと Google Play が root 権限で動かないので問題が起きると批判を受けました。何でも、USB ケーブルをつないでデバッグモードにする方がインストール用のバッチファイルもあるので簡単で確実だとの意見でしたが、高々 APK のファイルをブラウザでダウンロードして順番に実行するのが難しいといわれると返す言葉がありません。それから、Fire タブレットではない Android のタブレットでターミナルエミュレーターで ps を実行し、Google Play が一般ユーザー権限で動いている事を確認してます。どうやら USB ケーブルをつないでデバッグモードにすると root が取得できて、それで Google Play がインストールできるものと思い込んでいるようです。これは動画などで紹介されているツールの提供元が「rootjunkysdl.com」という、いかにも怪しい名前のサイトであるため誤解する人が多いのだと思われます。ここのバッチファイルを読めば、単にファイルを USB ケーブル経由でタブレットに転送して adb install でインストールしているだけに過ぎない (よってブラウザで APK をダウンロードしてインストールする方法と比べ何か「ご利益」があるわけではない) とわかるのですが。

パクリサイトその他

私とて他人様の情報や試行結果を活用させてもらっていますが、謝辞として明記しています。早くは2016年の春頃に、私の知恵ノートの文面の、しかも古い版を丸写ししたブログを見つけて驚きました。もっとも画像はありませんでした。「自分が見つけた事にして自慢したいのか、それともアフィ目的?」と首を傾げました。

パクリではないですが、Fire OS 5.6.0.0 でインストールできなくなって慌てて色々検索したところ、このサイトを参考にしたと書かれている礼儀正しい所もありましたが…某所は…しかも「改善してやった」と言わんばかりに2016年夏の化石バージョンを ZIP して得意げに解説してました orz。
なんで独自にやったのではなく私のやった事に依存していると分かるかというと…ネットでの揉め事に発展しかねないので解説は遠慮しますが、それはともかく、当方ではバージョンが古いと、Play ストアは動いてアプリをインストールする事は可能だが位置情報が取れない不具合が生じると判り、2017年7月に Google Play を入れ替えました。いや…私も、Google Play 関係の APK は、入れた後でそれ自身がアップデートされるから、Playストアさえ動けば古くても問題ない筈だと思っていましたが、実際には、位置が取れないという不具合が APK を入れ替える事で解決するという現象を確認しています。理由までは分かりませんが、自分の理解が間違っていただけと考え事実を受け入れるしかありません。とにかく、こちらで紹介しているのはさらに2017年11月に入れ替えたバージョンですが…「某解説で配布している APK じゃ Pokémon GO は動かないな」とだけ言っておきます。7月のバージョンでは位置が取れていたのですが、その後、11月のバージョンでエンバグしました。

一方、Qiita さんの所はこのサイトは一切参考にしておらず XDA 情報を参考にしてますね。

余談ですが「Fire タブレット Google Play」で検索すると上位に来る某批判ページの内容なんですが…見ててクラクラしそうです。UNIX は一般ユーザーでもプログラムの作成やインストールができる事を知らない (要するに Hello, World もできない) 上に、 Windows 同様 Android OS にも脆弱性がつきもの (ほんの一例: 97%の Android端末にルート化の恐れ、深刻な脆弱性「CVE-2015-1805」) という事も理解できない方がインストール手順の紹介を批判するブログを書くなんて凄いと感じました。私の知識としては、別に信じてくださる必要はありませんが、某社でCSIRTの立ち上げに参加しJPCERTとの窓口をしていた頃もありました。ITのエンジニアが務まるスキルは無かったのでセキュリティ関係の事務を命じられた物で、本当のセキュリティの専門家は私より遥かにスキルが高いです。でもその私が見ても、某ページの内容は、自説すなわち Google Play は入れるべきではないという考えを広める目的を達成する手段として恐怖感を煽るためなら何でも並べ立ててやる的な発想の憶測ばかりで的外れじゃない個所を探す方が難しいと感じます。電子署名があると発想すら湧かないなら「(少なくとも非対称)暗号を知らない」わけで、それでセキュリティを口にされても… 「あなたは入れない、で結構だと思いますが、他人にまで入れるなと指図しなくても良いのでは」と感じました。


[root不要でFireタブレットでGoogle Playを動かす方法に戻る]