转载请注明链接:https://blog.csdn.net/feather_wch/article/details/87903926

Android 热修复框架: Sophix基本使用

版本号:2019/2/24-15:38


文章目录

  • Android 热修复框架: Sophix基本使用
    • @[toc]
    • 框架集成
      • 添加依赖
      • 添加SophixStubApplication
      • 修改AndroidManifest
        • 替换原Application为SophixStubApplication
        • 添加必备权限
        • 添加Sophix的APP ID、APP Secret、RSA密钥
          • 注册阿里云开发者
        • 完整 AndroidManifest.xml
      • 混淆配置
    • 基本使用
      • 查询并加载新补丁: queryAndLoadNewPatch
      • SophixPatchTool生成补丁: sophix-patch.jar
      • 生成并且下发补丁
    • 问题汇总
    • 参考资料

框架集成

添加依赖

1、build.gradle文件中添加热修复相关的依赖

根目录: build.gradle

buildscript {repositories {maven {url 'http://maven.aliyun.com/nexus/content/repositories/releases/'}}
}allprojects {repositories {maven {url 'http://maven.aliyun.com/nexus/content/repositories/releases/'}}
}

module app: build.gradle

dependencies {// Sophix-阿里热修复api 'com.aliyun.ams:alicloud-android-hotfix:3.2.8'
}
// implementation、compile都可以,看实际情况。

添加SophixStubApplication

2、添加热修复需要的SophixStubApplication,不要添加任何内容,除非有特殊需要。

@SophixEntry(BaseApplication.class)其中的Application就是原来自定义的Application(实现业务逻辑)。SophixStubApplication中绝对不要增加任何逻辑代码。

package com.hao.lib_base.base;import android.content.Context;
import android.util.Log;import com.taobao.sophix.PatchStatus;
import com.taobao.sophix.SophixApplication;
import com.taobao.sophix.SophixEntry;
import com.taobao.sophix.SophixManager;
import com.taobao.sophix.listener.PatchLoadStatusListener;import androidx.annotation.Keep;/*** Sophix入口类,专门用于初始化Sophix,不应包含任何业务逻辑。* 此类必须继承自SophixApplication,onCreate方法不需要实现。* 此类不应与项目中的其他类有任何互相调用的逻辑,必须完全做到隔离。* AndroidManifest中设置application为此类,而SophixEntry中设为原先Application类。* 注意原先Application里不需要再重复初始化Sophix,并且需要避免混淆原先Application类。* 如有其它自定义改造,请咨询官方后妥善处理。*/
public class SophixStubApplication extends SophixApplication {private final String TAG = "SophixStubApplication";// 此处SophixEntry应指定真正的Application,并且保证RealApplicationStub类名不被混淆。@Keep@SophixEntry(BaseApplication.class)static class RealApplicationStub {}@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);
//         如果需要使用MultiDex,需要在此处调用。
//         MultiDex.install(this);initSophix();}private void initSophix() {String appVersion = "0.0.0";try {appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;} catch (Exception e) {}final SophixManager instance = SophixManager.getInstance();instance.setContext(this).setAppVersion(appVersion).setSecretMetaData(null, null, null).setEnableDebug(true).setEnableFullLog().setPatchLoadStatusStub(new PatchLoadStatusListener() {@Overridepublic 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();}
}

修改AndroidManifest

替换原Application为SophixStubApplication

3、替换原Application为SophixStubApplication

  1. 系统会先加载SophixStubApplication,内部再加载我们自定义的Application
  2. 要避免原Application被混淆,不然找不到!看后面的混淆部分。
    <applicationandroid:name="xxx.SophixStubApplication">// xxx</application>

添加必备权限

4、添加必备权限(高版本注意动态权限申请需要自己处理)

    <!-- 网络权限 --><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"/>

添加Sophix的APP ID、APP Secret、RSA密钥

5、在application中添加meta-data

    <applicationandroid:name="com.hao.lib_base.base.SophixStubApplication"xxx><meta-dataandroid:name="com.taobao.android.hotfix.IDSECRET"android:value="2568......" /><meta-dataandroid:name="com.taobao.android.hotfix.APPSECRET"android:value="b8c8d31de746b9a......" /><meta-dataandroid:name="com.taobao.android.hotfix.RSASECRET"android:value="MIIEvQIBADANBgk......" /></application>
注册阿里云开发者

6、要使用Sophix需要登录阿里云开发平台,开通热修复的功能。

  1. 阿里云移动热修复官网
  2. 具体如何开通相关应用,自行百度。

完整 AndroidManifest.xml

7、修改AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.hao.iday"><!-- 网络权限 --><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"/><applicationandroid:name="com.hao.lib_base.base.SophixStubApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"tools:ignore="GoogleAppIndexingWarning"><activityandroid:name=".MainActivity"android:launchMode="singleTask"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><meta-dataandroid:name="com.taobao.android.hotfix.IDSECRET"android:value="25681463" /><meta-dataandroid:name="com.taobao.android.hotfix.APPSECRET"android:value="b8c8d31de746b9a097a4027c093c07e7" /><meta-dataandroid:name="com.taobao.android.hotfix.RSASECRET"android:value="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCBtW8OWQ/sF3TCEYOgMkFa7UaL4XUJvDWZdEB3Y+jNT5xJyn7n6QJ9oTEelqUxRmH9D+O//ZLvMNOYHnYaXnU+UuNcoGePLixluzl4ShEfHLtXHylt95q2Xa4KDfiTpZUcp93d3iLDEODMxHHYn2eirDPtMGVHvpkjngtIuSmgEThCUq0eBvRy9R6RIIqS1+dkG9ekTp11WZYVfmJgbCMnaDkl4H7Vro5bsPF8N06ZbBfAxvvZcTKQ1Vse8iRJ2Iytzseb7scuunjYqZtIGvh7Fxs9ZAEZn9XyrK0vu5JAwUkvHwpMW/qUux59zK89Tbza/+aFYX8nB7XKsZQdmB/xAgMBAAECggEAATEDdiRHSynj/qxegygzBXzMexh1FMPP0jsJJI+cYdZrXxonFEZFqZXDd752gf9dgw+UTf0sTloqd2lAOHnJpero/77RdLU93ylbG8nCYoDHD8PPg50UpLwzjxAVynVo6zx3g0Q5GYWcKwVa7lx4fTwLthANvhz4FyWqgN6CjV/XwxBeAxVvylD0NM7QDtBFrT3vYy09wV3cU4yV+8SW1i4ZUsilbKe1W+3nwRcD9hblxeoFtzC+3Lg39w3aROV+pm6KuZvvjfXqWivK4R3Sl+W+CxF6FvUw7QLm4PbRn1P2QQONCNlXRDn00NSQotswURkhGa2UytoMIMir8I0MAQKBgQDESaornNPkQQahsR2vWl+89hKyM9UixGgB4vCeZACrta7IkrkhL/GMqRYYiST0VjkU+uqfrsZ3jlPkJ3n5YfFCq1a0bw0JJfokaX+v6fVhd5Am71VfG6WGfHlmbMaW9TP8rbgqv7L8YzaWxzMOyZz/wBWAe9Q60c9KV/GkMqpcEQKBgQCpKsheBGkfm+1qQ+/G97DwzXTkVCQId0XopdVn+1NlQbLYz41WSkDT7MBnaPawiyBbuuQsBeY+NsbqF92qKX4FJoiXyfFoLYxQ/tYftkzWEdfG4j94IgEp9CW3FZV59PpXJaGJeqPXQSg7rzV+rZlGw4zCZfdhENLLM3kJw2Ll4QKBgQCeC/ZiEW+njRgq3zLYu3r06mnZZNTLnrtkMXevATRtDegDBejcqP7kVE0/SkYgGsDxfKuoEZEqOMahoYub2lnpZY510Cj94b9MzEmMumPiq+O9Bd6GqvsXk2goqZMpf5vxa2sruJkEkVomA5S/5mRspRxrDMmw5rjy0mb13/m+EQKBgHqb85WRBNBQJ4d5rfQ72hbuEubaxTMNn7G7YC15Tzx4nbPe2sXME6iGU/2fag0TCWTy1CXEMNiuwwUwPwzx/dCl2SKKz1l+idC6o19gtdgCHq6blPzxSH6r4hoMnsZB9J/tOmN2bAG7y/lWSCOEly9e1EqhtOa5Vs7Ig9W7s5aBAoGAL/yzBGGzmM9Mya3iEqID3LVbcwFUA0xzvOyTeUMAlLdwmGdmAckR/Z6/+1dnGBtbQU1MkkD4K3MwIpBY6WCPy0hwgh/OmcGfxIa6a5X97CFn/0j1ntSl5WSvPXcdRC7+G5S2hi/accATWU0sp13Jx8ncb0gtEWedmUVf69Oa4/0=" /></application></manifest>

混淆配置

8、进行混淆配置,文件是proguard-rules

#基线包使用,生成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.**{*;}
-dontwarn com.alibaba.sdk.android.utils.**
#防止inline
-dontoptimize-keepclassmembers class com.my.pkg.MyRealApplication {public <init>();
}
# 如果不使用android.support.annotation.Keep则需加上此行
# -keep class com.my.pkg.SophixStubApplication$RealApplicationStub

基本使用

查询并加载新补丁: queryAndLoadNewPatch

1、在BaseApplication(自定义的)中进行补丁的获取和更新

public class BaseApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 1. 查询并且加载补丁。queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中。SophixManager.getInstance().queryAndLoadNewPatch();}
}

SophixPatchTool生成补丁: sophix-patch.jar

2、使用阿里提供的SophixPatchTool工具,通过新旧apk差异生成补丁包。

  1. 具体教程可以看参考资料的 1和2, Sophix-阿里第三代非侵入式热修复
  2. SophixPatchTool工具在参考资料: 3-Windows版本打包工具地址

生成并且下发补丁

3、在阿里云开发者平台的移动热修复-管理控制台中可以

  1. 移动热修复->补丁管理->上传补丁->发布

问题汇总

参考资料

  1. Sophix官方文档: 移动热修复-快速开始
  2. Sophix-阿里第三代非侵入式热修复
  3. Windows版本打包工具地址
  4. 调试工具地址

Android 热修复框架: Sophix基本使用相关推荐

  1. android 热修复 框架,十分钟教会你使用安卓热修复框架AndFix

    腾讯最近开发出一个Tinker,阿里也有一个Dexposed框架,当然还有一个就是今天的主角热修复框架AndFix.接下来,我会从它的概念.原理.使用方法等为你详细介绍. 1.什么是AndFix? A ...

  2. 热修复系列——Android热修复技术进阶篇

    目录 1 前言 2 热修复技术 2.1 Dexposed 2.2 AndFix 2.3 QZone 2.4 Tinker 2.6 epic 2.7 YAHFA 2.8 FastHook 2.9 美团R ...

  3. [读书笔记] 深入探索Android热修复技术原理 (手淘技术团队)

    热修复技术介绍 探索之路 最开始,手淘是基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术--Dexposed. 但该方案对于底层Da ...

  4. 热修复框架AndFix【源码阅读】

    前言 AndFix是阿里巴巴开源的Android热修复框架.其基本原理是利用JNI来实现方法的替换,以实现Android APP的热修复,即无需发版即可临时修复在线BUG. 热修复技术有很多种,And ...

  5. Android 热修复 HotFix 混淆apk生成patch包方案

    android 热修复框架目前了解的有qq空间分包方案的HotFix 和Nuwa,还有阿里开源的AndFix和Dexposed. https://github.com/dodola/HotFix ht ...

  6. android revre view,Android热修复之微信Tinker使用初探

    前几天,万众期待的微信团队的Android热修复框架tinker终于在GitHub上开源了.java 今天拿下来集成使用了一下,发现md上对集成使用的过程介绍的比较精简(后来发现wiki上面却是很详细 ...

  7. 阿里SopHix热修复框架

    2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner ...

  8. Android—常用热修复框架

    前言 热修复即<打补丁>,当一个app上线后,如果发现重大的bug,需要紧急修复.常规的做法是修复bug,然后重新打包,再上线到各个渠道.这种方式的成本高,效率低. 于是热修复技术应运而生 ...

  9. Android之热修复框架Nuwa

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/70284239 本文出自:[顾林海的博客] ##前言 当热修复框架还没出 ...

  10. 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )

    文章目录 一. 热修复框架简介 1.类替换 2.so 替换 3.资源替换 4.全平台支持 5.生效时间 6.性能损耗 7.总结 二. 将 Java 字节码文件打包到 Dex 文件 一. 热修复框架简介 ...

最新文章

  1. 在linux下tomcat报javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException: PKIX
  2. java从数组中删除元素(数组的缩容)
  3. Qt工作笔记-让界面飞一会(让界面旋转出来)
  4. AMESim软件建模
  5. 北斗三号频点_解码北斗三号:和前两代卫星相比,它有何不同?
  6. Java之常见异常 整理集合
  7. 爆锤数据结构(期末复习笔记)
  8. java设计模式(1)
  9. 45个免费LOGO在线制作网站
  10. 冰镇西瓜文案:冰镇西瓜水果文案大全集,水果类冰镇西瓜推销文案
  11. hls简述(HTTP live Streaming)
  12. 【Xilinx】Spartan 7上手指南(ARTY S7开发板)
  13. 数据,模型,算法共同决定深度学习模型效果
  14. 【基础知识】~ LUT、CLB、面积/速度问题
  15. oracle dbms advisor,通过shell定制dbms_advisor.quick_tune
  16. 商用图片素材,高清无水印
  17. 如何在ubuntu14.04中安装IE8
  18. 【计算机网络】知识梳理(六)应用层
  19. Dan Boneh密码学-01.绪论
  20. 2021-11-14剑指OfferII014.字符串中的变位词

热门文章

  1. 海康大华ie插件开发
  2. 北京交通大学2020计算机考研科目,2020北京交通大学软件工程考研初试科目.pdf
  3. ecshop首页调用团购信息产品购买人数
  4. java怎么解析json_基于java解析JSON的三种方式详解
  5. c++ - 虚函数表
  6. C++ | 虚函数表内存布局
  7. 关于DBSCAN聚类算法
  8. 如何下载无水印的抖音视频?
  9. 2021年中国发改委和财政部PPP项目整体现状分析,城市基础建设仍是重中之重「图」
  10. 2022年信息安全工程师考试知识点:网络安全需求分析与基本设计