Android動態載入 載入已安裝APK中的類

2021-06-16 15:06:49 字數 2152 閱讀 8081

前言

android動態載入——載入已安裝apk中的類和資源。

不錯的帖子哦!

gridview用法大總結(牛年珍藏版)+原始碼

android樸素ui城市天氣預報原始碼

精美android ui介面原始碼(有圖有真相)

正文

一、目標

注意:被呼叫的apk在android系統中是已經安裝的。

從當前apk中呼叫另外乙個已安裝apk的字串、顏色值、、布局檔案資源以及activity。

}/*** 獲取資源對應的編號

* *

@param

testb

* @param

resname

* @param

restype

* layout、drawable、string

* @return

*/private

intgetid(resources testb, string restype, string resname)

/*** 獲取檢視

* *

@param

ctx *

@param

id *

@return

*/public view getview(context ctx, int

id)

/*** 獲取testb的context

* *

@return

* @throws

namenotfoundexception

*/private context gettestbcontext() throws

namenotfoundexception

**說明:

基本原理:通過package獲取被呼叫應用的context,通過context獲取相應的資源、類。

注意:a).  網上許多文章是通過當前工程的r.id來呼叫被呼叫工程的資源 ,這是錯誤的,即使不報錯那也是湊巧,因為r是自動生成的,兩個應用的id是沒有辦法對應的,所以需要通過getidentifier來查詢。

b).   context.context_include_code一般情況下是不需要加的,如果layout裡面包含了自定義控制項,就需要加上。注意不能在當前工程強制轉換獲得這個自定義控制項,因為這是在兩個classloader中,無法轉換。

c).    獲取這些資源是不需要shareuserid的。

三、總結

與上篇文章相比,獲取資源更加方便,但也存在一些限制:

3.1  被呼叫的apk必須已經安裝,降低使用者體驗。

3.2  style是無法動態設定的,即使能夠取到。

3.3  從目前研究結果來看,被呼叫工程如果使用自定義控制項,會受到比較大的限制,不能強制轉換使用(原因前面已經講過)。

3.4  由於乙個工程裡面混入了兩個context,比較容易造成混淆,取資源也比較麻煩。這裡分享一下批量隱射兩個apk id的辦法,可以通過反射獲取兩個apk的r類,一次獲取每乙個id和值,通過名稱一一匹配上,這樣就不用手工傳入字串了。

@suppresswarnings("rawtypes")

private

static hashmapgetr(class cls) throws

classnotfoundexception, instantiationexception, illegalacces***ception }}

return

result;

}

android動態載入jar

jar的載入 jar放在assert中 dexclassloader dexclassloader null classloader localclassloader this.getclassloader try catch ioexception e fileoutputstream out n...

android 動態載入布局

android 開發 動態載入布局 動態載入布局分為匯入xml控制項和新建控制項兩種,新增至原布局中,適用於動態變化的介面和不適合用xml固定布局的情況 1 自己新建xml布局並與原來的activity所顯示的布局相關聯 layoutinflaterminflater layoutinflater....

android 動態載入技術

首先,應該保證host程式 inte ce部分和impl實現部分在同乙個專案中,其中inte ce部分和impl實現部分作為android library。寫好 之後,將impl部分打包jar的build指令如下 task clearjar type delete task makejar type...