Android静默安装和静默卸载

转载自:http://blog.csdn.net/andywuchuanlong/article/details/44150317

import java.io.File;  
import java.io.IOException;  
import java.io.PrintWriter;  
  
import android.content.Context;  
import android.content.Intent;  
import android.net.Uri;  
  

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;  
        }  
    }  
      
    /** 
     * 描述: 卸载 
     * 修改人: 吴传龙                                               
     * 最后修改时间:2015年3月8日 下午9:07:50 
     */  
    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();  
            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;  
        }    
    }  
}  

import java.io.File;  
  
import android.support.v4.app.Fragment;  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Environment;  
import android.view.LayoutInflater;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.Toast;  
import android.os.Build;  

public class MainActivity extends Activity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
    }  
  
    
    public void click1(View view){  
        new Thread(){  
            public void run() {  
                String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/jniTest.apk";  
                if (ApkController.install(path, getApplicationContext())){  
                    toast("安裝成功");  
                }else{  
                    toast("安裝失败");  
                }  
            };  
        }.start();  
    }  
      
    /** 
     * 描述: 卸载 
     */  
    public void click2(View view){  
        new Thread(){  
            public void run() {  
                if (ApkController.uninstall("com.example.jnitest", getApplicationContext())){  
                    toast("卸載成功");  
                }else{  
                    toast("卸載失败");  
                }  
            };  
        }.start();  
    }  
      
   
    public void click3(View view){  
        if (ApkController.startApp("com.example.jnitest","com.example.jnitest.MainActivity")) {  
            toast("啟動成功");  
        }  
    }  
      
      
    public void toast(final String text){  
        runOnUiThread(new Runnable() {  
            @Override  
            public void run() {  
                Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();;  
            }  
        });  
    }  
  
}  


猜你喜欢

转载自blog.csdn.net/xuweilinjijis/article/details/75104958