静默安装


              |—原生态和ROOT实现过程
        
     查看源码:app/PackageInstallerActivity里的五个类的安装过程。
   

    //主要安装方法
       Public static void install (Context context,String filePath){
                 Intent it = new Intent(Intent . ACTION_VIEW);
                 it.setDataAndType(Uri.parse("file://"+filePath)),
                 "application/vnd..android.package-archive");
                  it.addFlags(Intent.FLAG_ACTINITY_NEW_TASK);
                  context.startActivity(it);
                 
         }





静默安装如下:

       1. 首先获得apk在SD卡中的路径String fileName = Environment.getExternalStorageDirectory() +  "/UC.apk";  

       2. 获取包的管理者,代码如下:
             PackageManager pm = getPackageManager();
            try {
                PackageInfo pi = pm.getPackageInfo("com.uc.browser", 
                        PackageManager.GET_UNINSTALLED_PACKAGES);
                if(pi != null) {
                    installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
                }
            } catch (NameNotFoundException e) {
            }

       3.   installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;这句的意思是强制安装,不管你的设备上面是否有曾经安装过apk,都强制在安装一次。

       4 通过安装包的观察者PackageInstallObserver

       5. 编写MK文件:mkd 的具体写法如下
          LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := user
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := InstallActivity
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)

      6.然后在linux中的android源码下编译, 生成apk后,push手机系统里面。






      原生系统实现静默安装4.0以上系统可以实现





1. //部分关键代码
//获取内置的sd卡里的uc.apk
    String fileName = Environment.getExternalStorageDirectory()
              + "UCapk" ;
2. //命令权限
String[] args = { "pm" , "install" , "-r" , apkAbsolutePath }

3. //xml权限
  <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name= "android.permission.INSTALL_PACKAGES" />
     <uses-permission android:name= "android.permission.DELETE_PACKAGES" />
     <uses-permission android:name= "android.permission.CLEAR_APP_CACHE" />
     <uses-permission android:name= "android.permission.CLEAR_APP_USER_DATA" />
     <uses-permission android:name= "android.permission.READ_PHONE_STATE" />
       4.mk文件编译
                mk文件编译主要是安装的apk的文件,最主要的有一个唯一的命名,这个唯一名是生成应用的名字。
               
                    LOCAL_PATH: =  $(call my-dir)
                    include  $(CLEAR_VARS)

                   LOCAL_MODULE_TAGS : = optional

                   LOCAL_SRC_FILES : =  $(call all-java-files-under)

                   LOCAL_PACKAGE_NAME : = install
                   LOCAL_CERTIFICATE : = platform

                    include  $(BUILD_PACKAGE)


      5 .然后在linux中的android源码下编译, 生成apk后,push手机系统里面。

 
   带有apk自己可以试一下     下载一个uc.apk 放在手机内置sd卡里机油可以实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值