<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                adb install有多個參數,這里僅考慮最簡單的,如adb installframeworktest.apk。adb是一個命令,install是它的參數。此處直接跳到處理install參數的代碼: **commandline.c** ~~~ int adb_commandline(int argc, char **argv){ ...... if(!strcmp(argv[0], "install")) { ......//調用install_app函數處理 return install_app(ttype, serial, argc, argv); } ...... } ~~~ install_app函數也在commandline.c中定義,代碼如下: **commandline.c** ~~~ int install_app(transport_type transport, char*serial, int argc, char** argv) { //要安裝的APK現在還在Host機器上,要先把APK復制到手機中。 //這里需要設置復制目標的目錄,如果安裝在內部存儲中,則目標目錄為/data/local/tmp; //如果安裝在SD卡上,則目標目錄為/sdcard/tmp。 staticconst char *const DATA_DEST = "/data/local/tmp/%s"; staticconst char *const SD_DEST = "/sdcard/tmp/%s"; constchar* where = DATA_DEST; charapk_dest[PATH_MAX]; charverification_dest[PATH_MAX]; char*apk_file; char*verification_file = NULL; intfile_arg = -1; int err; int i; for (i =1; i < argc; i++) { if(*argv[i] != '-') { file_arg = i; break; }else if (!strcmp(argv[i], "-i")) { i++; }else if (!strcmp(argv[i], "-s")) { where = SD_DEST; //-s參數指明該APK安裝到SD卡上 } } ...... apk_file= argv[file_arg]; ...... //獲取目標文件的全路徑,如果安裝在內部存儲中,則目標全路徑為/data/local/tmp/安裝包名, //調用do_sync_push將此APK傳送到手機的目標路徑 err =do_sync_push(apk_file, apk_dest, 1 /* verify APK */); ...... //①4.0新增了一個安裝包Verification功能,相關知識稍后分析 //②執行pm命令,這個函數很有意思 pm_command(transport,serial, argc, argv); ...... cleanup_apk: //③在手機中執行shell rm 命令,刪除剛才傳送過去的目標APK文件。為什么要刪除呢 delete_file(transport, serial, apk_dest); returnerr; } ~~~ 以上代碼中共有三個關鍵點,分別是: - 4.0新增了APK安裝過程中的Verification的功能。其實就是在安裝時,把相關信息發送給指定的Verification程序(另外一個APK),由它對要安裝的APK進行檢查(Verify)。這部分內容在后面分析APK 安裝時會介紹。目前,標準代碼中還沒有從事Verification工作的APK。 - 調用pm_command進行安裝,這是一個比較有意思的函數,稍后對其進行分析。 - 安裝完后,執行shell rm刪除剛才傳送給手機的APK文件。為什么會刪除呢?因為PKMS在安裝過程中會將該APK復制一份到/data/app目錄下,所以/data/local/tmp下的對應文件就可以刪除了。這部分代碼在后面也能見到。 先來分析pm_command命令。為什么說它很有意思呢?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看