Android

Androidエミュレータでシステム署名が必要な処理の動作を確認する

More than 3 years have passed since last update.

システム署名(端末メーカー提供/市販品は通常、入手不可)が必要な機能を実装していて、「修正⇒システム署名依頼⇒実機でテスト」が時間がかかり面倒・・・

そんな時、エミュレータでテストできればいいのになと思っていろいろ試した結果、以下の手順でいくつかは動かせることが分かりました。

全ての要システム署名の権限、要rootのコマンドを試したわけではないので、あしからず。

●確認した動作(権限)


  • PackageManager#installPackage,deletePackage(INSTALL_PACKAGES,DELETE_PACKAGES)


  • 位置情報のネットワークを利用,GPSを利用のON/OFF(WRITE_SECURE_SETTINGS)


もしかしたらもう有名な方法かもしれませんが^^;

自分用のメモとしても置いておきます。

アプリ権限のうち、条件が「signature」になっているものは、


  • システム署名がされているか



  • プリインアプリであるか(/system/app/下にインストールされているか)


    追記:KitKat以降では、/System/priv-app/下




のどちらかでしか動作しません。

なので、エミュレーターの/system/app/下にインストールさせられれば動くのでは?と考えて試してみたところ・・・、無事動作しました。

●手順

(1)エミュレータを起動する

(2)コマンドプロンプトから、以下を実行する

adb -s emulator-5554 remount

※emulator-5554の「5554」の部分は、起動しているエミュレータのタイトルバーに表示されているものと合わせてください。

(3)/system/app/下に署名付きapkをインストールする(デバッグ署名でも可)

adb -s emulator-5554 push mysample.apk /system/app/

ただし、この方法はエミュレータを閉じると、アプリが消えてしまうので、(2)から毎回やり直す必要があります。

それでも、これで、何度もハードメーカーさんのお手を煩わせることがなくなり、大幅に効率がUPしました。

なお、一度上記で/system/app/下に置いておけば、エミュレータを落とさない限り、その後の上書きインストールは通常のadb installで出来ます。

また、プリインストールアプリ扱いとなり端末からはアンインストールできませんが、消したかったらエミュレータを再起動すればよいだけです。