編輯:關於Android編程
阿裡巴巴開源項目,地址:https://github.com/alibaba/AndFix
tools裡面有我們需要的工具,docs是一些文檔介紹。AndFix解決在線修復bug,而不是重新發布新版本apk,AndFix支持Android版本從2.3到6.0。我們從下圖來了解一下實現原理
修復過程示意圖<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="" src="/uploadfile/Collfiles/20160423/20160423090417299.png" title="\" />
我們該如何使用這個庫呢?首先要添加依賴
//.........Maven 方式...........
com.alipay.euler
andfix
0.4.0
aar
//..............Gradle方式..................
dependencies {
compile 'com.alipay.euler:andfix:0.4.0@aar'
}
接著我們得在Application裡面初始化PatchManager,並提供兩個方法:打補丁、移除所有補丁(發布版本更新需要移除無用的補丁),具體代碼如下:
/**
* Created by idea on 2016/4/21.
*/
public class MyApplication extends Application {
protected PatchManager patchManager;
@Override
public void onCreate() {
super.onCreate();
patchManager = new PatchManager(this);
patchManager.init(getAppVersion());
patchManager.loadPatch();
}
/**
* 獲取系統當前版本號,默認1.0
*
* @return
*/
private String getAppVersion() {
try {
PackageManager manager = getPackageManager();
PackageInfo info = manager.getPackageInfo(getPackageName(), 0);
String version = info.versionName;
return version;
} catch (Exception e) {
e.printStackTrace();
return "1.0";
}
}
/**
* 熱修復打補丁,根據版本信息與服務器匹配下載補丁文件到手機,並記錄路徑和版本號,配合加載補丁
* @param path
*/
public void addPatch(String path) {
try {
patchManager.addPatch(path);//path of the patch file that was downloaded
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 安裝新版本APK需要調用該方法
*/
public void removeAllPatch() {
//刪除所有已加載的patch文件
patchManager.removeAllPatch();
}
}
具體怎麼運用到實際開發中呢,進過一番思考寫下了這麼一個概要,稍後准備工作完成後我們來寫一個demo實踐
/**
* Created by idea on 2016/4/21.
*/
public class HotFix {
private boolean isRemovePatch = true;
private String patchVersion;
private String apkVersion;
private String updateAPKUrl;
private String updatePatchUrl;
private boolean isUpdateAPK;
private boolean isUpdatePatch;
public void onUpdateAPKWithHotFix(String apkVersion, String patchVersion, OnUpdateAPKListener onUpdateAPKListener){
}
interface OnUpdateAPKListener{
void onResponse(HotFix hotFix);
}
}
以上代碼稍後實踐,tools文件下 apkpatch-1.0.3 工具的使用可以在命令行切換到解壓目錄下,輸入apkpatch查看,如下圖
簡單對這些命令說明一下
apkpatch -f -t -o
簡單的測試一下工具的使用:TextView賦值的bug修復(不為null),第一個版本 (簽名打包一個old.apk)
public class MainActivity extends BaseActivity {
private String content = "null";
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Bind(R.id.hotFix_TextView)
TextView hotFixTextView;
@Override
public int getLayoutResId() {
return R.layout.activity_main;
}
@Override
protected void initialView() {
super.initialView();
hotFixTextView.setText(getContent());
}
}
這裡留的bug content==null 賦值現實問題,修復bug代碼修改如下:(重新打包生成new.apk)
private String content = "null";
public String getContent() {
if(content == null || content.equals("null")){
return "未知";
}else{
return content;
}
}
使用工具生成.apatch文件
在進行demo編寫之前,我們先對其業務邏輯進行分析,得出下圖
接口設計請求參數:
接口響應值Data:
正式的開發中應該是按照上面這個流程來的,但是為了方便我們demo就直接把.apatch文件放入sdcard,直接模擬請求實現熱修復,下面是相關源碼下載地址:http://download.csdn.net/detail/analyzesystem/9499245;把.apatch文件放入指定位置即可。(開發集成一定不要忘記添加讀寫權限),下圖是實現效果圖:
朋友告訴我這個庫熱修復會有很多問題,在很多手機上有bug,不過這不是我現在關心的問題,實踐成功了待以後開發應用中遇到再說。如果你們誰有遇到bug坑,還請留言,以便於累計少踩坑。
貌似又是阿裡巴巴的,項目地址:https://github.com/alibaba/dexposed
項目集成依賴可選直接添加到您的項目dexposed AAR編譯的庫,它包含一個jar文件”dexposedbridge .jar,兩libdexposed.so libdexposed_l.so文件,gradle依賴如下:
dependencies {
compile 'com.taobao.android:dexposed:0.1.1@aar'
}
將下面一行插入到你的應用程序的初始化
public class MyApplication extends Application {
@Override public void onCreate() {
// 檢查當前設備是否支持該庫
if (DexposedBridge.canDexposed(this)) {
// 使用Dexposed啟動AOP
}
}
...
}
dexposed Dalvik運行ARM架構支持所有設備從Android 2.3到4.4(不包括3),然而在我查詢了一些資料後,特別是看了http://pcedu.pconline.com.cn/484/4841077.html這篇文章後,放棄了對該庫的深入了解,需要root權限在某些定制機上還需要定制版,開發還需要走各種分支,簡直就是不能忍受!!這個時代不屬於它了。HotFix、Nuwa、DroidFix、DynamicAPK、AndHotFix、AndFixx也粗略過了一遍,集成來說還是AndFix方便點
前言我們知道寫出有質量的軟件是復雜而且困難的:它不僅僅在於滿足所有的需求,同時也應該是健壯的、易於維護的、方便測試的、非常靈活的(能夠靈活的改變內容,如模塊加減)。清晰的
本例子一種介紹了四種啟動方式來1老趕集網的啟動,效果圖 : 實現原理 :通過handler延時一段時間 向主線程發送一條跳轉界面的消息(這也是大部分啟動頁所用到的)代碼示
今天來講講自定義單個控件,就拿開關按鈕來講講,相信大家見了非常多這樣的了,先看看效果:我們可以看到一個很常見的開關按鈕,那就來分析分析。首先:這是由兩張圖片構成:①一張為
RecyclerView出現已經有一段時間了,相信大家肯定不陌生了,大家可以通過導入support-v7對其進行使用。 據官方的介紹,該控件用於在有限的窗口中展示大量數據