android程序自動更新安裝詳解

進入程序的時候,首先先向後臺服務器發送一個請求,服務器把現在服務器裏面android應用程序版本號(更新版本),大小和下載網址一起發送過來.再把更新版本和本地版本進行比較,如果不相同,則進入更新,當把應用程序下載完成後,再用系統程序打開已經下載好的版本.由於應用程序大小隻有2M左右,就沒有用斷點傳送.
注意事項:
服務器裏面更新版本應用程序必須和你手機裏面應用程序使用的簽名是一樣了(否則下載下來和安裝完成後,最後出現一個打開和完成時,只顯示完成,沒有打開,這樣你的程序更新還是不成功)

/*從網絡上把apk下下來*/
private void beginToDownloadAPK() {

if (isHasSDcard) {
apk = HttpUtils.getSDFileObject(LaunchActivity.this, APKNAME);
try {
URL url = new URL(urls);
try {

HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
InputStream is = conn.getInputStream();
FileOutputStream fos = new FileOutputStream(apk);
byte[] buffer = new byte[1024];
conn.connect();
int temp = -1;
int i = 1;
int download = 0;
int average = (int)(size / COUNTER);
if(conn.getResponseCode() >= 400){
Log.v("tag", "download apk out time");
}else{
while((temp = is.read(buffer)) != -1){
fos.write(buffer, 0, temp);
fos.flush();
download = download + temp;
if(download >= (average * i)){
handler.sendEmptyMessage(GET_DOWNLOAD);
i++;
}
}
}
conn.disconnect();
fos.close();
is.close();
downFinish();
} catch (IOException e) {
// TODO Auto-generated catch block
handler.sendEmptyMessage(GET_FAIL);
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
     /*下載完成後啓動安裝程序*/
private void openFile() {   
        // TODO Auto-generated method stub   
        Log.d("tag", apk.getAbsolutePath());   
        Intent intent = new Intent();   
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
        intent.setAction(android.content.Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(apk),   
                        "application/vnd.android.package-archive");   
        startActivity(intent);   
        updateDownloadFinishPref();


運行程序,編譯出一個apk文件,再創建出你自己的私鑰,保留好你的私鑰,留着給以後版本加上同樣的私鑰,這樣你更新版本和現在版本就屬於同一個私鑰,就可以順利更新.

創建私鑰:
        在ecplise裏面在項目名右擊,再點擊Android Tools,再Export Android Application這個選項,就出現以下畫面

點擊next


因爲是第一創建一個私鑰.選擇第二個,再選擇一個放置私鑰地方,輸入密碼.再點擊next

按着你實際情況填好,再點擊next一直下去,就已經創好一個私鑰了.這時你的apk應用程序(1.0版本)已經導出放在一個目錄下面,就可以把這個應用程序放在服務器中.

過了N久以後,你的應用程序有了更新,你先運行一下,再用你上面你已經保存好的私鑰給你現在應用程序加上同樣的私鑰了.如下:
在ecplise裏面在項目名右擊,再點擊Android Tools,再Export Android Application這個選項,出現這個畫面時選擇已經存在的私鑰,也就是第一個選項

輸入密碼

再次輸入上次你填的密碼,再一直按着next,這樣你的apk應用程序(2.0版本)就已經在你一個目錄裏面,你再把這個2.0版本放入服務器裏面替代你以前1.0版本.
這樣用戶手機使用正在是1.0版本,通過查出你的版本是2.0,再用下載,就完全可以程序自動安裝了.不會出現別的問題

如果出現包解析錯誤:
                 證明是你的包沒有下完成.驗證方法,可以手動跑到/sdcard下載目錄下,把這個apk手動安裝,如果失敗,則證明的你的apk沒有下完成.如果成功:有一個原因,你沒有把apk包下載完就已經開始安裝,就出現解析錯誤,等你手動跑到sd卡去安裝時,你的包已經下載完成,此時你也想不通爲什麼包解析錯誤.

如果出現下載完並自動更新安裝最後一步只有完成按鈕沒有打開這個按鈕.
                 是你的私鑰有問題,你現在版本和你下載版本不是同一個私鑰,所以不能打開,.安裝也是白安裝了.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章