IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> autojs使用未安装的app资源 -> 正文阅读

[移动开发]autojs使用未安装的app资源

牙叔教程 简单易懂

标准名字

Android插件化

DexClassLoader加载未安装的apk,提供资源供宿主app使用

网上有很多插件化的教程, 我看了很多教程, 都是android的, 没找到autojs的, 所以就翻译了一下, 并且画了一个简单明了的流程图

流程图

在这里插入图片描述

autojs版本

9.0.4

教程中可使用到的未安装app资源

  • 图片
  • 颜色
  • 字符串
  • activity_main.xml

代码讲解

1. 得到未安装的apk信息
// resourcePath就是sd卡上的app文件路径
function queryPackageInfo(resourcePath) {
  return context.getPackageManager().getPackageArchiveInfo(resourcePath, context.getPackageManager().GET_ACTIVITIES);
}
2. 创建AssetManager实例
assetManager = Class.forName("android.content.res.AssetManager").newInstance();
3. 添加apk路径
let method = assetManager.getClass().getMethod("addAssetPath", Class.forName("java.lang.String"));
// 反射设置资源加载路径
method.invoke(assetManager, resourcePath);
4. 构造出正确的Resource
resources = new Resources(
  assetManager,
  context.getResources().getDisplayMetrics(),
  context.getResources().getConfiguration()
);
5. 实例化DexClassLoader
// 构造函数
// 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())
6. 加载类
cls = mResourceLoadBean.getClassLoader().loadClass(rClassName);
7. 获取资源id
cls = mResourceLoadBean.getClassLoader().loadClass(rClassName);
resID = cls.getField(fieldName).get(null);
8. 获取资源实体
drawable = mResourceLoadBean.getResources().getDrawable(resourceID);

注意事项

  • DexClassLoader第二个参数, 必须为私有目录, 并且不可为空
  • activity_main.xml的文字居中, 在androi studio中是正常的, 动态加载使用activity.setContentView并没有居中
  • java的类, 转为autojs的类, 内部成员最好挂到this上面
  • assetManager的实例是宿主app创造出来的, 但是一定要反射设置资源加载路径, 为未安装的app, 因为插件化就是用未安装的app资源

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述

完整源码

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:12:20  更:2021-08-07 12:12:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 -2025/2/5 23:03:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码