- 浏览: 110862 次
- 性别:
- 来自: 北京
最新评论
-
饭更稀:
饭更稀 写道楼主这里写错了吧,第一部分:高16位表示MODE, ...
android绘制view的过程之一---------计算view大小(measure)(转) -
饭更稀:
楼主这里写错了吧,第一部分:高16位表示MODE,不应该是高3 ...
android绘制view的过程之一---------计算view大小(measure)(转) -
hovei:
...
http协议 -
liufang205:
...
http协议
下面就如何对Android 手机上的应用进行升级相关知识的讲解:
一、原理及要点概述:
1.手机软件一般在运行时会把服务端的版本信息和当前手机中的版本进行比较。从而得知需不需要更新。Android上推介版本比较更新这种方式。
2.如果服务器端有新版本,我们需要先下载这个APK到我们的sdcard中,然后对其进行安装。
3.我们一定要保证每次安装的keystore密钥文件是相同的。这样Android手机才会提醒你替换新版本。
4.Android区分软件的不同是通过包名,身份的认证是通过签名。只有相同签名的APK才可以安装。不然安装就会失败。
注:如果你每次发布APK文件时都新建一个key文件会导致无法正确安装,我们必须先卸载老的版本才能执行新版本安装。这样你就必须要通知每个客户去把软件卸载后重新下载安装。
二、接下来具体介绍一下升级步骤:
1.签名步骤流程讲一下,很多初学者不是很清楚或容易犯错:
签名的作用: 是为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
首先eclipse如图所示打开:
然后设置APK名称,一般默认项目名称:
点击下一步,新建一个keys,输入密钥,:
注:这个密钥很重要,每次升级都需要使用到。忘记密钥也只能是重新生成。从而会引发后面升级的一系列问题。
下一步如图,设置别名,组织机构等等基本信息,根据具体情况:
下一步如图选择保存的APK目录:
至此apk和密钥文件生成完毕:
接下来,当程序需要改变,我们如何打包升级APK文件:
第一步和上面一样,从第二步开始讲解:
注:一定要使用现有的密钥,输入之前设置的密码,不然安装APK将不被覆盖。
下一步如图,输入密码:
然后下一步,Finish掉。
至此APK升级文件创建好。
三、服务器端和客户端设计
1.服务器端设计:
设计方法应该有很多,下面介绍我的一种方法:
•a.首先在服务器项目下建立一个文件夹来存放APK安装文件:
•b.其次在src下建立一个资源文件,apkVersion.properties,属性定义如下:
[plain] view plaincopyprint?
1.apkVersion=1 存版本号apkSize=550kb 大小apkPath=http://xx8080/srv/apk/Demo.apk 升级文件
apkVersion=1 存版本号apkSize=550kb 大小apkPath=http://xx8080/srv/apk/Demo.apk 升级文件
•c.定义一个servlet来获取资源中的信息:
定义类:UpdateApkServlet.java
[java] view plaincopyprint?
1.//获取资源文件信息
2.static { 3.Properties ppt = new Properties(); 4.try { 5. ppt.load(UpdateApkServlet.class .getResourceAsStream("/apkVersion.properties")); 6. apkVersion = ppt.getProperty("apkVersion"); 7. apkSize = ppt.getProperty("apkSize"); 8. apkPath = ppt.getProperty("apkPath"); 9.}catch (Exception e) { 10. e.printStackTrace();
11.}
12.}
//获取资源文件信息static {Properties ppt = new Properties();try { ppt.load(UpdateApkServlet.class .getResourceAsStream("/apkVersion.properties")); apkVersion = ppt.getProperty("apkVersion"); apkSize = ppt.getProperty("apkSize"); apkPath = ppt.getProperty("apkPath"); }catch (Exception e) { e.printStackTrace();}}
获取资源,然后生成JSON字串返回客户端处理。 注:当客户端版本有更新,服务器端只要把APK文件拷贝到APK目录,然后更新apkVersion.properties文件中的信息就可以了,切记。
客户端设计:
•1、 客户端首先获取服务器的版本信息(http方式获取)。
•2、 如何获取本地客户端的版本信息 如下参考代码:
[java] view plaincopyprint?
1./**
2. * 得到本地应用的版本信息
3. * @return
4.*/
5.private int getAPKVersion(){ 6. //APK版本判断 7. int sdcardVersion = 0; 8. String apkFilePath="sdcard/demo.apk"; //安装包路径 9. PackageManager pm = getPackageManager();
10. PackageInfo info = pm.getPackageArchiveInfo(apkFilePath, PackageManager.GET_ACTIVITIES);
11.if(info != null){ 12. sdcardVersion=info.versionCode; //得到版本信息 13. Log.v(TAG, "Version="+sdcardVersion); 14.}
15.return sdcardVersion; 16.}
/** * 得到本地应用的版本信息 * @return */private int getAPKVersion(){ //APK版本判断 int sdcardVersion = 0; String apkFilePath="sdcard/demo.apk"; //安装包路径 PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(apkFilePath, PackageManager.GET_ACTIVITIES); if(info != null){ sdcardVersion=info.versionCode; //得到版本信息 Log.v(TAG, "Version="+sdcardVersion); } return sdcardVersion;}
•3、 版本比较,如果版本相同,则不执行更新,不同才进行更新操作。 这里插入客户端版本设置介绍: 客户端版本设置在AndroidManifest.xml文件中,里面有两个属性可进行版本信息设置, android:versionCode="1" 版本号 android:versionName="1.1" 版本名称 这个版本号需要和服务器端对应。
•4、 需要的权限设置
[plain] view plaincopyprint?
1.Sdcard访问权限: uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
2.访问网络权限: uses-permission android:name="android.permission.INTERNET"
Sdcard访问权限: uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"访问网络权限: uses-permission android:name="android.permission.INTERNET"
•5、 更新安装 当用户点击应用时执行检查更新。相关代码参考:
//弹出框提示
[java] view plaincopyprint?
1.public Handler handler = new Handler() {
2.public void handleMessage(Message msg) { 3.super.handleMessage(msg); 4.Dialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("系统更新").setMessage("发现新版本,请更新!") 5.// 设置内容.setPositiveButton("确定",// 设置确定按钮new DialogInterface.OnClickListener() { 6.@Override 7.public void onClick(DialogInterface dialog, int which) { 8.pBar = new ProgressDialog(MainActivity.this); 9.pBar.setTitle("正在下载");pBar.setMessage("请稍候..."); 10.pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);downFile(apkPath);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() { 11.public void onClick(DialogInterface dialog, int whichButton) { 12.// 点击"取消"按钮操作}}).create();// 创建 13.// 显示对话框 14.dialog.show();
15. }
16.};
public Handler handler = new Handler() {public void handleMessage(Message msg) {super.handleMessage(msg); Dialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("系统更新").setMessage("发现新版本,请更新!") // 设置内容.setPositiveButton("确定",// 设置确定按钮new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {pBar = new ProgressDialog(MainActivity.this);pBar.setTitle("正在下载");pBar.setMessage("请稍候...");pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);downFile(apkPath);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {// 点击"取消"按钮操作}}).create();// 创建// 显示对话框dialog.show(); }};
//下载
[java] view plaincopyprint?
1./**
2. * DOWNLOAD APK FILE BY URL
3. * @param url
4.*/
5.public void downFile(final String url) { 6.pBar.show();
7.new Thread() { 8.public void run() { 9.HttpClient client = new DefaultHttpClient(); 10.// params[0]代表连接的 11.urlHttpGet get = new HttpGet(url); 12.HttpResponse response;
13.try { 14.response = client.execute(get);
15.HttpEntity entity = response.getEntity();
16.long length = entity.getContentLength(); 17.InputStream is = entity.getContent();
18.FileOutputStream fileOutputStream = null; 19.if (is != null) { 20.File file = new File(Environment.getExternalStorageDirectory(),"demo.apk"); 21.fileOutputStream = new FileOutputStream(file); 22.byte[] buf = new byte[1024]; 23.int ch = -1; 24.int count = 0; 25.while ((ch = is.read(buf)) != -1) { 26.// baos.write(buf, 0, ch); 27.fileOutputStream.write(buf, 0, ch); 28.count += ch;if (length > 0) {} 29.}
30.}
31.fileOutputStream.flush();
32.if (fileOutputStream != null) { 33.fileOutputStream.close();
34.}
35.down();
36.} catch (ClientProtocolException e) { 37.e.printStackTrace();
38.} catch (IOException e) { 39.e.printStackTrace();
40.}
41.}
42.}.start();
43.}
44.public void down() { 45.handler.post(new Runnable() 46.{
47.public void run() { 48.pBar.cancel();
49.update();
50.}});
51.}
/** * DOWNLOAD APK FILE BY URL * @param url */public void downFile(final String url) {pBar.show();new Thread() {public void run() {HttpClient client = new DefaultHttpClient();// params[0]代表连接的urlHttpGet get = new HttpGet(url);HttpResponse response;try {response = client.execute(get);HttpEntity entity = response.getEntity();long length = entity.getContentLength();InputStream is = entity.getContent();FileOutputStream fileOutputStream = null;if (is != null) {File file = new File(Environment.getExternalStorageDirectory(),"demo.apk");fileOutputStream = new FileOutputStream(file);byte[] buf = new byte[1024];int ch = -1;int count = 0;while ((ch = is.read(buf)) != -1) {// baos.write(buf, 0, ch);fileOutputStream.write(buf, 0, ch);count += ch;if (length > 0) {}}}fileOutputStream.flush();if (fileOutputStream != null) {fileOutputStream.close();}down();} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}.start();}public void down() {handler.post(new Runnable() {public void run() {pBar.cancel();update();}});}
//更新升级
[java] view plaincopyprint?
1.public void update() {
2.Intent intent = new Intent(Intent.ACTION_VIEW); 3.intent.setDataAndType(Uri.fromFile(new File("/sdcard/demo.apk")),"application/vnd.android.package-archive"); 4.startActivity(intent);
5.}
一、原理及要点概述:
1.手机软件一般在运行时会把服务端的版本信息和当前手机中的版本进行比较。从而得知需不需要更新。Android上推介版本比较更新这种方式。
2.如果服务器端有新版本,我们需要先下载这个APK到我们的sdcard中,然后对其进行安装。
3.我们一定要保证每次安装的keystore密钥文件是相同的。这样Android手机才会提醒你替换新版本。
4.Android区分软件的不同是通过包名,身份的认证是通过签名。只有相同签名的APK才可以安装。不然安装就会失败。
注:如果你每次发布APK文件时都新建一个key文件会导致无法正确安装,我们必须先卸载老的版本才能执行新版本安装。这样你就必须要通知每个客户去把软件卸载后重新下载安装。
二、接下来具体介绍一下升级步骤:
1.签名步骤流程讲一下,很多初学者不是很清楚或容易犯错:
签名的作用: 是为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
首先eclipse如图所示打开:
然后设置APK名称,一般默认项目名称:
点击下一步,新建一个keys,输入密钥,:
注:这个密钥很重要,每次升级都需要使用到。忘记密钥也只能是重新生成。从而会引发后面升级的一系列问题。
下一步如图,设置别名,组织机构等等基本信息,根据具体情况:
下一步如图选择保存的APK目录:
至此apk和密钥文件生成完毕:
接下来,当程序需要改变,我们如何打包升级APK文件:
第一步和上面一样,从第二步开始讲解:
注:一定要使用现有的密钥,输入之前设置的密码,不然安装APK将不被覆盖。
下一步如图,输入密码:
然后下一步,Finish掉。
至此APK升级文件创建好。
三、服务器端和客户端设计
1.服务器端设计:
设计方法应该有很多,下面介绍我的一种方法:
•a.首先在服务器项目下建立一个文件夹来存放APK安装文件:
•b.其次在src下建立一个资源文件,apkVersion.properties,属性定义如下:
[plain] view plaincopyprint?
1.apkVersion=1 存版本号apkSize=550kb 大小apkPath=http://xx8080/srv/apk/Demo.apk 升级文件
apkVersion=1 存版本号apkSize=550kb 大小apkPath=http://xx8080/srv/apk/Demo.apk 升级文件
•c.定义一个servlet来获取资源中的信息:
定义类:UpdateApkServlet.java
[java] view plaincopyprint?
1.//获取资源文件信息
2.static { 3.Properties ppt = new Properties(); 4.try { 5. ppt.load(UpdateApkServlet.class .getResourceAsStream("/apkVersion.properties")); 6. apkVersion = ppt.getProperty("apkVersion"); 7. apkSize = ppt.getProperty("apkSize"); 8. apkPath = ppt.getProperty("apkPath"); 9.}catch (Exception e) { 10. e.printStackTrace();
11.}
12.}
//获取资源文件信息static {Properties ppt = new Properties();try { ppt.load(UpdateApkServlet.class .getResourceAsStream("/apkVersion.properties")); apkVersion = ppt.getProperty("apkVersion"); apkSize = ppt.getProperty("apkSize"); apkPath = ppt.getProperty("apkPath"); }catch (Exception e) { e.printStackTrace();}}
获取资源,然后生成JSON字串返回客户端处理。 注:当客户端版本有更新,服务器端只要把APK文件拷贝到APK目录,然后更新apkVersion.properties文件中的信息就可以了,切记。
客户端设计:
•1、 客户端首先获取服务器的版本信息(http方式获取)。
•2、 如何获取本地客户端的版本信息 如下参考代码:
[java] view plaincopyprint?
1./**
2. * 得到本地应用的版本信息
3. * @return
4.*/
5.private int getAPKVersion(){ 6. //APK版本判断 7. int sdcardVersion = 0; 8. String apkFilePath="sdcard/demo.apk"; //安装包路径 9. PackageManager pm = getPackageManager();
10. PackageInfo info = pm.getPackageArchiveInfo(apkFilePath, PackageManager.GET_ACTIVITIES);
11.if(info != null){ 12. sdcardVersion=info.versionCode; //得到版本信息 13. Log.v(TAG, "Version="+sdcardVersion); 14.}
15.return sdcardVersion; 16.}
/** * 得到本地应用的版本信息 * @return */private int getAPKVersion(){ //APK版本判断 int sdcardVersion = 0; String apkFilePath="sdcard/demo.apk"; //安装包路径 PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(apkFilePath, PackageManager.GET_ACTIVITIES); if(info != null){ sdcardVersion=info.versionCode; //得到版本信息 Log.v(TAG, "Version="+sdcardVersion); } return sdcardVersion;}
•3、 版本比较,如果版本相同,则不执行更新,不同才进行更新操作。 这里插入客户端版本设置介绍: 客户端版本设置在AndroidManifest.xml文件中,里面有两个属性可进行版本信息设置, android:versionCode="1" 版本号 android:versionName="1.1" 版本名称 这个版本号需要和服务器端对应。
•4、 需要的权限设置
[plain] view plaincopyprint?
1.Sdcard访问权限: uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
2.访问网络权限: uses-permission android:name="android.permission.INTERNET"
Sdcard访问权限: uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"访问网络权限: uses-permission android:name="android.permission.INTERNET"
•5、 更新安装 当用户点击应用时执行检查更新。相关代码参考:
//弹出框提示
[java] view plaincopyprint?
1.public Handler handler = new Handler() {
2.public void handleMessage(Message msg) { 3.super.handleMessage(msg); 4.Dialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("系统更新").setMessage("发现新版本,请更新!") 5.// 设置内容.setPositiveButton("确定",// 设置确定按钮new DialogInterface.OnClickListener() { 6.@Override 7.public void onClick(DialogInterface dialog, int which) { 8.pBar = new ProgressDialog(MainActivity.this); 9.pBar.setTitle("正在下载");pBar.setMessage("请稍候..."); 10.pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);downFile(apkPath);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() { 11.public void onClick(DialogInterface dialog, int whichButton) { 12.// 点击"取消"按钮操作}}).create();// 创建 13.// 显示对话框 14.dialog.show();
15. }
16.};
public Handler handler = new Handler() {public void handleMessage(Message msg) {super.handleMessage(msg); Dialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("系统更新").setMessage("发现新版本,请更新!") // 设置内容.setPositiveButton("确定",// 设置确定按钮new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {pBar = new ProgressDialog(MainActivity.this);pBar.setTitle("正在下载");pBar.setMessage("请稍候...");pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);downFile(apkPath);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {// 点击"取消"按钮操作}}).create();// 创建// 显示对话框dialog.show(); }};
//下载
[java] view plaincopyprint?
1./**
2. * DOWNLOAD APK FILE BY URL
3. * @param url
4.*/
5.public void downFile(final String url) { 6.pBar.show();
7.new Thread() { 8.public void run() { 9.HttpClient client = new DefaultHttpClient(); 10.// params[0]代表连接的 11.urlHttpGet get = new HttpGet(url); 12.HttpResponse response;
13.try { 14.response = client.execute(get);
15.HttpEntity entity = response.getEntity();
16.long length = entity.getContentLength(); 17.InputStream is = entity.getContent();
18.FileOutputStream fileOutputStream = null; 19.if (is != null) { 20.File file = new File(Environment.getExternalStorageDirectory(),"demo.apk"); 21.fileOutputStream = new FileOutputStream(file); 22.byte[] buf = new byte[1024]; 23.int ch = -1; 24.int count = 0; 25.while ((ch = is.read(buf)) != -1) { 26.// baos.write(buf, 0, ch); 27.fileOutputStream.write(buf, 0, ch); 28.count += ch;if (length > 0) {} 29.}
30.}
31.fileOutputStream.flush();
32.if (fileOutputStream != null) { 33.fileOutputStream.close();
34.}
35.down();
36.} catch (ClientProtocolException e) { 37.e.printStackTrace();
38.} catch (IOException e) { 39.e.printStackTrace();
40.}
41.}
42.}.start();
43.}
44.public void down() { 45.handler.post(new Runnable() 46.{
47.public void run() { 48.pBar.cancel();
49.update();
50.}});
51.}
/** * DOWNLOAD APK FILE BY URL * @param url */public void downFile(final String url) {pBar.show();new Thread() {public void run() {HttpClient client = new DefaultHttpClient();// params[0]代表连接的urlHttpGet get = new HttpGet(url);HttpResponse response;try {response = client.execute(get);HttpEntity entity = response.getEntity();long length = entity.getContentLength();InputStream is = entity.getContent();FileOutputStream fileOutputStream = null;if (is != null) {File file = new File(Environment.getExternalStorageDirectory(),"demo.apk");fileOutputStream = new FileOutputStream(file);byte[] buf = new byte[1024];int ch = -1;int count = 0;while ((ch = is.read(buf)) != -1) {// baos.write(buf, 0, ch);fileOutputStream.write(buf, 0, ch);count += ch;if (length > 0) {}}}fileOutputStream.flush();if (fileOutputStream != null) {fileOutputStream.close();}down();} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}.start();}public void down() {handler.post(new Runnable() {public void run() {pBar.cancel();update();}});}
//更新升级
[java] view plaincopyprint?
1.public void update() {
2.Intent intent = new Intent(Intent.ACTION_VIEW); 3.intent.setDataAndType(Uri.fromFile(new File("/sdcard/demo.apk")),"application/vnd.android.package-archive"); 4.startActivity(intent);
5.}
发表评论
-
android绘制view的过程之一---------计算view大小(measure)(转)
2013-01-16 11:40 34020http://www.eoeandroid.com/forum ... -
[转]Android开发学习笔记:数据存取之SQLite浅析
2012-11-28 10:58 991一.SQLite的介绍 1.SQLite ... -
android 背景改变
2012-07-20 14:35 1064一:在xml里面设置 <?xml version=&qu ... -
转 android view构造函数研究
2012-07-16 13:37 2389上周遇到了SurfaceView的constructor的问题 ... -
ImageView 上显示文字
2012-07-16 09:59 1369@Override protected void onDra ... -
继承ImageView 实现了多点触碰的拖动和缩放
2012-07-16 09:58 995public class TouchView extends ... -
android中ansycTask的用法
2012-06-11 17:09 1777在开发Android应用时必须遵守单线程模型的原则: Andr ... -
Android 使用AsyncTask 后监听异步加载完毕的动作
2012-06-11 17:07 1286AsyncTask 的使用方法网上有很多例子,使用起来也非常的 ... -
android九宫格
2012-06-11 10:31 11241:打开android-sdk文件夹下的tool工具中的dra ... -
androlid 自定义字体
2012-06-07 11:08 10491、Android系统默认支持三种字体,分别为:“sans”, ... -
android 完全退出程序
2012-06-07 10:39 839android.os.Process.killProcess( ... -
[Android] 如何将应用程序转移到SD卡
2012-06-04 17:14 2553其实也只是将程序里的. ... -
android中用到的一些属性
2012-06-04 11:58 0如何防止Android应用中的Service被系统回收? 很 ... -
关键字飞入飞出效果
2012-06-04 10:47 1358一关键字样式及动画 pac ... -
android 传感器 SensorManager
2012-05-28 17:10 923传感器是一种物理装置,能够探测、感受外界的信号、物理条件(如光 ... -
android listview内容向上滚动
2012-05-25 14:54 39371:调用类 public class MainActivity ... -
android ui
2012-05-25 09:32 1253Android ui 一、 图片处理。 a) Drawable ... -
安卓开发中Bitmap/Drawable/byte[]互换 及Bitmap.Config里的一些参数
2012-05-25 09:17 1202在网上搜了一些其它的方法,在这里分享下 1.Drawab ... -
转 android 内容提供者contentprovider
2012-04-12 14:30 0内容提供器用来存放和获取数据并使这些数据可以被所有的应用程序访 ... -
activity onSaveInstanceState
2012-04-09 10:21 0先看Application Fundamentals ...
相关推荐
Android升级更新实例(客户端+服务端),通过内部升级方法。
Android升级包update.zip的生成过程分析1) 对于update.zip包的制作有两种方式,即手动制作和命令生成。 第一种手动制作:即按照update.zip的目录结构手动创建我们需要的目录。然后将对应的文件拷贝到相应的目录下,...
Android 升级版 SwipeRefreshLayout,支持下拉刷新(Refresh)和上拉加载更多(Loadmore),支持自定义HeaderView和FooterView,支持RecyclerView、ScrollView嵌套滚动,支持任何View和Layout,支持自定义动画
Common downloaderV4.7.20 For Android升级操作指导
用于对Android升级包和APK进行签名
Android升级后旧版本的httpclient4.0 apache-mime4j-0.6 commons-codec-1.4 commons-logging-1.1.1 httpclient-4.0.1 httpcore-4.0.1 httpmime-4.0.1
将文件夹 SD8227刷机包 里的文件复制到U盘或者SD卡根目录,插上车机,在系统设置里的系统信息里,点Android升级 进行刷机,重启自动进入刷机界面。刷机完毕,需要如需要修改协议,在工厂模式(密码一般是8888)下...
博客地址: http://blog.csdn.net/aaawqqq/article/details/40020525 Android更新 升级模块 解决Android自带升级问题
OTA升级,包含文件下载,
三星i5700本身的rom很差,对中文的显示非常不友好,升级这里的rom,可以达到完美显示的目的
android 升级代码 可直接打成jar包使用
OTA升级客户指导-Android 7.0
有一个是GitHub库使用示例,有一个是自写; 更改下启动activity即可运行;两套,可自己选择合适的。
Android版本升级功能不受安卓版本的限制,代码可以直接用在项目上,demo的开发环境是Android Studio
把ZIP固件包复制到U盘根目录(下载的RAR压缩包需要先解压)插到车机上,进入车机设置>系统信息>Android升级即可,全程不要断电!!!(U盘需FAT32格式,16G以下。ZIP包不要改名否则不能识别) 本固件分为YT9250....
文档的内容是我总结的关于Android OTA升级包制作, Android Recovery模式和升级过程的一些知识. 其中参考了 http://blog.csdn.net/mu0206mu和 http://blog.csdn.net/zclongembedded/article/category/1314238 博客上...
随着APP的越来越大,增量升级已是必不可少的方法,根据新旧版本的APP,在PC上用diff工具生成差分包, 然后把差分包放到设备上或是从服务器下载到本地,并在本地使用差分包与已安装apk,合成新版apk。通过计算MD5值,...
Android 增加一个分区配置指南 设需要增加一个oem分区,大小为8MB, 升级固件时,需要升级工具把oem.img文件写入到oem分区。 oem.img文件可以是任意格式的文件,比如一个ext4的镜像文件, 或 者一个视频文件,或者一...
mac android studio 更新到最新版本引起的Lombok插件版本不兼容状态 Android Studio Bumblebee | 2021.1.1 Build #AI-211.7628.21.2111.8092744, built on January 19, 2022 编译项目后会提示如下异常信息 Plugin...
Android OTA升级流程,获取版本信息,下载完后MD5校验,OTA检测。