Android之移動熱修複

来源:http://www.cnblogs.com/shenchanghui/archive/2017/07/13/7162088.html
-Advertisement-
Play Games

阿裡雲最近推出了移動熱修複服務,聽說這個服務傻瓜式接入,性能相對較好,對新技術比較好奇的我決定嘗試一下。 移動熱修複.png 移動熱修複.png 首先,需要開通這個服務,創建應用 創建應用.png 創建應用.png 然後,在項目中接入服務。按照文檔所述,第一步:gradle遠程倉庫依賴, 打開項目找 ...


阿裡雲最近推出了移動熱修複服務,聽說這個服務傻瓜式接入,性能相對較好,對新技術比較好奇的我決定嘗試一下。


移動熱修複.png


首先,需要開通這個服務,創建應用


創建應用.png


然後,在項目中接入服務。按照文檔所述,
第一步:gradle遠程倉庫依賴, 打開項目找到app的build.gradle文件,添加如下配置:
添加maven倉庫地址:

repositories {
   maven {
       url "http://maven.aliyun.com/nexus/content/repositories/releases"
   }
}

第二步:添加gradle坐標版本依賴:

compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.6'

第三步:在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"/>
    <!--讀取手機設備碼-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

文檔中並沒有提到最後一個許可權,不過我運行項目的時候有提示需要這個許可權。
第四步:配置AndroidManifest文件:

<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密鑰" />

這些信息可以在新建的應用中找到


應用信息.png


第五步:混淆配置:

#基線包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/buidl/outputs/mapping/release路徑下,移動到/app路徑下
#修複後的項目使用,保證混淆結果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize

第六步:在Application中初始化:
initialize的調用應該儘可能的早,必須在Application.attachBaseContext()或者Application.onCreate()的最開始進行SDK初始化操作,否則極有可能導致崩潰。

// initialize最好放在attachBaseContext最前面
SophixManager.getInstance().setContext(this)
                .setAppVersion(appVersion)
                .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) {
                            // 表明補丁載入成功
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 表明新補丁生效需要重啟. 開發者可提示用戶或者強制重啟;
                            // 建議: 用戶可以監聽進入後臺事件, 然後應用自殺
                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {
                            // 內部引擎異常, 推薦此時清空本地補丁, 防止失敗補丁重覆載入
                            // SophixManager.getInstance().cleanPatches();
                        } else {
                            // 其它錯誤信息, 查看PatchStatus類說明
                        }
                    }
                }).initialize();
// queryAndLoadNewPatch不可放在attachBaseContext 中,否則無網路許可權,建議放在後面任意時刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();

到此,集成完畢。
接下來,開始測試。
我剛開始直接在原有項目中擼了一遍,結果跟友盟有衝突(看來嘗試新東西還是得新建項目,偷不得懶)。。。所以又新建了一個項目,重新擼一遍。。。
1.舊版本:不顯示“HelloWord”;
2.新版本:顯示“HelloWord”;
3.下載補丁工具:https://help.aliyun.com/document_detail/53247.html?spm=5176.doc53240.6.548.o2zESp
4.使用補丁工具生成補丁。
5.上傳補丁文件。在APP列表中,點擊“管理”,添加版本(版本要和app版本一致)。


添加版本.png


點擊對應版本的“查看詳情”,上傳補丁。


上傳補丁.png


點擊對應補丁版本的“查看詳情”,裡面可以發佈補丁。
6.發佈補丁。

最後手機上的APP沒有立即顯示“HelloWord”,關閉重啟APP後成功顯示“HelloWord”。雖然沒有即時生效,但至少成功更新了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ①Math.trunc() Math.trunc()方法用於去除一個數的小數部分,返回整數部分。 參數為非數值時,Math.trunc()方法會先用Number()將其轉換為數值,若無法獲取數值的整數部分,比如字元串或NaN或空值等,會返回NaN. ②Math.sign() Math.sign()方 ...
  • 總體概念 常見的塊級元素有 DIV, FORM, TABLE, P, PRE, H1~H6, DL, OL, UL 等。 常見的內聯元素有 SPAN, A, STRONG, EM, LABEL, INPUT, SELECT, TEXTAREA, IMG, BR 等。 block,inline和inl ...
  • 直接打開html文件,是以file:///方式打開的,這種方式很多時候會遇到跨域的問題,因此我們一般會搭建一個簡易的本地伺服器,來運行測試頁面。 一、構建靜態伺服器 1、使用express模塊 建立個js文件,命名server,內容代碼如下: 文件結構如下: 運行的話只要執行:node server ...
  • 兩種常用的HTTP請求方式:post和get get:從指定的資源進行請求。數據長度有限制(2048個字元)可被緩存、可被保留在瀏覽器歷史記錄中,安全性較差。發送敏感信息如密碼時不適用。 post:向指定的資源提交要被處理的數據。數據長度無限制、不可被緩存,不可保存在瀏覽器歷史記錄中,安全性較高。 ...
  • 內聯元素:只在行內發生作用,設置寬高不起作用,不會影響文字內容,使其換行等。豎直方向和間距也不起作用 display可以強制轉換行內元素和塊狀元素,還可以取消顯示none 塊元素(block element) address - 地址 blockquote - 塊引用 center - 舉中對齊塊 ...
  • 在drawable下新建文件夾bt_shape.xml,如下: 在activity_main.xml下使用: 實現效果如下: ...
  • 相關的基本概念: 1、任務棧(Task) 若幹個Activity的集合的棧表示一個Task。 棧不僅僅只包含自身程式的Activity,它也可以跨應用包含其他應用的Activity,這樣有利於保障用戶體驗,維護用戶操作體驗上的完整性。例如:微信ActivityA 分享文章到QQActivityB,兩 ...
  • 需求概述: 在屏幕上用手指畫出一個區域,返回所圈的區域坐標。 技術實現: 自定義View,設置畫筆及對應參數,在onTouchEvent()回調函數里,對觸摸事件進行判斷。畫出矩形圖形。 代碼: 自定義View: 調用時,只需要在onCreate()函數里,直接添加就可以: 根據需要可以在自定義類中 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...