Android Apk靜默安裝卸載的方法(後臺安裝)

一、大概說下思路

(1)利用系統應用的權限執行pm install命令的安裝方法,如果你是大衆應用(說的就是通用軟件任何Android手機上都用的比如:微信)的話這個方法不現實也是滿足不了你的需求的,這個主要在行業終端上使用的。

(2)具體代碼如下:

public static boolean installApp(String apkPath) {
        Process process = null;
        BufferedReader successResult = null;
        BufferedReader errorResult = null;
        StringBuilder successMsg = new StringBuilder();
        StringBuilder errorMsg = new StringBuilder();
        try {
            process = new ProcessBuilder("pm", "install","-i","com.example.ddd", "-r", apkPath).start();
            successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
            errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String s;
            while ((s = successResult.readLine()) != null) {
                successMsg.append(s);
            }
            while ((s = errorResult.readLine()) != null) {
                errorMsg.append(s);
            }
        } catch (Exception e) {
 
        } finally {
            try {
                if (successResult != null) {
                    successResult.close();
                }
                if (errorResult != null) {
                    errorResult.close();
                }
            } catch (Exception e) {
 
            }
            if (process != null) {
                process.destroy();
            }
        }
        Log.e("result",""+errorMsg.toString());
        Toast.makeText(ctx,+errorMsg.toString()+"  "+successMsg , Toast.LENGTH_LONG).show();
        //如果含有“success”單詞則認爲安裝成功
        return successMsg.toString().equalsIgnoreCase("success");
    }

上面的代碼是通用的也是網上遍地都能找得到的代碼,我就不具體解釋了,我主要說下命令

process = new ProcessBuilder("pm", "install","-i","com.example.ddd", "-r", apkPath).start();

android 7.0之前的版本上執行

new ProcessBuilder("pm", "install", "-r", apkPath) 不需要帶包名就可以執行成功

Android 7.0之後的系統上執行上述命令會執行失敗的,具體的異常我就不貼出來要執行如下的命令:

new ProcessBuilder("pm", "install","-i","com.example.ddd", "-r", apkPath) 這裏的包名是你應用程序的包名,而不是安裝應用的包名,比如你的這個指令在com.example.ddd這個應用上執行那麼你就要寫這個應用的包名

然後添加權限:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />

再添加共享進程的配置;

android:sharedUserId="android.uid.system"

接下來就要用系統簽名打包安裝上去就可以測試了。

系統簽名的方法:

@echo off
java -cp signApk.jar SignApk platform.x509.pem platform.pk8 DDD.apk   test.apk
adb install -r test.apk
pause

以上腳本保存到txt裏後綴名修改成.bat 然後修改DDD.apk的路徑執行即可,DDD是需要簽名的apk  test是系統簽名後的apk

具體的簽名文件文件:

 

說完了靜默安裝的方法,接下來也說下靜默卸載的方法:

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent sender = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
PackageInstaller mPackageInstaller = MainActivity.this.getPackageManager().getPackageInstaller();
mPackageInstaller.uninstall("要卸載的應用包名", sender.getIntentSender());// 卸載APK
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章