热更新不适用的场景以及注意事项(注意:发布的热更新包,如果没有停止发布,在下次调试时,如果没有更改版本号,可能不会对修改的内容起作用!!!!!)
观看前,保证有阿里云账号,没有的话,链接(阿里云注册)奉上,自行注册一个!!!
注册好之后,在阿里云控制台中搜索移动热修复
进入移动研发平台EMAS,点击添加产品,然后按照页面填写信息,保存,然后在产品页面下添加应用,需要你项目的包名
下载移动热修复的SDK,解压
注意:不推荐使用Android studio集成方式,有可能会和你的项目中的一些配置冲突。。。。建议使用eclipse集成方式!!!!
--------------------------正式集成步骤如下-------------------------
①、下载OneSDk.zip,解压出hotfix_core-release.aar文件后再解压这个aar文件
②、复制解压文件jni目录下的libsophix.so到自己的jni目录下, eclipse jni目录一般指的就是项目libs目录,复制全部的文件夹到你的app下面的lib下面就可以,如
③、复制alicloud-android-utdid-1.1.5.3.jar和alicloud-android-utils-1.1.5.jar文件到项目libs目录下
④、重命名classes.jar为sophix.jar并复制到项目libs目录下
⑤、AndroidManifest.xml中添加如下代码
<! – 网络权限 -->
<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"/>
application节点下添加如下代码
<service
android:name="com.taobao.sophix.aidl.DownloadService"
android:exported="true" >
<intent-filter>
<action android:name="com.taobao.hotfix.action" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="你的 App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="你的 Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="你的 RSA密钥" />
这三个值,在你的移动热修复控制台中建的应用中去找
⑥、混淆配置
#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/build/outputs/mapping/release路径下,移动到/app路径下
#修复后的项目使用,保证混淆结果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize
到此,SDK接入完成,剩余的就是配置代码
-------------------------------分割线-----------------------------------
创建一个新的Application,代码放在下面,需要自取
public class SophixStubApplication extends SophixApplication {
private final String TAG = "SophixStubApplication";
@Keep
@SophixEntry(App.class)//此处是你的Application,并注意把AndroidManifest.xml里面的换成新建的这个
static class RealApplicationStub {
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 如果需要使用MultiDex,需要在此处调用。
// MultiDex.install(this);
initSophix();
}
private void initSophix() {
String appVersion;
try {
appVersion = this.getPackageManager()
.getPackageInfo(this.getPackageName(), 0)
.versionName;
} catch (Exception e) {
appVersion = "1.0";
}
final SophixManager instance = SophixManager.getInstance();
instance.setContext(this)
.setAppVersion(appVersion)
.setSecretMetaData(null, null, null)
.setEnableDebug(true)
.setEnableFullLog()
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
Log.i(TAG, "sophix load patch success!");
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 如果需要在后台重启,建议此处用SharePreference保存状态。
Log.i(TAG, "sophix preload patch success. restart app to make effect.");
}
}
}).initialize();
}
}
//此代码放在你的Application中的onCreate()方法里面,
//不可放在attachBaseContext 中,否则无网络权限
SophixManager.getInstance().queryAndLoadNewPatch();
至此,代码配置完成,接下来就是生成补丁以及发布补丁
生成补丁
1.1 下载打包工具
patch补丁包生成需要使用到打补丁工具SophixPatchTool, 如还未下载打包工具,请前往下载Android打包工具。
注意:一定要点设置,配置好你的签名文件的信息
配置完成之后,点击go! 等待就可以了,完成之后,会收到这样一个jar包
接下来就是上传补丁
打开热修复平台,新建一个版本,这个版本一定是和你现在发布的版本相同!!!!
然后点击下面的上传补丁,上传你生成好的补丁,然后点击后面的发布,进入如下页面
鼠标移动到框红处,使用此工具下载扫码 调试工具下载地址
注意:应用链接的时,必须要打开你要连接的应用,要不然会连接失败!!!!
完成之后,点击下面的新建发布,发布类型选择全量发布!此时,用户再次打开App的时候,就会启动热更新完成更新!
发布补丁后,什么时候可以在app上生效?
只有调用queryAndLoadNewPatch才会请求新的补丁。
所以可以在app运行过程中定期调用queryAndLoadNewPatch,以提早查询新补丁并进行预加载,这样可以减少重启次数。
所以加载新补丁的时机取决于queryAndLoadNewPatch。