当前位置: 首页 > news >正文

安卓4跑Linux,Android 4.0.4系统下实现apk的静默安装和启动

最近在Android 4.0.4系统下实现apk的静默安装和启动的功能,这里和大家分享一下,希望能有所帮助。

源码如下:

import java.io.DataOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import android.content.Context;

import android.content.Intent;

import android.content.pm.ActivityInfo;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

import android.content.pm.ResolveInfo;

public class InstallApkUtils {

public static void installAndStartApk(final Context context, final String apkPath) {

if ((apkPath==null) || (context==null)) {

return;

}

File file = new File(apkPath);

if (file.exists() == false) {

return;

}

new Thread() {

public void run() {

String packageName = getUninstallApkPackageName(context, apkPath);

if (silentInstall(apkPath)) {

List matches = findActivitiesForPackage(context, packageName);

if ((matches!=null) && (matches.size()>0)) {

ResolveInfo resolveInfo = matches.get(0);

ActivityInfo activityInfo = resolveInfo.activityInfo;

startApk(activityInfo.packageName, activityInfo.name);

}

}

};

}.start();

}

public static String getUninstallApkPackageName(Context context, String apkPath) {

String packageName = null;

if (apkPath == null) {

return packageName;

}

PackageManager pm = context.getPackageManager();

PackageInfo info = pm.getPackageArchiveInfo(apkPath,

PackageManager.GET_ACTIVITIES);

if (info == null) {

return packageName;

}

packageName = info.packageName;

return packageName;

}

public static List findActivitiesForPackage(Context context, String packageName) {

final PackageManager pm = context.getPackageManager();

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);

mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

mainIntent.setPackage(packageName);

final List apps = pm.queryIntentActivities(mainIntent, 0);

return apps != null ? apps : new ArrayList();

}

public static boolean silentInstall(String apkPath) {

String cmd1 = "chmod 777 " + apkPath + " \n";

String cmd2 = "LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r " + apkPath + " \n";

return execWithSID(cmd1, cmd2);

}

private static boolean execWithSID(String... args) {

boolean isSuccess = false;

Process process = null;

OutputStream out = null;

try {

process = Runtime.getRuntime().exec("su");

out = process.getOutputStream();

DataOutputStream dataOutputStream = new DataOutputStream(out);

for (String tmp : args) {

dataOutputStream.writeBytes(tmp);

}

dataOutputStream.flush(); // 提交命令

dataOutputStream.close(); // 关闭流操作

out.close();

isSuccess = waitForProcess(process);

} catch (IOException e) {

e.printStackTrace();

}

return isSuccess;

}

public static boolean startApk(String packageName, String activityName) {

boolean isSuccess = false;

String cmd = "am start -n " + packageName + "/" + activityName + " \n";

try {

Process process = Runtime.getRuntime().exec(cmd);

isSuccess = waitForProcess(process);

} catch (IOException e) {

NLog.i(TAG, e.getMessage());

e.printStackTrace();

}

return isSuccess;

}

private static boolean waitForProcess(Process p) {

boolean isSuccess = false;

int returnCode;

try {

returnCode = p.waitFor();

switch (returnCode) {

case 0:

isSuccess = true;

break;

case 1:

break;

default:

break;

}

} catch (InterruptedException e) {

e.printStackTrace();

}

return isSuccess;

}

}

如果要使用,还需以下步骤:

1、在AndroidManifest.xml文件里添加如下权限:

2、进行系统签名。命令如下:

java -jar signapk.jar platform.x509.pem platform.pk8    XXX.apk    Signed_XXX.apk

好了,现在大功告成!!!

0b1331709591d260c1c78e86d0c51c18.png

http://www.xdnf.cn/news/856171.html

相关文章:

  • JSP基于ssm的图书管理系统cf2gt程序+源码+数据库+调试部署+开发环境
  • 南宁建站公司汇总
  • 计算机显示丢失msvcr100.dll的多种解决方法
  • 文件上传的整个流程
  • 百家讲坛中易中天的经典语录(爆强)
  • 打造卓越任务调度体系:实用攻略与技巧解析
  • 计算机体系结构 第一章 计算机系统结构的基础知识(1)
  • 国内网页设计网站网址大全
  • MyEclipse各种版本注册码
  • 39个seo大师级经典案例
  • Android资源管理框架
  • x264参数详解
  • VMware 安装配置 Ubuntu(最新版、超详细)
  • windbg拦截驱动加载
  • 亚马逊正常购物下单流程是怎么样的?
  • busybox命令
  • HTML链接
  • 英语学习资源下载大全 一网打尽
  • JSP快速入门教程——全十讲
  • 视频传输解决方案,让视频会议更高效
  • “屌丝”元组织
  • 如何卸载MSN 2009(Live Messenger 2009)(转载)
  • 最全android Demo
  • cuda无法在电脑上运行_傻瓜式安卓手机运行经典电脑游戏,让《罗马复兴》跑在手机上...
  • 神仙道丹药材料及掉落地点大全
  • 打造你自己的即时通讯软件:从编程到实现
  • 五款好用的数据备份软件推荐!
  • process 嵌入exe的启动位置_如何彻底禁用腾讯流氓程序高速下载引擎tencentdl.exe以及teniodl.exe...
  • HTC Touch HD手机评测
  • 爱思助手从苹果服务器shsh失败,爱思助手无法提取SHSH降级iOS6.1.2固件教程