DBMNG数据库管理与应用

独立思考能力,对于从事科学研究或其他任何工作,都是十分必要的。
当前位置:首页 > 移动应用 > Android

AndroidAPK静默安装

  1. 4.0以上和4.0以下静默安装的方式不一样:
  2. 首先说4.0的静默安装:
  3. 静默安装无非也是安装,首先得看安装的源码,安装的源码在app层PackageInstaller,这个项目就是安装的源码,你首先可以看安装的源码,不懂的可以接着提问。我先说静默安装的步骤;
  4. 1:静默安装apk,你得先随便放一个apk到SD卡当中。我以UC浏览器apk举例子。
  5. 2:首先获得apk在SD卡中的路径String fileName = Environment.getExternalStorageDirectory() +  "/UC.apk"; 
  6. 3:获取包的管理者,代码如下:
  7. PackageManager pm = getPackageManager();
  8.             try {
  9.                 PackageInfo pi = pm.getPackageInfo("com.uc.browser", 
  10.                         PackageManager.GET_UNINSTALLED_PACKAGES);
  11.                 if(pi != null) {
  12.                     installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
  13.                 }
  14.             } catch (NameNotFoundException e) {
  15.             }
  16.   installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;这句的意思是强制安装,不管你的设备上面是否有曾经安装过apk,都强制在安装一次。
  17. 4:通过安装包的观察者PackageInstallObserver,具体代码如下
  18.     PackageInstallObserver observer = new PackageInstallObserver();
  19. class PackageInstallObserver extends IPackageInstallObserver.Stub {
  20.         public void packageInstalled(String packageName, int returnCode) {
  21.             Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
  22.             msg.arg1 = returnCode;
  23.             mHandler.sendMessage(msg);
  24.         }
  25.     };
  26.     
  27.     private Handler mHandler = new Handler() {
  28.         public void handleMessage(Message msg) {
  29.             switch (msg.what) {
  30.                 case INSTALL_COMPLETE:
  31.                    
  32.                     int centerTextLabel;
  33.                     Drawable centerTextDrawable = null;
  34.                     if(msg.arg1 == SUCCEEDED) {
  35.                             
  36.                     } else {}
  37.                     if (centerTextDrawable != null) {}

  38.                     break;
  39.                 default:
  40.                     break;
  41.             }
  42.         }
  43.     };
  44. 5:通过pm.installPackage(uri, observer, installFlags, "com.uc.browser");
  45. 6:去掉gen下面的r
  46. 7:编写MK文件:mkd 的具体写法如下
  47.     LOCAL_PATH:= $(call my-dir)
  48. include $(CLEAR_VARS)

  49. LOCAL_MODULE_TAGS := user

  50. LOCAL_SRC_FILES := $(call all-subdir-java-files)

  51. LOCAL_PACKAGE_NAME := InstallActivity
  52. LOCAL_CERTIFICATE := platform

  53. include $(BUILD_PACKAGE)
  54. 8:然后丢到linux下面mm一下就行。
  55. linux的开发环境的搭建,就是linux的知识了,这里就不讲了,以上是4.0以下的静默安装,未完待续4.0以上的静默安装

  56. 接下来4.0以上的静默安装,一般我们在adb install xxx.apk的时候,最终调用的还是pm install xxx.apk。
  57. 所以我们可以用pm install -r 进行安装apk。代码如下
  58. //方法体可以在任何地方可套用,不用修改任何东东哦!

  59.      public String install(String apkAbsolutePath ){ 

  60.          String[] args = { "pm", "install", "-r", apkAbsolutePath };

  61.           String result = "";

  62.          ProcessBuilder processBuilder = new ProcessBuilder(args);

  63.           Process process = null;

  64.           InputStream errIs = null;

  65.           InputStream inIs = null;
  66.          try {

  67.              ByteArrayOutputStream baos = new ByteArrayOutputStream();

  68.               int read = -1;

  69.               process = processBuilder.start();

  70.               errIs = process.getErrorStream();

  71.               while ((read = errIs.read()) != -1) {

  72.                  baos.write(read);

  73.               }

  74.               baos.write("/n".getBytes());

  75.            inIs = process.getInputStream();

  76.               while ((read = inIs.read()) != -1) {

  77.                   baos.write(read);

  78.              }

  79.               byte[] data = baos.toByteArray();

  80.               result = new String(data);

  81.           } catch (IOException e) {

  82.               e.printStackTrace();

  83.          } catch (Exception e) {

  84.               e.printStackTrace();

  85.           } finally {

  86.               try {

  87.                   if (errIs != null) {

  88.                     errIs.close();

  89.                  }

  90.                  if (inIs != null) {

  91.                       inIs.close();

  92.                   }

  93.              } catch (IOException e) {

  94.                  e.printStackTrace();

  95.               }

  96.               if (process != null) {
  97.                  process.destroy();

  98.              }

  99.           }

  100.           return result;

  101.       }
  102. 复制代码
  103. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  104.       <uses-permission android:name="android.permission.INSTALL_PACKAGES" />

  105.       <uses-permission android:name="android.permission.DELETE_PACKAGES" />

  106.       <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />

  107.       <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />

  108.       <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  109. 同样编写MK文件,然后在linux底下编译
本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号