Android静默安装和静默卸载


这里写代码片
package com.example.install_test;

import java.io.DataOutputStream;
import java.io.File;
import java.io.PrintWriter;
import java.nio.charset.Charset;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;

/**
* 描述: app安装操作
* @author SCL
* @version 创建时间: 2016年11月8日 下午16:31
*/
public class ApkController {
/**
* 描述: 安装
*/
public static boolean install(String apkPath,Context context){
// 先判断手机是否有root权限
if(hasRootPerssion()){
// 有root权限,利用静默安装实现
return clientInstall(apkPath);
}else{
// 没有root权限,利用意图进行安装
File file = new File(apkPath);
if(!file.exists())
return false;
Intent intent = new Intent();
intent.setAction(“android.intent.action.VIEW”);
intent.addCategory(“android.intent.category.DEFAULT”);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(file),”application/vnd.android.package-archive”);
context.startActivity(intent);
return true;
}
}

/**
 * 描述: 卸载
 */
public static boolean uninstall(String packageName,Context context){
    if(hasRootPerssion()){
        // 有root权限,利用静默卸载实现
        return clientUninstall(packageName);
    }else{
        Uri packageURI = Uri.parse("package:" + packageName);
        Intent uninstallIntent = new Intent(Intent.ACTION_DELETE,packageURI);
        uninstallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(uninstallIntent);
        return true;
    }
}

/**
 * 判断手机是否有root权限
 */
private static boolean hasRootPerssion(){
    PrintWriter PrintWriter = null;
    Process process = null;
    try {
        process = Runtime.getRuntime().exec("su");
        PrintWriter = new PrintWriter(process.getOutputStream());
        PrintWriter.flush();
        PrintWriter.close();
        int value = process.waitFor();  
        return returnResult(value);
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if(process!=null){
            process.destroy();
        }
    }
    return false;
}

/**
 * 静默安装
 */
private static boolean clientInstall(String apkPath){
    PrintWriter PrintWriter = null;
    Process process = null;
    try {
        process = Runtime.getRuntime().exec("su");
        PrintWriter = new PrintWriter(process.getOutputStream());
        PrintWriter.println("chmod 777 "+apkPath);
        PrintWriter.println("export LD_LIBRARY_PATH=/vendor/lib:/system/lib");
        PrintWriter.println("pm install -r "+apkPath);

// PrintWriter.println(“exit”);
PrintWriter.flush();
PrintWriter.close();
/* // 申请su权限
Process process = Runtime.getRuntime().exec(“su”);
dataOutputStream = new DataOutputStream(process.getOutputStream());
// 执行pm install命令
String command = “pm install -r ” + apkPath + “\n”;
dataOutputStream.write(command.getBytes(Charset.forName(“utf-8”)));
dataOutputStream.flush();
dataOutputStream.writeBytes(“exit\n”);
dataOutputStream.flush(); */
process.waitFor();
int value = process.waitFor();
return returnResult(value);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(process!=null){
process.destroy();
}
}
return false;
}

/**
 * 静默卸载
 */
private static boolean clientUninstall(String packageName){
    PrintWriter PrintWriter = null;
    Process process = null;
    try {
        process = Runtime.getRuntime().exec("su");
        PrintWriter = new PrintWriter(process.getOutputStream());
        PrintWriter.println("LD_LIBRARY_PATH=/vendor/lib:/system/lib ");
        PrintWriter.println("pm uninstall "+packageName);
        PrintWriter.flush();
        PrintWriter.close();
        int value = process.waitFor();  
        return returnResult(value); 
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if(process!=null){
            process.destroy();
        }
    }
    return false;
}

/**
 * 启动app
 * com.exmaple.client/.MainActivity
 * com.exmaple.client/com.exmaple.client.MainActivity
 */
public static boolean startApp(String packageName,String activityName){
    boolean isSuccess = false;
    String cmd = "am start -n " + packageName + "/" + activityName + " \n";
    Process process = null;
    try {
       process = Runtime.getRuntime().exec(cmd);
       int value = process.waitFor();
       return returnResult(value);
    } catch (Exception e) {
      e.printStackTrace();
    } finally{
        if(process!=null){
            process.destroy();
        }
    }
    return isSuccess;
}


private static boolean returnResult(int value){
    // 代表成功  
    if (value == 0) {
        return true;
    } else if (value == 1) { // 失败
        return false;
    } else { // 未知情况
        return false;
    }  
}

}

package com.example.install_test;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Toast;
/**
* 描述: MainActivity
* @author SCL
*/
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

/**
 * 描述: 安装
 * @param           
 */
public void click1(View view){
    new Thread(){
        public void run() {
            String path = Environment.getExternalStorageDirectory()+"/Name.apk";
            if (ApkController.install(path, getApplicationContext())){
                toast("安裝成功");
            }else{
                toast("安裝失败");
            }
        };
    }.start();
}

/**
 * 描述: 卸载
 * @param           
 */
public void click2(View view){
    new Thread(){
        public void run() {
            if (ApkController.uninstall("com.example.name", getApplicationContext())){
                toast("卸载成功");
            }else{
                toast("卸载失败");
            }
        };
    }.start();
}

/**
 * 描述: 启动
 * @param           
 */
public void click3(View view){
    if (ApkController.startApp("com.example.name","com.example.name.MainActivity")) {
        toast("启动成功");
    }
}


public void toast(final String text){
    runOnUiThread(new Runnable() {重点内容
        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();;
        }
    });
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值