android笔记之 tinker初步集成

此处采用自己集成并没有错采用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.6
4.因为配置有点多,所以选择把官方demo里面的app下的gradle文件内容全部复制下来 覆盖在自己的项目的appde gradle文件中;再修改一些内容。把自己的gradle文件中的

内容复制到相应的位置。

https://github.com/Tencent/tinker/tree/master/tinker-sample-android

上面是官方demo下载地址。
下面是 需要修改的地方:

android笔记之 tinker初步集成_第1张图片

这里这些版本号改成自己的版本号。

android笔记之 tinker初步集成_第2张图片

这里选择自己的签名文件。我打的是正式版的包。

android笔记之 tinker初步集成_第3张图片

这里 gitrev,自己随便写一个字符串,在原本的项目中,这里是填的git的版本号。无影响的随便写。

android笔记之 tinker初步集成_第4张图片

这里这些路径先保持原样,此处是打出差异包时用到的

好了 gradle基本配置完毕。

4.把官方demo中的下面的代码全部复制进自己的项目里面,然后再修改文件中import 引入的包名,让它不报错。我这里android studio 设置的

自动导包,只要删除有错的原包名就行了。

android笔记之 tinker初步集成_第5张图片

5.tinker需要改造自己的application

android笔记之 tinker初步集成_第6张图片

这里的注解,的意思是配置自己的appcliction,这里只需要写入文件名,然后make project 或者打包的时候会自动在相应目录下生成对应的

application 文件,且这个文件时隐藏的 不可编辑的,如果要修改,可以自己写继承它。

6.在清单文件中

android笔记之 tinker初步集成_第7张图片

把刚刚注解的那个要生成的application 应用起来,开始会报错因为还没有生成,这里不管它

<service
android:name=".service.SampleResultService"
android:exported="false"/>

然后再注册刚刚复制进自己项目的那个SampleResultService服务。

再加点权限:

    
    

清单文件就配置完毕了。


7.下面是打包步骤,

先打一个正式版的包,签名文件密码自己输入自己的

然后在下面目录中就会出现一些文件(实际上只有3个文件我这里是因为打了好几次包)

android笔记之 tinker初步集成_第8张图片

再把这些文件的路径复制进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"

然后需要随便修改一下代码 好看修复效果。

修改代码完毕后:

接下来就要生成差异包了。如图:

android笔记之 tinker初步集成_第9张图片

正式版就运行正式版的。

运行完毕后:

android笔记之 tinker初步集成_第10张图片

那个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卡根目录下这个文件已经消失了。

以上就是初步合成步骤,如果要更多还是要看官方文档。

另:自己搭建服务器,就可以控制什么时候下在差异包,差异包放哪个目录。这些就可以控制了。



你可能感兴趣的:(android个人笔记)