前言
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...