1. 程式人生 > >《Android外掛化開發指南》勘誤

《Android外掛化開發指南》勘誤

一些常識:

1)全書70個程式碼例子中,涉及到外掛的例子,請先assemble外掛的專案,這會在HostApp專案中生成assets目錄,並在該目錄下plugin1.apk。這樣,HostApp才能正常執行。

2)本書基於Android6.0(API level 23)的原始碼進行分析,本書的程式碼在Android7.0(API level 24)手機上測試都是能正常工作的。對於Android 7.0以上版本,有些外掛化的解決方案,已經過時了,比如AMN的gDefault欄位。

3)針對於Android8.0(API 26),Android8.1(API 27),Android9(API 28),外掛化所需要做的適配工作,參加以下3篇文章(第2版作為第23章會放入書中):

-----------------------------------------------------------

2018年8月第1版第1次印刷

1)前言

比如說AssetsManager的addAssetPath方法,ActivityThread的currentActivityThread方法

這句話刪除,舉例不當。

2)第2章,P25

ActivityManagerNativ改為ActivityManagerNative

3)第3章,P73

如果只想獲取類的所有public建構函式,就不能再使用Class的getConstructors方法了,而要使用getDeclaredConstructors方法。

這裡寫反了,訂正如下:

如果只想獲取類的所有public建構函式,只要呼叫Class的getConstructors方法就足夠了。

4)第6章,P133

applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def file = output.outputFile
            output.outputFile = new File(file.parent,
                    "plugin1.apk")

            println("$buildDir/outputs/apk/")
            println("$rootDir/HostApp/src/main/assets")

            copy {
                from "$buildDir/outputs/apk/plugin1.apk"
                into "$rootDir/HostApp/src/main/assets"
            }
        }
}

上面這段指令碼,有個瑕疵,要執行兩次的外掛專案中的assembleRelease命令,才能在HostApp的assets目錄下生成plugin1.apk,訂正如下:

assemble.doLast {
    android.applicationVariants.all { variant ->
        // Copy Release artifact to HostApp's assets and rename
        if (variant.name == "release") {
            variant.outputs.each { output ->
                File originFile = output.outputFile
                println originFile.absolutePath
                copy {
                    from originFile
                    into "$rootDir/HostApp/src/main/assets"
                    rename(originFile.name, "plugin1.apk")
                }
            }
        }
    }
}

接下來,執行外掛專案的assemble命令,只要1次,即可生成在HostApp的assets目錄下生成plugin1.apk。

5)第2章 P32

App和ASM頻繁地向對方傳送訊息

修改為:App和AMS頻繁地向對方傳送訊息

6) 第2章,P44

2.9.2

在Service中,通過AMM/AMP

訂正為:

在Service中,通過AMN/AMP

7)第2章,P37

仍然是通過AMM/AMP

訂正為:仍然是通過AMN/AMP

8)前言,P5

把android-pluginmgr設計為對Instrumentation的思想進行Hook

訂正為: 把android-pluginmgr設計為對Instrumentation進行Hook

9)第18章,P287

ZeusStudy和1.6之間不應該有空格

10)第2章 P21

AndvoidManifest修改為AndroidManifest

11)第2章 P22

哪個,修改為那個

12)P101

圖中,多了一個-

13)P102,第9行末尾,重寫的邏輯,把英文句點改為中文句號。

14)P56

“主要邏輯都再此實現”中的“再此”應該為“在此”

15)113頁

“對AMN的getDafault方法進行Hook”中“getDafault”應該為“getDefault”。default寫錯了

16)110頁

“currentActivity-Thread”多了一個橫線“-”

17)124頁:

倒數第三行“會把asset目錄中的外掛”中的“asset目錄”應該為“assets目錄”。缺個s

18)

292頁:“它有一個getsSring函式”中的“getsSring”應該為“getString”

19)

319頁:“在Android Studio中建立一個過程”中的“過程”修改為“工程”。

 20)

320頁:第2行:“同時在自定義的Class-Loader中”中的“Class-Loader”修改為“ClassLoader”。 21) 320頁 第13行:“但是AndroidAndroid系統原始碼中也有一些類”中的“AndroidAndroid”修改為“Android“ 22)235頁 那麼就通過10.3.2介紹的proxyCreateService方法 10.3.2改為14.4.2 23)238頁 ServiceManager(省略了10.3.1介紹的proloadServices和10.3.2介紹的proxyCreateService) 10.3.2改為14.4.2 10.3.1改為14.4.3 preloadServices 改為preLoadServices 24)P97 RefInvoke.setFieldObject(sPackageManager,”sPackageManager”,proxy); 修改為
RefInvoke.setFieldObject(currentActivityThread,”sPackageManager”,proxy); 25)P100 圖5-2中 Context/Contexztimpi  修改為Context/ContextImpl

相關推薦

Android外掛開發指南勘誤

一些常識: 1)全書70個程式碼例子中,涉及到外掛的例子,請先assemble外掛的專案,這會在HostApp專案中生成assets目錄,並在該目錄下plugin1.apk。這樣,HostApp才能正常執行。 2)本書基於Android6.0(API level 23)的原始碼進行分析,本書的程式碼在

Android外掛開發指南》面世

本書Q群:389329264      (一)這是一本什麼書        如果只把本書當作純粹介紹Android外掛化技術的書籍,那就大錯特錯了。        本書在研究Android外掛化之餘,還詳細介紹了Android系統的底層知識,包括Binder和AIDL的原理、四大元件的原理、Ap

Android外掛開發過程中遇到的問題總結

最近接手的一個專案,是在外掛分支裡開發一個功能。但是寫過demo之後,發現同樣的程式碼在專案中執行不起來。在此過程中遇到的問題總結一下,以便以後遇到同樣的問題直到問題出在哪。 一、四大元件的註冊 四大元件的使用是一定要宣告的,尤其是要在主站中宣告。並且在外掛化開發的過程中

Android外掛開發之AMS與應用程式(客戶端ActivityThread、Instrumentation、Activity)通訊模型分析

今天主要分析下ActivityManagerService(服務端) 與應用程式(客戶端)之間的通訊模型,在介紹這個通訊模型的基礎上,再    簡單介紹實現這個模型所需要資料型別。         本文所介紹內容基於android2.2版本。由於Android版本的不同

Android外掛開發教程(一)

1.什麼是外掛化開發首先我們要對外掛化的概念有一個認識:外掛化開發是將整個app拆分成很多模組,這些模組包括一個宿主和多個外掛,每個模組都是一個apk(元件化的每個模組是個lib),最終打包的時候將宿主apk和外掛apk分開或者聯合打包。外掛式開發通俗的講就是把一個很大的app分成n多個

Android外掛開發 第三篇 [載入外掛資源]

引言 本文講解宿主如何從外掛apk中獲取到資源,為啥要從外掛中獲取資源呢?這種需求可能來自於顯示外掛的名字啊,圖示之類的。比如宿主的一個按鍵上顯示“掃一掃”或者"搖一搖"之類的,這個字串是外掛提供的。 Demo建立 引入外掛的AssetManager private sta

詳解Android外掛開發-資源訪問

    動態載入技術(也叫外掛化技術),當專案越來越龐大的時候,我們通過外掛化開發不僅可以減輕應用的記憶體和CPU佔用,還可以實現熱插拔,即在不釋出新版本的情況下更新某些模組。     通常我們把安卓資原始檔製作成外掛的形式,無外乎有一下幾種: zip

Android外掛最佳方案--Phantom 實踐指南

PhantomTest 滿幫集團外掛化框架Phantom使用演示 Phantom外掛化演示(請star支援) 演示demo下載 注意:請將外掛apk拷貝至sdcard下。 Phantom介紹 Phantom 是滿幫集團開源的一套穩定、靈

外掛開發系列之三---Android外掛從入門到放棄-最強合集

本人最近研究外掛化, 偶然發現此合集, 按照部分連結的文章實際簡單寫了些demo,受益良多, 覺得確實不錯,特轉載過來,給需要的人。 外掛化涉及的東西很多,所以我們需要多個維度去學習。大概分為5個部分:預備知識、入門、進階、系列、類庫。一步一步深入瞭解外掛的原理。 基礎1.Java 類載入器 類載入

Android Plugin插樁式實現外掛開發(一)-實現原理及Activity外掛實現

1. 前言在現在一些大型的Android應用中都採用了外掛化的開發方式,比如美團,支付寶及我們常用的微信等採用了插修的化的開發方式來進行開發的,既然國內一流的網際網路公司都採用這樣的方式來開發那它一定能帶給開發部署大型應用帶來很大的便捷,那麼外掛化的優勢在哪裡呢?1.1 外掛

滴滴開源Android外掛框架VirtualAPK原理分析

概述 Activity 支援 Hook ActivityManagerService Hook Instrumentation 啟動外掛Acti

[Songqw.Net 基礎]WPF實現簡單的外掛開發

原文: [Songqw.Net 基礎]WPF實現簡單的外掛化開發 接著上一篇部落格, 那裡實現了簡單的控制檯載入外掛,在這裡通過WPF實現,做個備份. WPF控制元件空間經常會與WinFrom混淆,要記得WPF控制元件是引用 using System.Windows.Co

Android外掛技術簡介

https://blog.csdn.net/io_field/article/details/79084630 可以通過反射 事先定義統一介面的方式,訪問外掛中的類和方法 還可以在AndroidManifest.xml中動態註冊元件Activity、Service、BroadcastReceiver、

android外掛框架-Replugin

Replugin是360開源的一款外掛化框架,同樣過多的資料就不在這展現了,github上有最完整的官網介紹。 github地址:https://github.com/DroidPluginTeam/DroidPlugin 宿主接入工作 project的gradle中加入:

Android外掛、元件

轉載僅供本人存檔及後續研究使用,請尊重原創。 轉載自:https://blog.csdn.net/qq941263013/article/details/82864553   如今移動app市場已經是百花齊放,其中有不乏有很多大型公司、巨型公司都是通過app創業發展起來的;ap

Android模組開發、元件開發

模組化開發:優點嘛,專案過大時便於管理; 1、在根目錄的gradle.properties檔案下新增 isBuildModule=false; 使用isBuildModule來控制這個是Library還是獨立的APP; 2、建立一個新的Module,在其build.gra

Android 外掛化入手指南之classLoader完全解析

原文:https://blog.csdn.net/u012124438/article/details/53235848  Java程式碼都是寫在Class裡面的,程式執行在虛擬機器上時,虛擬機器需要把需要的Class載入進來才能建立例項物件並工作,而完成這一個載入工作的角色就是Cla

Android外掛原理和實踐 (四) 之 合併外掛中的資源

我們繼續來學習Android外掛化相關知識,還是要圍繞著三個根本問題來展開。在前面兩章中已經講解過第一個根本問題:在宿主中如何去載入外掛以及呼叫外掛中類和元件程式碼。Demo中使用了Service來演示,因為還沒有解決載入外掛中資源的問題,用Activity不好展示。所以本文將要從資源的載入機制

Android外掛原理和實踐 (七) 之 專案實踐

我們在前面一系列文章中已經介紹完了外掛化原理以及三個根本問題的解決方案,本文主要就是作為前面幾篇文章的一個總結,通過專案實踐將前面的知識點串起來使完成一個入門級簡單的外掛化工程以及在實際外掛化開發中遇到的一些總結。 實踐 我們先通過Android Studio建立一個工程,工程中包括了兩

自己動手寫Android外掛框架,讓老闆對你刮目相看

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由達文西發表於雲+社群專欄 最近在工作中接觸到了Android外掛內的開發,發現自己這種技術還缺乏最基本的瞭解,以至於在一些基本問題上浪費不少時間,如外掛Context和主工程Context的區別,許可權必須在主工程申明等,因此花了點時間瞭解