资源描述:
《Android热更新框架Tinker探索之旅》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Android热更新框架Tinker探索之旅现在比较流行的热修复框架的优缺点和特色,在Tinker的wiki下都可以看到,这里就不在赘述了,Tinker只用了这句话来展现自己的优势:Tinker已运行在微信的数亿Android设备上,那么为什么你不使用Tinker呢?Tinker分为gradle接入和命令行接入,但是我这种菜鸟玩不转命令行,所以只能照搬gradle接入Tinker了。但是我感觉,命令行算不上一种接入,仅仅是多了一种编译差分包的方式而已,当然,这仅仅是个人见解哈,至于我为什么这么说,大家往下看就知道
2、了。首先,在project的build.gradle文件里需要添加Tinker的插件依赖dependencies{classpath'com.android.tools.build:gradle:1.3.0'...//Tinkerclasspath"com.tencent.tinker:tinker-patch-gradle-plugin:1.7.7"}其次就是主module的build.gradle文件的配置,主要有下面几个地方1.引入Tinker依赖dependencies{//tinker必须要引入多dex
3、打包支持compile'com.android.support:multidex:1.0.1'//可选,用于注解生成application类provided("com.tencent.tinker:tinker-android-anno:1.7.7"//tinker依赖版本compile("com.tencent.tinker:tinker-android-lib:1.7.7")}2.tinker的一些配置//-------------------------tinkerconfigstart----------
4、---------------buildConfigField"String","TINKER_VERSION",""1.7.7""/***buildConfigcanchangeduringpatch!*wecanusethenewlyvaluewhenpatch*/buildConfigField"String","MESSAGE",""Iamthebaseapk""/***clientversionwouldupdatewithpatch*sowecangetthenewlygitversionea
5、sily!*/buildConfigField"String","TINKER_ID",""${getTinkerIdValue()}""buildConfigField"String","PLATFORM",""all""//-------------------------tinkerconfigend-------------------------3.编译差分包的开关和老版本文件位置确定defbakPath=file("${buildDir}/bakApk/")/***youcanuseassem
6、bleReleasetobuildyoubaseapk*usetinkerPatchRelease-POLD_APK=-PAPPLY_MAPPING=-PAPPLY_RESOURCE=tobuildpatch*addapkfromthebuild/bakApk*/ext{defoldPrefixFormat="app_beta1_${appVersionName}_${newDate().format("yyyy_MM_dd")}_%s_build${appVersionCode}_%s"defoldApkPat
7、h=String.format(oldPrefixFormat,"10_34_38","tinker.apk")defapplyMappingPath=String.format(oldPrefixFormat,"10_34_38","mapping.txt")defresourcePath=String.format(oldPrefixFormat,"10_34_38","R.txt")//forsomereason,youmaywanttoignoretinkerBuild,suchasinstantrund
8、ebugbuild?tinkerEnabled=true//fornormalbuild//oldapkfiletobuildpatchapktinkerOldApkPath="${bakPath}/${oldApkPath}"//proguardmappingfiletobuildpatchapktinkerApplyMappingPath="${bakPath}/${