Android studio集成HotFix

来源:互联网 发布:手机定位软件破解版 编辑:程序博客网 时间:2024/05/18 10:52

直接进入主题,记录一下过程遇到的坑。以后谨记。
首先,接入流程&准备工作看看官方文档。

·注册阿里百川开发者
·创建百川应用
·申请产品权限
·集成SDK
·生成补丁
·发布补丁

集成SDK

就从集成sdk说起,我按照顺序,查看 Android接入说明,我把SDK,Demo,打包工具,调试工具,一个个的都下载到本地。然后,在项目里添加依赖的时候问题来了。

添加依赖

方式一:打开项目找到app的build.gradle文件
添加maven仓库地址,

repositories {        maven {            url "http://repo.baichuan-android.taobao.com/content/groups/public/"        }}

添加gradle依赖

dependencies {    compile 'com.alibaba.sdk.android.plugins:alisdk-hotfix:1.2.0'    compile 'com.alibaba.sdk.android.plugins.jar:alisdk-utdid:0.0.1'}

这里切记,在这个文件里可能有很多个repositories和dependencies,不要放错了位置,不然会失败。是在根级别,和android是一个级别的。
效果大概是

android {    compileSdkVersion 23    buildToolsVersion '23.0.3'    defaultConfig {        applicationId "com.eqingdan"        minSdkVersion 14        targetSdkVersion 22    }}repositories {        maven {            url "http://repo.baichuan-android.taobao.com/content/groups/public/"        }}dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    compile 'com.alibaba.sdk.android.plugins:alisdk-hotfix:1.2.0'    compile 'com.alibaba.sdk.android.plugins.jar:alisdk-utdid:0.0.1'}    

OK,这样可以编译了,但是我的AS编译了半个小时还是没有结果,我试了一些方法,未果。还好有第二种方式,本地依赖。
复制下载SDK文件夹下的.aar和.jar到libs目录下,
在build.gradle文件中添加如下配置:
添加本地libs地址,以便可以找到放置在libs中的aar文件:

repositories {    flatDir {        dirs 'libs'    }}

添加本地依赖:

dependencies {    compile(name:'alisdk-hotfix-1.2.0', ext:'aar')    //如果项目中已经依赖过alisdk-utdid,则不需要再次依赖    compile files('libs/alisdk-utdid-0.0.1.jar')}

OK,一切顺利,编译没问题。

特别留意:不管是本地依赖还是远程仓库依赖方式都务必做如下检查! 否则将可能导致补丁加载失败

请检查当前项目结构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下的so文件, 所以如果当前项目目录下有armeabi-v7a, arm64-v8a目录, 但是没有复制对应的so文件进去, 那么在相应cpu架构的机型下加载补丁就会报找不到so文件的异常。

接下来,就比较容易了,

配置AndroidManifest文件

在application节点下添加如下配置:

<meta-dataandroid:name="com.taobao.android.hotfix.APPSECRET"android:value="your-app-secret" /><meta-dataandroid:name="com.taobao.android.hotfix.RSASECRET"android:value="your-rsa-secret" />
<! -- 网络权限 --><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.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

HotFix初始化

在Application的onCreate()中进行HotFix的初始化。

HotFixManager.getInstance().initialize(application,appVersion,appId, newPatchListener);

参数说明:

application: Application上下文context
appVersion: 应用的版本号
appId: 百川上应用的唯一标识。
newPatchListener: 新patch的回调接口,若不执行任何动作,可为null
NewPatchListener:如果客户端已经有一个patch包在运行,则下一个patch不会立即生效,需要重启应用生效。所以此时需要进行处理,比如提醒用户重启应用或者开发者进行后台手动杀进程重启等操作。

使用方法:

NewPatchListener mNewPatchListener = new NewPatchListener() {        @Override        public void handlePatch(int patchVersion) {            // TODO do something            Toast.makeText(MainApplication.this, "请重启应用更新补丁", Toast.LENGTH_SHORT).show();        }    };

请求patch

请求最新的patch,需要在初始化以后调用。

HotFixManager.getInstance().queryNewHotPatch();

Application中代码如下:
这里写图片描述

混淆配置

应用进行混淆打包时,应加入如下HotFix的混淆配置:

#HotFix-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 *;}

生成patch补丁

这里就不copy官方的文档了,只是记录一下我跳进去的坑。
查看java的版本不用切换路径可以查看,但是你要查看最新的使用说明,必须要切换到文件所在的目录下。你的打包工具下载的位置(文件:alisdk-hotfix-android-pack-tools-1.0.3.jar)。
查看帮助说明

java -jar alisdk-hotfix-android-pack-tools-1.0.3.jar help

生成PATCH

java -jar alisdk-hotfix-android-pack-tools-1.0.3.jar patch srcAPK fixedAPK workingPatch signInfoFilePath

参数说明:

srcAPK:填写本地的原始APK(有问题的APK)的本地路径,如果文件找不到会报错
fixedAPK:已经修复过该问题的APK
workingPatch:输出patch的绝对路径,该目录是工作路径不要和apk和任何文件设置为同一个目录
signInfoFilePath:本地的签名配置属性文件,不输入或者不正确则不做签名,使用绝对路径
signInfo签名配置文件说明:
本工具的签名使用需要先写一个签名配置文件,格式如下:

请在任意路径下放置: xxxxxx.keyinfo,该文件格式是属性文件:
(我是在项目的根目录下新建一个File,sign.keyinfo)

store.file=/绝对路径/* * *.jks
store.password=* * *
key.alias=* * *
key.password=* * *

注意:store.file=绝对路径,如果更换路径需要手动更改。还有就是,如果使用Windows平台,store.file路径需要写双反斜杠(例:E:\work\patch\key.store)

···[Baichuan Log]:Start to sign patch.[Baichuan Log]:Sign Error: KeyStore was not found. Skip java-sign step.···

如果一切顺利,现在运行命令就可以得到patch了。

java -jar alisdk-hotfix-android-pack-tools-1.0.3.jar patch /srcAPK绝对路径/src.apk /fixedAPK绝对路径/fixed.apk /输出patch的绝对路径/ /绝对路径/sign.keyinfo

最后打印出日志如下,表示成功了。

·······[Baichuan Log]:Unsigned patch file is: /{输出patch的绝对路径}/baichuan-hotfix-patch.jar[Baichuan Log]:Start to sign patch.[Baichuan Log]:KEYSTORE PATH:/{..}/{***}.jks[Baichuan Log]:Patch file is: /{输出patch的绝对路径}/baichuan-hotfix-patch.jar[Baichuan Log]:Finish build Alibaba Baichuan HotFix Patch.

接下来就是调试的部分了。

大功告成,欢迎指正批评!O(∩_∩)O谢谢!

1 0
原创粉丝点击