Android 獲取Root權限之後的靜默安裝實現 代碼示例分析&&源碼下載

Adroid開發中,我們有時會遇到一些特殊功能的實現,有些功能並沒有太高技術難度,但是如果之前沒有接觸過就需要花好多時間去研究解決。

今天,總結介紹一下 獲取Root權限之後的靜默安裝和進門卸載功能的實現。

眾所周知,Android的手機在獲取Root權限之後幾乎可以進行你想要的任何操作,而靜默安裝便是其中比較常見的一個需求:

豌豆莢、360手機助手等應用下載軟件一般都有一個應用一鍵自動更新功能,一鍵批量卸載軟件,他們是如何實現的呢?

一般這類軟件,實現自動更新功能都需要請求root權限,在被授予瞭root權限後便可批量安裝卸載軟件,其實,這個並沒有太高難度,其過程就是一個獲取瞭Root權限之後的靜默安裝和卸載:

下面直接上代碼:

註:

靜默安裝和卸載的shell 命令格式分別為:

private String cmd_install = “pm install -r +安裝apk包路徑”;//靜默安裝命令
private String cmd_uninstall = “pm uninstall +程序包名”;//靜默卸載命令

程序代碼:

import java.io.DataOutputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
/**
 * 靜默安裝 卸載 Demo
 * 
 * @author blj
 * 
 */
public class MainActivity extends Activity {

	private EditText et_packagename;
	private String cmd_install = "pm install -r ";
	private String cmd_uninstall = "pm uninstall ";
	String apkLocation = Environment.getExternalStorageDirectory().toString()
			+ "/";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et_packagename = (EditText) findViewById(R.id.et_packagename);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	public void onClick_install(View view) {
		String cmd = cmd_install + apkLocation
				+ et_packagename.getText().toString().trim();
		System.out.println("靜默安裝命令:" + cmd);
		excuteSuCMD(cmd);
	}

	public void onClick_uninstall(View view) {
		String cmd = cmd_uninstall + et_packagename.getText().toString().trim();
		// String cmd = cmd_uninstall + "com.kingsoft.website";
		System.out.println("靜默卸載命令:" + cmd);
		excuteSuCMD(cmd);
	}
        //執行shell命令
	protected int excuteSuCMD(String cmd) {
		try {
			Process process = Runtime.getRuntime().exec("su");
			DataOutputStream dos = new DataOutputStream(
					(OutputStream) process.getOutputStream());
			// 部分手機Root之後Library path 丟失,導入library path可解決該問題
			dos.writeBytes((String) "export LD_LIBRARY_PATH=/vendor/lib:/system/lib\n");
			cmd = String.valueOf(cmd);
			dos.writeBytes((String) (cmd + "\n"));
			dos.flush();
			dos.writeBytes("exit\n");
			dos.flush();
			process.waitFor();
			int result = process.exitValue();
			return (Integer) result;
		} catch (Exception localException) {
			localException.printStackTrace();
			return -1;
		}
	}

}

軟件運行截圖:(以金山網址大全為例)

靜默安裝截圖:

其中king.apk為安裝apk文件名,安裝其他apk時在框中輸入相應文件名即可。

點擊靜默安裝即可靜默安裝應用。

靜默卸載截圖:

其中com.kingsoft.website為金山網址大全程序的包名,

點擊靜默卸載,即可靜默卸載應用。

本文介紹瞭靜默安裝的代碼實現,回到豌豆莢和360一鍵安裝、卸載軟件,他們的實現方式 也就是監測apk安裝包下載完成後執行上面介紹的靜默安裝命令,一鍵卸載應該就是將要卸載的程序的包名放到for循環依次執行中自動卸載。

附:靜默安裝靜默卸載 完整代碼示例下載鏈接:

靜默安裝靜默卸載詳解SilentInstallDemo.rar

金山網址大全apk下載鏈接

發佈留言