Android 中静默安装实现,android静默,静默安装原理: 1.需
分享于 点击 8897 次 点评:262
Android 中静默安装实现,android静默,静默安装原理: 1.需
静默安装原理:
1.需要获取root的操作权限 2.通过命令式的方式直接进行安装APK。在使用AndroidStudiodebug安装的时候可以看到控制台上的命令```java
import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.util.Log;
import java.io.DataOutputStream;import java.io.File;import java.io.IOException;import java.io.OutputStream;
/ * <p>名称:com.singno.VersionManager</p> * <p>描述:</p> * <pre> * APK版本管理器 * 版本检查,版本更新等 * </pre> * @author 鲍建明 * @version 2.1.0 * @date 2015/4/30/16:28 /public class VersionManager {
private static final String TAG = VersionManager.class.getName();private Context context;public VersionManager(Context context){ this.context = context;}/** * 检查版本号是否相同 * @param versionCode * @return */public boolean isSameVersion(int versionCode){ return getCurrentVersion() != versionCode ? Boolean.FALSE : Boolean.TRUE;}/** * 静默安装,安装之前必须要获取到ROOT权限 * 原理:1.先获取到ROOT权限 * 2.在通过命令的方式直接安装APK * @return */public boolean silenceInstall(File file){ Process process = null; OutputStream out = null; DataOutputStream dataOutputStream = null; try { process = Runtime.getRuntime().exec("su"); out = process.getOutputStream(); dataOutputStream = new DataOutputStream(out); dataOutputStream.writeBytes("chmod 777 " + file.getPath() + "\n"); dataOutputStream.writeBytes("LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r " + file.getPath()); // 提交命令 dataOutputStream.flush(); int value = process.waitFor(); if( value == 0){ return Boolean.TRUE; } return Boolean.FALSE; } catch (Exception e) { e.printStackTrace(); return Boolean.FALSE; }finally{ try { if( dataOutputStream != null ){ dataOutputStream.close(); } if( out != null ){ out.close(); } } catch (IOException e) { e.printStackTrace(); } }}/** * 普通的安装应用方式 * @param file 安装包文件 */public void installApk(File file){ Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(Uri.parse("file://" + file.toString()), "application/vnd.android.package-archive"); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.context.startActivity(i);}/** * 获取服务端中的版本号 * 这个自行完成 * @return */public int getHttpVersion(){ return 0;}/** * 获取当前APK的版本号 * @return 当前APK的版本号 */public int getCurrentVersion(){ try { return this.context.getPackageManager().getPackageInfo(this.context.getPackageName(), 0).versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); Log.e(TAG, "获取版本号失败"); return 0; }}/** * 下载APK */public void downApk(){ new Thread(new DownApk()).start();}/** * 显示下载进度提示框 */private void showDownloadDialog(){}/** * 显示软件更新提示对话框 */private void showNoticeDialog(){}/** * 下载APk的类 */class DownApk implements Runnable{ @Override public void run() { }}
}```
用户点评