android 第三方 实现静默安装软件,Android中如何实现APP静默安装(记录)

首先,APP静默安装是需要root权限的。

如何判断设备是否有root权限?

/**

* 设备是否已root

*

* @return

*/

private boolean isRoot() {

if(new File("/system/bin/su").exists() || new File("/system/xbin/su").exists()){

return true;

}

return false;

}

如何实现静默安装?

/**

* 静默安装工具类

*/

public class InstallUtils {

public static final String TAG = InstallUtils.class.getSimpleName();

public static final int APP_INSTALL_AUTO = 0;

public static final int APP_INSTALL_INTERNAL = 1;

public static final int APP_INSTALL_EXTERNAL = 2;

/**

* root静默安装

* @param filePath

* @param mContext

* @param packageManager

*/

public static void installSilent(String filePath, Context mContext, PackageManager packageManager){

installSilent(filePath,"-r " + getInstallLocationParams(), mContext, packageManager);

}

/**

* root静默安装

* @param filePath

* @param pmParams

*/

private static void installSilent(String filePath, String pmParams, Context mContext, PackageManager packageManager){

if (filePath == null || filePath.length() == 0) {

Log.i(TAG, "installSilent: error path");

return;

}

File file = new File(filePath);

if (file.length() <= 0 || !file.exists() || !file.isFile()) {

Log.i(TAG, "installSilent: error file");

return;

}

//LD_LIBRARY_PATH 指定链接库位置 指定安装命令

String command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install " +

(pmParams == null ? "" : pmParams) +

" " +

filePath.replace(" ", "\\ ");

//以root模式执行

try {

ShellUtils.CommandResult result = ShellUtils.execCommand(command, true, true);

if (result.successMsg != null

&& (result.successMsg.contains("Success") || result.successMsg.contains("success"))) {

Log.i(TAG, "installSilent: success");

//删除安装包

FileManager.deleteDir(TXTManager.apkPath);

//隐式启动APP

Intent intent = packageManager.getLaunchIntentForPackage("com.deepreality.advertising_app");

intent.addCategory(Intent.CATEGORY_LAUNCHER);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK

| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

mContext.startActivity(intent);

//APP关闭

appExit(mContext);

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* root 静默卸载

* @param packageName

* @param isKeepData

*/

public static void uninstallSilent(String packageName, boolean isKeepData){

if (packageName == null) {

Log.i(TAG, "uninstallSilent: error package");

return;

}

String command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib pm uninstall" +

(isKeepData ? " -k " : " ") +

packageName.replace(" ", "\\ ");

ShellUtils.CommandResult result = ShellUtils.execCommand(command, true, true);

if (result.successMsg != null

&& (result.successMsg.contains("Success") || result.successMsg.contains("success"))) {

Log.i(TAG, "uninstallSilent: success");

}

}

private static String getInstallLocationParams() {

int location = getInstallLocation();

switch (location) {

case APP_INSTALL_INTERNAL:

return "-f";

case APP_INSTALL_EXTERNAL:

return "-s";

default:

break;

}

return "";

}

public static int getInstallLocation() {

ShellUtils.CommandResult commandResult = ShellUtils.execCommand("LD_LIBRARY_PATH=/vendor/lib:/system/lib pm get-install-location",

false, true);

if (commandResult.result == 0 && commandResult.successMsg != null && commandResult.successMsg.length() > 0) {

try {

int location = Integer.parseInt(commandResult.successMsg.substring(0, 1));

switch (location) {

case APP_INSTALL_INTERNAL:

return APP_INSTALL_INTERNAL;

case APP_INSTALL_EXTERNAL:

return APP_INSTALL_EXTERNAL;

default:

break;

}

} catch (NumberFormatException e) {

Log.d(TAG, "pm get-install-location error!!! NumberFormatException :", e);

}

}

return APP_INSTALL_AUTO;

}

/**

* 关闭APP

*

* @param mContext

*/

private static void appExit(Context mContext) {

android.app.ActivityManager activityManager = (android.app.ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);

activityManager.killBackgroundProcesses(mContext.getPackageName());

System.exit(0);

}

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部