用了这么久的AS 2.0预览版本号。4.7日谷歌最终公布了android studio 2.0正式版,小编当日便下载了。玩了一下。感觉第二次build编译明显快了,并且好像并没有又一次部署apk。经过具体的分析以及谷歌官方资料显示,大致得出谷歌应该在android studio2.0中嵌入了增量更新的方法。增量更新这词第一次出现我面前是在好久好久曾经。还记得之前360推荐的一个升级apk的方式省流量升级,该方式就是採用增量更新的方法,对apk进行升级。
差点儿全部的软件都须要更新迭代,所以增量更新可能是一种趋势。先来讲讲增量更新的概念。
所谓的增量更新事实上就是当应用版本号要更新迭代时通常的做法是又一次下载新的版本号去覆盖旧版本号,但这样有个比較明显缺点,太浪费流量了。我们能不能仅仅更新新版本号添加的内容呢。增量更新就能够帮助我们实现这点,我们仅仅需对改变的部分进行升级与更新,节约用户流量。
那么增量更新是怎么做的呢?首先将应用的旧版本号Apk与新版本号Apk做差分,得到更新的部分的补丁.patch文件,获取到补丁文件之后用户下载该补丁在本地对apk以及补丁包进行组合形成一个新的apk文件。这个文件跟你之前的新版本号的apk基本上是一致的。
那我们来看看怎么生成差分文件吧。
下载http://download.csdn.net/detail/qq_29282475/9490983
使用该库生成差分文件,生成步奏请查看资源描写叙述
以下给一个简单代码来实现增量更新吧。
代码界面比較简单就一个button
activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@android:color/white"> <Button android:id="@+id/patch_update" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/patch_update"/> </LinearLayout>增量更新主要是放在jni层进行的。
我们调用仅仅需一个增量更新类PatchUpdate
主activity
public class MainActivity extends Activity implements OnClickListener { private final String SD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.findViewById(R.id.patch_update).setOnClickListener(this); } @Override public void onClick(View v) { //1.找老的APK包 String oldApkPath = SD_PATH+"/aOld.apk"; File file = new File(Environment.getExternalStorageDirectory(),"aOld.apk"); Log.v("rush_yu", oldApkPath); if (!file.exists()) { Toast.makeText(this, "找不到安装包位置", Toast.LENGTH_LONG).show(); return; } File patchFile = new File(Environment.getExternalStorageDirectory(),"a.patch"); if (!patchFile.exists()) { Toast.makeText(this, "请先把patch文件放在SD卡根文件夹", Toast.LENGTH_LONG).show(); return; } //2.运行命令打新包 String newFilePath = SD_PATH + "/aNew.apk"; PatchUpdate.bspatch(oldApkPath, newFilePath, SD_PATH + "/a.patch"); //3.安装新包 File newApkFile = new File(newFilePath); if (newApkFile.exists()) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(newApkFile), "application/vnd.android.package-archive"); startActivity(intent); } else { Toast.makeText(this, "新安装包不存在", Toast.LENGTH_LONG).show(); } } }
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">还有详细的增量更新的代码。请查看后面的资源文件jni层。</span>
增量更新源代码地址 http://download.csdn.net/detail/qq_29282475/9491075 ,这些是增量更新的一些基础,本文会随着学习程度不断更新。