システム署名(端末メーカー提供/市販品は通常、入手不可)が必要な機能を実装していて、「修正⇒システム署名依頼⇒実機でテスト」が時間がかかり面倒・・・
そんな時、エミュレータでテストできればいいのになと思っていろいろ試した結果、以下の手順でいくつかは動かせることが分かりました。
全ての要システム署名の権限、要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
で出来ます。
また、プリインストールアプリ扱いとなり端末からはアンインストールできませんが、消したかったらエミュレータを再起動すればよいだけです。