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按钮,可以看到补丁并没有加载。

20160714161956687.png

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

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按钮

20160714154632287.png

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

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.

微信截图_20170621141604.png

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

微信截图_20170621140943.png

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

MainActivity_20170621123958.png

activity_main_20170621124036.png

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

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就可以效果了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,048评论 25 707
  • Tinker使用 前言 写在前面的话,在上家公司一直在主导组件框架的开发,所以对Android领域组件化,热更新的...
    徐正峰阅读 1,884评论 6 6
  • Tinker介绍 Tinker是微信团队开源的Android热修复工具,支持dex, library和resour...
    HolenZhou阅读 4,127评论 4 15
  • 他们第一次见面是在初秋,那年她五岁,他四岁。于是,她说,你要叫我姐姐。他从未这样称呼,如果她没有记错。他们当时是一...
    九月衡生阅读 383评论 0 1
  • 回忆童年,我总能发现一幅平凡而又温馨的画面:两个满脸稚气的小孩子围坐在一个露出淡淡微笑的男人面前,痴痴地听着他讲故...
    允诺亿笙阅读 177评论 0 0