实现android apk 的安装和卸载
1实现apk安装
/**
* 安装APK文件
*/
public static void installApk(Context context, String filePath) {
File apkfile = new File(filePath);
if (!apkfile.exists()) {
return;
}
// 通过Intent安装APK文件
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
"application/vnd.android.package-archive");
context.startActivity(i);
}
- apk 卸载
public static void uninstall(Context context, String packagename) {
Uri packageURI = Uri.parse("package:"+packagename);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
context.startActivity(uninstallIntent);
}
上面的安装卸载时都会弹出对应的提示框,这个提示框不是所有的项目都需要的,有的时候我们需要在后台执行卸载任务,上面的方法就是不适用了,为了实现不弹出提示框的卸载在网上查了很多资料,可能是我使用的方法问题是都不不行,静默安装和卸载都需要root权限,这个直接就给pass了,后天采用下面的方法完美解决
添加的权限和配置
android:sharedUserId="android.uid.system" 系统权限
添加权限
<uses-permission android:name="android.permission.MASTER_CLEAR" />
卸载
try {
L.i("pm uninstall "+name);
Runtime.getRuntime().exec("pm uninstall "+name);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
静默安装
/**
* 安装应用
*/
public static void installApp(String apkName) {
File file = Environment.getExternalStorageDirectory();
String path = file.getAbsolutePath() + File.separator + apkName;
Log.i(TAG, "pm install " + path);
File apk = new File(path);
if (!apk.exists()) {
Log.i(TAG, "apk file not exits!!");
return;
}
try {
Runtime.getRuntime().exec("pm install -r " + path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i(TAG, "IOException:" + e);
}
Log.i(TAG, "install complete!!");
}
使用goog的签名方法
签名:java -jar signapk.jar platform.x509.pem platform.pk8 文件名.apk 签名后文件名.apk