【Android】静かにAPKをインストールする2つの方法を実現します.


原文のリンク:http://www.devdiv.com/Android-_Android(%)E 5%AE%9 E 7%8 E%B 0%E 9 D%99%E 9%BB%98%E 5%AE%89%E 8%A 3%85 APK%E 7%9 A%E 4%B 8%A 7%E 7%E 6%E 6%B 9%B 6%B 3%95-thread-511%
        Androidの上の静かなインストールはとても人を引き付ける機能のようで、多くの人はすべてこの問題を聞きます.今日は静かなインストールを実現するための二つの方法を共有しますが、この文章を読んでからも失望させます.        Androidは、すべてのPermissionを潜在的なリスク(属性名はprotection Level)によって4つの等級に分類します.すなわち、「normal」、「dangerous」、「signature」、「signature OrSystem」です.INSTALL_PACKAGESは後の2つに属します.公式文書の後ろの二つの説明を見ましょう.「signature」:A permission that the system grants only if the requesting aplication is signed with the same certificate as the appration that declead the permission. If the certificates match,the system aut matrically grants the permission without notifying the user or asking for the user's explicit approval.「signature OrSystem」:A permission the system only to appications that are in the Android systemイメージ   or   that are signed with the same certificat as those in the system image.Please avoid using this option、as thesignature   protectction level shoruld be sufficient for most needs and works regardless of exactlywhehereaplications ararinstalld.The“signature OrSystem”permission is used for certain special spectusisisisition s wheheheheherererettttmmmmmmmmmmheheheheheherererereretititititititittttttttttttttmmmmmmmmmmmmmmmmmheheheheheheheheherererererererereretititititititititibuilt together.  そこで、ここで紹介した二つの方法はそれぞれに必要な厳しい条件は以下の通りです.      1.ROMに内蔵する.APKパッケージの設置位置は/system/apの下です.      2.APKを使用したターゲットインストールシステムと同じ署名です.      さて、これらの厳しい条件にかかわらず、次はどうやってAPKを直接インストールするコードを作成しますか?コマンドは、煩雑な未公開のPackage Manager.installメソッドではなく、使用します.
//This code come form Sodino.Email:[email protected]
String[] args = { "pm", "install", "-r", apkAbsolutePath };  
String result = "";  
ProcessBuilder processBuilder = new ProcessBuilder(args);  
Process process = null;  
InputStream errIs = null;  
InputStream inIs = null;  
try {  
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    int read = -1;  
    process = processBuilder.start();  
    errIs = process.getErrorStream();  
    while ((read = errIs.read()) != -1) {  
        baos.write(read);  
    }  
    baos.write('
'); inIs = process.getInputStream(); while ((read = inIs.read()) != -1) { baos.write(read); } byte[] data = baos.toByteArray(); result = new String(data); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (errIs != null) { errIs.close(); } if (inIs != null) { inIs.close(); } } catch (IOException e) { e.printStackTrace(); } if (process != null) { process.destroy(); } } return result;
コード実行後、インストールが成功すれば取得したレスポンス値は「        pkg:/data/local/tmp/Calculator.appk  Successは、失敗したら最後の「Success」はない.
      インストールコードがありました.最初の方法を紹介します.自分のAPKをROMに内蔵します.前提としては、この携帯はもうブラシをかけました.そしてrecovery-windows.bat/recover-linux.shファイルを残しました.
      HTC-Legendに対する具体的な操作手順は:
      1.USBでデバイスを接続してコマンドラインに「adb reboot recovery」を入力してください.マシンが再起動したら、赤い三角形と矢印アイコンが表示されます.   
      2.(PCの下で)あなたのブラシフォルダに入って実行します.
      3.得られた結果が「error:device not found」であれば、「./adb-linux kill-server」を実行してからもう一度実行します./recovery-linux.sh'はグリーンメニューを表示するまで.
      4.「adb shell mount/dev/block/mtdblock 3/system」を実行し、これでsystemを書き込み操作することができます.
      5.PC上でコマンドを実行する:adb push<your_appk_path>/system/.これで内蔵に成功しました.
      第二の方法は、まず未署名のAPKパケットを打ってから、システム署名で署名する必要があります.この方面のものは前のブログで説明しましたが、ここでは重複しません.[Android]plotform鍵を使ってappkファイルに署名するコマンド
      HTC-Legendは「オリジナル」なので、サイレントでのインストールはスムーズです.しかし、いくつかのMOTOやフォトPhoneの携帯電話については、一般的にはサポートされていません.