Android 靜默更新apk

Android 靜默更新apk

任務:打開App檢查服務器有無更新,有則下載,然後靜默安裝更新。
(1)下載更新app
(2)靜默安裝
參考鏈接

  1. http://blog.csdn.net/jiangwei0910410003/article/details/36427963

  2. http://blog.csdn.net/furongkang/article/details/6886526

內容:關於以上兩個任務,網上已經有很多實例以及文字說明了,這裏只是記錄一下自己參考他們的博客後而寫的代碼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:代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章