加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Android静默安装和静默卸载代码

发布时间:2020-12-14 23:51:41 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 package com.example.test; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import android.content.Context; impor

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

    package com.example.test;  
      
    import java.io.File;  
    import java.io.IOException;  
    import java.io.PrintWriter;  
      
    import android.content.Context;  
    import android.content.Intent;  
    import android.net.Uri;  
      
    /** 
     * 描述: app安装操作               
     * @author 吴传龙                   
     * Email:[email?protected]   
     * QQ: 3026862225                
     * @version 创建时间: 2015年3月6日 下午3:51:14                 
     * @version 最后修改时间:2015年3月6日 下午3:51:14     修改人:吴传龙       
     */  
    public class ApkController {  
        /** 
         * 描述: 安装 
         * 修改人: 吴传龙                                               
         * 最后修改时间:2015年3月8日 下午9:07:50 
         */  
        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;  
            }    
        }  
    }  

    package com.example.test;  
      
    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;  
    /** 
     * 描述: MainActivity              
     * @author 吴传龙                   
     * Email:[email?protected]   
     * QQ: 3026862225                
     * @version 创建时间: 2015年3月9日 上午8:19:19                 
     * @version 最后修改时间:2015年3月9日 上午8:19:19     修改人:吴传龙 
     */  
    public class MainActivity extends Activity {  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
        }  
      
        /** 
         * 描述: 安装 
         * @param            
         * 修改人: 吴传龙                                               
         * 最后修改时间:2015年3月9日 上午8:19:30 
         */  
        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();  
        }  
          
        /** 
         * 描述: 卸载 
         * @param            
         * 修改人: 吴传龙                                               
         * 最后修改时间:2015年3月9日 上午8:19:30 
         */  
        public void click2(View view){  
            new Thread(){  
                public void run() {  
                    if (ApkController.uninstall("com.example.jnitest",getApplicationContext())){  
                        toast("卸載成功");  
                    }else{  
                        toast("卸載失败");  
                    }  
                };  
            }.start();  
        }  
          
        /** 
         * 描述: 启动 
         * @param            
         * 修改人: 吴传龙                                               
         * 最后修改时间:2015年3月9日 上午8:19:30 
         */  
        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();;  
                }  
            });  
        }  
      
    }  

要用其他的方式实现静默方式,可以通过伪装成系统应用,这就要给app打上系统应用的签名,但是这些签名在小米等手机上是没用的,所以这里不做介绍。还有就是通过把应用放在system/app的目录下也可以实现。

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读