阿里SopHix热修复框架操作实践基础步骤
来源:互联网 发布:股票行情分析软件 编辑:程序博客网 时间:2024/05/17 03:10
- 首先第一步去阿里云申请注册账户,接下来是管理后台使用说明,链接如下:
https://help.aliyun.com/document_detail/51434.html?spm=5176.doc53287.6.552.vZxNDm#Step5 发布补丁 列表内容
在android studio 上创建一个app项目工程,从管理后台获取AppId,和AppSecret以及RSA密钥。
上面三个参数需要配置在application节点下面:
<meta-data android:name="com.taobao.android.hotfix.IDSECRET" android:value="AppId" /> <meta-data android:name="com.taobao.android.hotfix.APPSECRET" android:value="AppSecret" /> <meta-data android:name="com.taobao.android.hotfix.RSASECRET" android:value="RSA密钥" />
列表内容
. 在项目对应的build.gradle下添加对应的库
maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
在模块对应的build.gradle下添加
compile 'com.aliyun.ams:alicloud-android-hotfix:3.1.7'
- 申请对应的权限
<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以上的手机,需要动态的获取。如果没有相关的权限,启动app是检查不到新的补丁包的。我用的手华为的手机,安装app后,日志总是输出“there is not update”。原因是我没有读取内存卡的权限没有申请成功。
- 创建MyApplication
package xxq.com.andfixdemo;import android.app.Application;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.os.Environment;import android.util.Log;import android.widget.Toast;import com.alipay.euler.andfix.patch.PatchManager;import com.taobao.sophix.PatchStatus;import com.taobao.sophix.SophixManager;import com.taobao.sophix.listener.PatchLoadStatusListener;import java.io.File;import java.io.IOException;/** * Created by Administrator on 2017/12/14 0014. */public class MyApplication extends Application { private static final String TAG = "MyApplication"; @Override public void onCreate() { super.onCreate(); init(); } private void init() { SophixManager.getInstance().setContext(this) .setAppVersion(getAppVersionName(this)) .setAesKey(null) .setEnableDebug(true) .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, "onLoad: 成功"); } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) { // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启; // 建议: 用户可以监听进入后台事件, 然后应用自杀 Log.i(TAG, "onLoad: 生效需要重启"); restartApp(); } else if (code == PatchStatus.CODE_LOAD_FAIL) { // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载 // SophixManager.getInstance().cleanPatches(); } else { // 其它错误信息, 查看PatchStatus类说明 Log.i(TAG, "onLoad: 其它错误信息"+code); } } }).initialize();// SophixManager.getInstance().queryAndLoadNewPatch(); } /** * 返回当前程序版本名 */ public static String getAppVersionName(Context context) { String versionName = ""; try { // ---get the package info--- PackageManager pm = context.getPackageManager(); PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0); versionName = pi.versionName; //versioncode = pi.versionCode; if (versionName == null || versionName.length() <= 0) { return ""; } } catch (Exception e) { Log.e("VersionInfo", "Exception", e); } return versionName; } public void restartApp(){ RestartAPPTool.restartAPP(this,2000); }}
在activity oncreate()中添加
SophixManager.getInstance().queryAndLoadNewPatch();
整体代码如下 :
package xxq.com.andfixdemo;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.taobao.sophix.SophixManager;import java.io.File;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SophixManager.getInstance().queryAndLoadNewPatch(); tv = (TextView) findViewById(R.id.textview); tv.setOnClickListener(this); } public void onStart(View V){ tv.setText("我是原始的app");// tv.setText("我是热修复的app"); } @Override public void onClick(View v) { Toast.makeText(MainActivity.this, tv.getText(), Toast.LENGTH_SHORT).show(); }}
关于SopHix最终如何使用可以参考官网文档
以上内容参考于:http://www.jianshu.com/p/42c436f1b207
感谢杨hai
阅读全文
0 0
- 阿里SopHix热修复框架操作实践基础步骤
- 阿里热修复框架Sophix
- 阿里SopHix热修复框架接入
- Sophix热修复实践
- 阿里热修复方案Sophix
- 阿里热修复之Sophix
- 阿里热修复Sophix 3.0
- 阿里最新热修复框架Sophix集成详解
- 阿里热修复——sophix
- 阿里云热修复sophix详解
- android热修复-阿里Hotfix最新版(Sophix)
- 热修复的两个框架Bugly+Sophix
- sophix热修复笔记
- 热修复技术 Sophix
- 【笔记】阿里非侵入式热修复方案Sophix
- 阿里Sophix热修复的简单集成和使用
- 阿里云热修复技术Sophix的快速接入
- Sophix-阿里第三代非侵入式热修复
- Servlet总结-ServletConfig、ServletContext
- spring-data-jpa总结
- hashmap工作原理
- 转换
- Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2
- 阿里SopHix热修复框架操作实践基础步骤
- 会嵌入式的你还在担心什么?
- 数组与集合的区别
- 如何设置脑图软件Mindmaster背景主题
- 28 迭代器适配器(学自Boolean)
- 最小费用最大流的另类算法
- spring-boot注解
- windows平台远程访问HDFS文件系统
- Win10下eclipse与tomcat和Maven的集成与配置