Android 靜默更新apk
任務:打開App檢查服務器有無更新,有則下載,然後靜默安裝更新。
(1)下載更新app
(2)靜默安裝
參考鏈接:
內容:關於以上兩個任務,網上已經有很多實例以及文字說明了,這裏只是記錄一下自己參考他們的博客後而寫的代碼demo。基本上參考上面兩個鏈接就能完全實現改功能了。
(1)檢測有無更新並下載
在服務器上放一個保存版本的update.xml文件,以及更新app
1.update.xml
<?xml version="1.0" encoding="utf-8"?>
<info>
<version>3.0</version>
<url>http://192.168.1.103/updatedemo.apk</url>
<description>new viersion</description>
</info>
表示版本號,下載鏈接,說明
2.下載http://blog.csdn.net/furongkang/article/details/6886526
注意添加權限
3.靜默安裝(pm install -r XXX.apx)
調用 String result= execCommand("pm","install","-r",file.getPath());
public static String execCommand(String ...command) {
Process process=null;
InputStream errIs=null;
InputStream inIs=null;
String result="";
try {
process=new ProcessBuilder().command(command).start();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
errIs=process.getErrorStream();
while((read=errIs.read())!=-1){
baos.write(read);
}
inIs=process.getInputStream();
while((read=inIs.read())!=-1){
baos.write(read);
}
result=new String(baos.toByteArray());
if(inIs!=null)
inIs.close();
if(errIs!=null)
errIs.close();
process.destroy();
} catch (IOException e) {
result = e.getMessage();
}
return result;
}
其中apk的權限如下:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
並在manifest加入android:sharedUserId=”android.uid.system”
讓然需要root權限,以及app需要系統簽名。
系統簽名步驟:
(1)從Eclipse導出未簽名的apk
(2)在命令行裏簽名,需要用到一下幾個文件
從android源碼獲取,build/target/product/security,./out/host/linux-x86/framework/
或者直接用find命令找,find -name “signapk.jar”
(3)簽名
把待簽名的apk和上面三個文件放在同一個文件夾下
java -jar signapk.jar platform.x509.pem platform.pk8 updatedemo.apk updatedemo_sign.apk
提示:到相應的目錄下去執行命令,不然會提示error:unable to access jarfile
應該就完成了任務。更新的app也要同樣簽名!
demo運行環境:4412板子 android4.2.2
demo:代碼