思想:
进入程序的时候,首先先向后台服务器发送一个请求,服务器把现在服务器里面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卡去安装时,你的包已经下载完成,此时你也想不通为什么包解析错误.如果出现下载完并自动更新安装最后一步只有完成按钮没有打开这个按钮.
                 是你的私钥有问题,你现在版本和你下载版本不是同一个私钥,所以不能打开,.安装也是白安装了.