最近自己公司的项目打算做热更新,因为有一个很小的bug处理的时候居然一周发了三个新版本,所以就决定做热更新来避免这种尴尬!首先允许我偷偷地开心一下,因为ios的热更新被苹果和谐了,这一点上终于不用再跟ios同步了,虽然阿里百川的hotfix目前还有很多的限制,但是毕竟是阿里出的方便大家的,所以反复考虑后选择了这个,但是真正做起来发现坑还是很多!
好了废话不多说了,注册开发者,申请使用Hotfix这些步骤我就不多说了,相信做过集成的人都知道怎么做,接下来我就扒一扒他的快速集成指南!
最新的Hotfix版本已经更新到2.0,支持更强大,下面先上一个图,配置大同小异!
- 首先进入app的build.gradle,repositories里面加入远程maven仓库地址
maven {
url "http://repo.baichuan-android.taobao.com/content/groups/public/"
}
阿里的集成文档的后面加了下面这句话,个人第一次看的时候表示很不解
注意: 1.4.0版本的仓库地址已经发生了变更, 请更新到上述百川最新的仓库地址
也不知道他的具体意思是什么,不要笑我,我不信你们看了不会多想,其实就是把上面代码区的拷出来就好啦!
- 然后在app的gradle里面添加依赖!
dependencies {
compile 'com.taobao.android:alisdk-hotfix:1.4.0'
}
假如你用了阿里的其他产品,比如Umeng,变异的时候会报错,说utdid重复,所以此时进行如下处理即可, 关闭传递性依赖:(官方解释说,utdid实际上是为设备生成唯一deviceid的一个基础类库)
compile ('com.taobao.android:alisdk-hotfix:1.4.0') {
transitive = false
}
好了接下来我们这样做,然后来编译一下试试!
基本不会出现下载不到的情况,但是假如下载失败了怎么办?不要慌,还可以做本地依赖
- 本地依赖第一步,点击下面的链接
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.oRRsfg&treeId=234&articleId=105517&docType=1
会跳转到如下界面:
然后做如下配置:
repositories {
...
flatDir {
dirs 'libs'
}
}
dependencies {
compile files('libs/utdid4all-1.1.5.3_proguard.jar')
compile(name:'alisdk-hotfix-1.4.0', ext:'aar')
}
注意:编译期间报utdid重复, 去掉compile files('libs/utdid4all-1.1.5.3_proguard.jar')依赖即可(上面的repositories 中的flatDir 指的是当.aar文件在本地的时候指向的文件夹,一般放在libs里面,下面的compile(name:'alisdk-hotfix-1.4.0', ext:'aar')就是本地依赖的核心代码)
<h4>注:因为我是新手,对eclipse差不多已经忘完了,此处就只写studio的配置!</h4>
- 接下来就是权限配置了!相信不少人已经被6.0权限恶心到了,不是因为难写,是因为写了以后面对千奇百怪的手机厂商适配起来很是头疼,比如我就碰到过小米对umeng有三个权限,即使你写了也不会给用户弹窗,你判断里面他是默认给了,但是实际要使用的时候他其实是没有给的,这个问题到现在还没有一个好的解决方法!有好的解决方法的可以指导一下小弟!
废话不多说,上代码!
<! -- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<! -- 外部存储读权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
其中读外部存储的权限基本上只有在原生6.0里面才会给提示,大部分手机厂商都是默认给了的,但是google规定的这个也属于危险权限,所以大家还是手动申请一下的好,不会的请自行查询,或者下载阿里百川的demo,demo的MainActivity里面写的有.
- 配置AndroidManifest文件,application节点加入以下三个mete-data
<meta-data
android:name="com.taobao.android.hotfix.APPKEY"
android:value="appkey" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="appsecret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="apprsa" />
第一个value里面放的是你的appKey,第二个放的是你的appSecret,第三个放的是你的appRsa,这些的获取方式就不做赘述了,自己申请过的肯定知道,不知道的就自己去申请一个好好看看试试!算了,还是附上阿里的链接吧!(获取app_secret以及app_rsa的方法)
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.oRRsfg&treeId=234&articleId=105459&docType=1#s1
- 混淆配置(因为官方的混淆假如更新版本的话有可能是会有所改变的,所以建议大家到官网或者hotfix的github项目里面查询最新的混淆规则)
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class com.alipay.euler.andfix.**{
*;
}
-keep class com.taobao.hotfix.aidl.**{*;}
-keep class com.ta.utdid2.device.**{*;}
-keep class com.taobao.hotfix.HotFixManager{
public *;
}
- 最后特别声明!!!!!!
不管是android studio/eclipse集成方式都务必做如下检查! 否则将抛UnsatisfiedLinkError异常导致补丁加载失败
检查当前项目结构jniLibs中是否有armeabi-v7a, arm64-v8a目录, 如果有: 请复制下载SDK(SDK下载&版本更新记录里“SDK”项下载下来, 然后解压)文件夹中armeabi-v7a/arm64-v8a目录下对应的so文件到对应的文件夹下面. 如果没有armeabi-v7a/arm64-v8a目录, 则不需要做这个处理。
PS:hotfix这样处理的目的: 减少jar包大小进而减少apk大小. 所以alisdk-hotfix-**.aar中只有armeabi下的libandfix.so文件, 所以如果当前项目目录下有armeabi-v7a/arm64-v8a目录, 但是没有复制对应的libandfix.so文件进去, 那么在相应cpu架构的机型下加载libandfix.so就会报找不到so文件的异常(UnsatisfiedLinkError)
如果做了上述处理仍然发现UnsatisfiedLinkError异常, 那么请确保是否是打包引起的问题, 解压apk, 看libs下armeabi-v7a/arm64-v8a目录是否有对应的libandfix.so文件
本篇只讲基础配置,具体的集成以及可能会出现的问题,后面会分两篇慢慢写,觉得有用的可以关注我,谢谢观看!辛苦啦......
网友评论