此处采用自己集成并没有错采用bugly等傻瓜式接入,因为百度apistore 免费接口关闭告诉我,过度依赖别人都是不靠谱的。
1.开源地址:https://github.com/Tencent/tinker/wiki
下面是集成步骤:完全采用正式版的集成流程。
首先新建一个项目。
2.项目的gradle 文件添加:
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.6')这一行
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.6')
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
3.gradle.properties文件中添加:
TINKER_VERSION=1.7.64.因为配置有点多,所以选择把官方demo里面的app下的gradle文件内容全部复制下来 覆盖在自己的项目的appde gradle文件中;再修改一些内容。把自己的gradle文件中的
内容复制到相应的位置。
https://github.com/Tencent/tinker/tree/master/tinker-sample-android
上面是官方demo下载地址。
下面是 需要修改的地方:
这里这些版本号改成自己的版本号。
这里选择自己的签名文件。我打的是正式版的包。
这里 gitrev,自己随便写一个字符串,在原本的项目中,这里是填的git的版本号。无影响的随便写。
这里这些路径先保持原样,此处是打出差异包时用到的
好了 gradle基本配置完毕。
4.把官方demo中的下面的代码全部复制进自己的项目里面,然后再修改文件中import 引入的包名,让它不报错。我这里android studio 设置的
自动导包,只要删除有错的原包名就行了。
5.tinker需要改造自己的application
这里的注解,的意思是配置自己的appcliction,这里只需要写入文件名,然后make project 或者打包的时候会自动在相应目录下生成对应的
application 文件,且这个文件时隐藏的 不可编辑的,如果要修改,可以自己写继承它。
6.在清单文件中
把刚刚注解的那个要生成的application 应用起来,开始会报错因为还没有生成,这里不管它
<service android:name=".service.SampleResultService" android:exported="false"/>
然后再注册刚刚复制进自己项目的那个SampleResultService服务。
再加点权限:
清单文件就配置完毕了。
7.下面是打包步骤,
先打一个正式版的包,签名文件密码自己输入自己的
然后在下面目录中就会出现一些文件(实际上只有3个文件我这里是因为打了好几次包)
再把这些文件的路径复制进app下的gradle文件中
//old apk file to build patch apk
tinkerOldApkPath = "${bakPath}/app-release-0112-16-16-38.apk"
//proguard mapping file to build patch apk
tinkerApplyMappingPath = "${bakPath}/app-release-0112-16-16-38-mapping.txt"
//resource R.txt to build patch apk, must input if there is resource changed
tinkerApplyResourcePath = "${bakPath}/app-release-0112-16-16-38-R.txt"
修改代码完毕后:
接下来就要生成差异包了。如图:
正式版就运行正式版的。
运行完毕后:
那个7zip.apk就是差异包。
接下来 我的验证步骤是这样的。
先把最开始打的正式包通过QQ发到手机,然后安装。
然后再把7zip.apk 放进sd卡根目录、为什么是根目录呢,
因为我的代码是这样的:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String patchPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed_7zip.apk";
File file = new File(patchPath);
if (file.exists()) {
Toast.makeText(this,"补丁文件存在",Toast.LENGTH_LONG).show();
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), patchPath);
} else {
Toast.makeText(this,"补丁文件不存在",Toast.LENGTH_LONG).show();
}
}
}
然后再重新打开app就会发现,修改的代码生效了,并且。合并后我们生成的7zip。apk文件已经被合并进我们apk了,此时sd卡根目录下这个文件已经消失了。
以上就是初步合成步骤,如果要更多还是要看官方文档。
另:自己搭建服务器,就可以控制什么时候下在差异包,差异包放哪个目录。这些就可以控制了。