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资源


声明

部分内容来自网络

本教程仅用于学习, 禁止用于其他用途






相关文章
|
5月前
|
开发工具 iOS开发 MacOS
【Mac_mistake】app不能安装在未命名需要OSv11.13或更高版本
【Mac_mistake】app不能安装在未命名需要OSv11.13或更高版本
262 0
|
7月前
|
Windows
【Azure App Service】误删除App Service资源,怎么办?
【Azure App Service】误删除App Service资源,怎么办?
|
7月前
|
Java
【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault
【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault
|
7月前
|
关系型数据库 Linux PostgreSQL
【Azure 应用服务】Azure Function App Linux环境下的Python Function,安装 psycopg2 模块错误
【Azure 应用服务】Azure Function App Linux环境下的Python Function,安装 psycopg2 模块错误
|
7月前
|
存储 安全 Linux
【Azure 应用服务】App Service For Linux 怎么安装Composer,怎么安装PHP扩展,怎么来修改站点根路径启动程序?
【Azure 应用服务】App Service For Linux 怎么安装Composer,怎么安装PHP扩展,怎么来修改站点根路径启动程序?
|
7月前
|
数据库 Python
【Azure 应用服务】App Service中运行Python 编写的 Jobs,怎么来安装Python包 (pymssql)呢?
【Azure 应用服务】App Service中运行Python 编写的 Jobs,怎么来安装Python包 (pymssql)呢?
|
7月前
|
网络协议 Linux Shell
【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性
【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性
|
7月前
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
|
7月前
|
Go PHP 数据安全/隐私保护
【应用服务 App Service】Azure App Service 中如何安装mcrypt - PHP
【应用服务 App Service】Azure App Service 中如何安装mcrypt - PHP
|
8月前
|
前端开发 JavaScript
HBuilder实现App资源在线升级更新
这篇文章介绍了使用HBuilder实现App资源在线升级的流程,包括获取线上和本地版本号对比、检查更新、下载安装包、静默或用户触发安装以及重启应用。关键代码展示了如何比较版本、下载wgt文件及安装更新。注释提到仅同名文件被覆盖,manifest.json变化需整包升级。提供了一个DEMO下载链接。
255 0

热门文章

最新文章

  • 1
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 2
    【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
  • 3
    PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
  • 4
    Axure原型模板与元件库APP交互设计素材(附资料)
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 8
    小游戏源码开发之可跨app软件对接是如何设计和开发的
  • 9
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 10
    【Azure Function】Function App门户上的Test/Run返回错误:Failed to fetch