牙叔教程 簡單易懂javascript
Android插件化java
DexClassLoader加載未安裝的apk,提供資源供宿主app使用android
網上有不少插件化的教程, 我看了不少教程, 都是android的, 沒找到autojs的, 因此就翻譯了一下, 而且畫了一個簡單明瞭的流程圖markdown
9.0.4網絡
// resourcePath就是sd卡上的app文件路徑
function queryPackageInfo(resourcePath) {
return context.getPackageManager().getPackageArchiveInfo(resourcePath, context.getPackageManager().GET_ACTIVITIES);
}
複製代碼
assetManager = Class.forName("android.content.res.AssetManager").newInstance();
複製代碼
let method = assetManager.getClass().getMethod("addAssetPath", Class.forName("java.lang.String"));
// 反射設置資源加載路徑
method.invoke(assetManager, resourcePath);
複製代碼
resources = new Resources(
assetManager,
context.getResources().getDisplayMetrics(),
context.getResources().getConfiguration()
);
複製代碼
// 構造函數
// public DexClassLoader(String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent)
// dexPath - 就是apk文件的路徑
// optimizedDirectory - apk解壓縮後的存放dex的目錄,在4.1之後該目錄不容許在sd卡上
// libraryPath - 本地的library
// parent - 父加載器
new DexClassLoader(resourcePath, mDexDir, null, context.getClassLoader())
複製代碼
cls = mResourceLoadBean.getClassLoader().loadClass(rClassName);
複製代碼
cls = mResourceLoadBean.getClassLoader().loadClass(rClassName);
resID = cls.getField(fieldName).get(null);
複製代碼
drawable = mResourceLoadBean.getResources().getDrawable(resourceID);
複製代碼
部份內容來自網絡 本教程僅用於學習, 禁止用於其餘用途app