Tencent /tinker
Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
★ 17,662⑂ 3,335
17,662
stars
+0+5+8
3,335
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
Tinker
中文说明
Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstalling apk.
!tinker.png
Getting started
Add tinker-gradle-plugin as a dependency in your main build.gradle in the root of your project:
gradle
buildscript {
dependencies {
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.9.1')
}
}
Then you need to "apply" the plugin and add dependencies by adding the following lines to your app/build.gradle.
gradle
dependencies {
//optional, help to generate the final application
provided('com.tencent.tinker:tinker-android-anno:1.9.1')
//tinker's main Android lib
compile('com.tencent.tinker:tinker-android-lib:1.9.1')
}
...
...
apply plugin: 'com.tencent.tinker.patch'
If your app has a class that subclasses android.app.Application, then you need to modify that class, and move all its implements to SampleApplicationLike rather than Application:
java
-public class YourApplication extends Application {
+public class SampleApplicationLike extends DefaultApplicationLike {
Now you should change your Application class, make it a subclass of TinkerApplication. As you can see from its API, it is an abstract class that does not have a default constructor, so you must define a no-arg constructor:
java
public class SampleApplication extends TinkerApplication {
public SampleApplication() {
super(
//tinkerFlags, which types is supported
//dex only, library only, all support
ShareConstants.TINKER_ENABLE_ALL,
// This is passed as a string so the shell application does not
// have a binary dependency on your ApplicationLifeCycle class.
"tinker.sample.android.app.SampleApplicationLike");
}
}
Use tinker-android-anno to generate your Application is recommended, you just need to add an annotation for your SampleApplicationLike class
java
@DefaultLifeCycle(
application = "tinker.sample.android.app.SampleApplication", //application name to generate
flags = ShareConstants.TINKER_ENABLE_ALL) //tinkerFlags above
public class SampleApplicationLike extends DefaultApplicationLike
How to install tinker? learn more at the sample SampleApplicationLike.
For proguard, we have already made the proguard config automatic, and tinker will also generate the multiDex keep proguard file for you.
For more tinker configurations, learn more at the sample app/build.gradle.
Ark Support
How to run tinker on the Ark?
building patch
Just use the following command:
buildconfig
bash build_patch_dexdiff.sh old=xxx new=xxx
old indicates the absolute path of android apk(not compiled by Ark) with bugs
new indicates the absolute path of android apk(not compiled by Ark) with fixing
The patch file is packaged in APK.
compiling in Ark
TODO
At present it's compiled by Ark compiler team. The output patch is still packaged in APK format without signature.
packaging the patch