2017/04/20

Android 透過 Package Name 擷取 APK 檔案


在 Android 安裝好 App 之後,

有些 App 容量大, 想直接擷取出來,

方便日後從 APK 檔案快速安裝,

以下介紹如何透過程式, 實現這個功能 :
 程式碼
PackageManager pm = getPackageManager();

try
{
    // 取得 App 相關資訊
    ApplicationInfo appInfo = pm.getApplicationInfo( packageName, PackageManager.GET_META_DATA );
    
    // 來源檔案 (sourceDir 其實就是紀錄 App 的 APK 檔案路徑)
    BufferedInputStream bis = new BufferedInputStream( new FileInputStream( appInfo.sourceDir ) );
    
    // 目的檔案
    BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( targetFilePathString + ".apk" ) );
    
    // 讀取來源檔案, 且寫入到目的檔案 (等同擷取 APK 囉)
    int num;
    byte[] buf = new byte[1024];
    while( (num=bis.read(buf, 0, 1024)) != -1 )
    {
        bos.write( buf, 0, num );
    }
    
    // 釋放記憶體與檔案
    bos.close();
    bis.close();
    
    Log.i( "test", " APK 擷取完成 !!" );
}
catch( Exception e )
{
    Log.i( "test", "APK 擷取失敗 !!" );
}

這個程式碼, 還可以改良, 如加上擷取進度, 以上, 參考看看囉.