Android Tinker 接入新手指南

记录一下我集成使用的过程,集成过程中有遇到一些问题,希望大家能绕过这些坑,首先我是按github上面的官方demo和文档进行集成,然后自己又重新创建了项目进行练习,后面我会给出自己的github项目地址

  1. github上tinker地址

  2. tinker接入指南地址

导入官方Demotinker-sample-android

集成

我这里直接使用的是他1.7.11版本,导入项目里面自带的tinker-sample-android到studio中。

初始化配置

首先我们需要在app/bulid.gradle中,设置tinkerId的值,很多人开始编译就报错,提示“tinkerId is not set!!!”,就是因为这个值没有设置。获取tinkerId走的

    def gitSha() {  
    return 'git rev-parse --short HEAD'.execute().text.trim()  
    }  

这个方法,也就是获取git最近一次commit的版本号,所以要是你的当前Project没有配置git,或者当前的Project还没有commit过,或者git没有加入到环境变量中,会获取不到该值。知道了原理,那解决方式就自己想了,我这里就直接写死,上面这个方法直接返回固定字符串。


之后,我们会看到Manifest.xml中,SampleApplication.Java这个类报红找不到。这个并不影响,因为到时候我们在编译的时候,tinker会为我们生成SampleApplication.java这个类,直接rebuild就好。

按官方的文档操做了一遍,使用步骤详解

Demo请参考tinker-sample-android, 它的使用方法如下:

1.调用assembleDebug编译,我们会将编译过的包保存在build/bakApk中。然后我们将它安装到手机,点击SHOW INFO按钮,可以看到补丁并没有加载。

Android Tinker 接入新手指南_第1张图片
20160714161956687.png

2.修改代码,例如将MainActivity中I am on patch onCreate的Log打开。然后我们需要修改build.gradle中的参数,将步骤一编译保存的安装包路径拷贝到tinkerPatch中的oldApk参数中。

Android Tinker 接入新手指南_第2张图片
20160714155011634.png

3.调用tinkerPatchDebug, 补丁包与相关日志会保存在/build/outputs/tinkerPatch/。然后我们将patch_signed_7zip.apk推送到手机的sdcard中。

 adb push ./app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk /storage/sdcard0/

4.点击LOAD PATCH按钮, 如果看到patch success, please restart process的toast,即可锁屏或者点击KILL SELF按钮

Android Tinker 接入新手指南_第3张图片
20160714154632287.png

5.我们可以看到的确出现了I am on patch onCreate日志,同时点击SHOW INFO按钮,显示补丁包的确已经加载成功了。

Android Tinker 接入新手指南_第4张图片
20160714162521240.png

自己练习Demo,编译Release版本tinker-my-test

debug版本的编译,和release版本的基本类似,在编译debug版本的时候我没有加signingConfigs里面keystore,buildTypes里面debug这些的配置,就可以编译apk和R文件了,但是编译release版本的时候,不能生成apk文件,所以有了第3步的那些配置,新建了一个keystore包,把debug.keystore和release.keystore放在下面

1.在项目的 build.gradle 中,添加 tinker-patch-gradle-plugin的依赖

    buildscript {
        dependencies {
            classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.11')
        }
    }

2.在app的 build.gradle中,添加如下配置

dependencies {
    //可选,用于生成application类 
    provided('com.tencent.tinker:tinker-android-anno:1.7.11')
    //tinker的核心库
    compile('com.tencent.tinker:tinker-android-lib:1.7.11') 
}
    ...
    ...
    //apply tinker插件
    apply plugin: 'com.tencent.tinker.patch'

3.在app的 build.gradle中,添加编译release版本的配置

android {
    signingConfigs {
        release {
            try {
                storeFile file("./keystore/release.keystore")
                storePassword "testres"
                keyAlias "testres"
                keyPassword "testres"
            } catch (ex) {
                throw new InvalidUserDataException(ex.toString())
            }
        }
        debug {
            storeFile file("./keystore/debug.keystore")
        }
    }

    buildTypes {
        release {
            minifyEnabled true //控制是否混淆的,生不生成mapping文件
            signingConfig signingConfigs.release //这句话影响能不能生成apk文件,之前没写这句,在bakApk下不能生成apk文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
            minifyEnabled false
            signingConfig signingConfigs.debug
        }
    }
}

4.先创建一个 SampleApplicationLike继承至 DefaultApplicationLike.

Android Tinker 接入新手指南_第5张图片
微信截图_20170621141604.png

5.先执行 assembleRelease生成一个基准文件包bakApk,包括apk文件,R文件,mapping文件(mapping文件 minifyEnabled true开启了混淆的有, minifyEnabled false没有开启的没该文件)

Android Tinker 接入新手指南_第6张图片
微信截图_20170621140943.png

6.修改代码,在 MainActivityonCreate()方法里面加了一个 Toastactivity_main里面把TextView的文字改了一下

Android Tinker 接入新手指南_第7张图片
MainActivity_20170621123958.png

Android Tinker 接入新手指南_第8张图片
activity_main_20170621124036.png

7.修改app下 build.gradle中的参数,将步骤3编译保存的安装包路径拷贝到tinkerPatch中的tinkerOldApkPath参数中。

Android Tinker 接入新手指南_第9张图片
app_gradle_20170621135121.png

8.调用tinkerPatchRelease, 补丁包与相关日志会保存在/build/outputs/tinkerPatch/。然后我们将patch_signed_7zip.apk推送到手机的sdcard中。

   adb push ./app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk /storage/sdcard0/

9.点击Load Patch按钮, 加载补丁文件,加载完成App会自动关闭,再重新App就可以效果了。

你可能感兴趣的:(Android Tinker 接入新手指南)