注意事项
如果在用Android Studio开发过程中,如果新增了类,扫描不到。只能把APP卸载了,才能扫描到。
可能是Instance Run 的影响。
后面研究一下这篇文章,看看能不能解决
Android 遍历Apk下的所有类文件
package com.trs.nmip.common.util.web.event_submit; /** ** Created by zhuguohui * Date: 2024/1/22 * Time: 16:04 * Desc: **/ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import java.io.IOException; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import dalvik.system.BaseDexClassLoader; import dalvik.system.DexClassLoader; import dalvik.system.DexFile; public class AndroidClassScanner { // 获取某个包名下的所有类名 public static ListgetClassesInPackage(Context context, String packageName) { List classNames = new ArrayList<>(); PackageManager packageManager = context.getPackageManager(); try { // 获取应用信息 ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0); // 获取应用 APK 文件的路径 String apkPath = applicationInfo.sourceDir; // 通过 DexClassLoader 加载 APK 文件 DexClassLoader dexClassLoader = new DexClassLoader(apkPath, context.getCacheDir().getAbsolutePath(), null, context.getClassLoader()); // 获取 Dex 文件的路径 String dexPath = context.getCacheDir() + "/output.dex"; // 将 APK 文件解压到 Dex 文件 DexFile dexFile = DexFile.loadDex(apkPath, dexPath, 0); // 获取 Dex 文件中的所有类名 Enumeration entries = dexFile.entries(); while (entries.hasMoreElements()) { String className = entries.nextElement(); classNames.add(className); } // 清除 DexClassLoader 缓存 //上述代码在获取完类名后,将 DexClassLoader 设置为 null 并触发垃圾回收,以清除类加载器的缓存。这可能有助于解决新增类无法扫描到的问题 dexClassLoader = null; System.gc(); } catch (PackageManager.NameNotFoundException | IOException e) { e.printStackTrace(); } List needClassNames=new ArrayList<>(); for(String name:classNames){ if(name.startsWith(packageName)){ needClassNames.add(name); } } return needClassNames; } }
猜你喜欢
- 14天前(兰州旅游文化产业发展有限公司)甘肃省兰州市2023年乡村旅游暨A级旅游景区管理工作培训班开班
- 14天前(云南南博会展馆)旅居云南馆亮相第9届南博会
- 14天前(札幌小樽市)2024年暑期飞往北海道避暑吧!札幌小樽city walk路线推荐
- 14天前(曼谷丽思卡尔顿公寓价格)曼谷丽思卡尔顿酒店盛大启幕,开创泰国奢华雅致新纪元
- 14天前(中国最好的避暑山庄)2025中国十大避暑山庄评选揭晓,澳涞山庄夺魁
- 14天前(苏梅岛普吉岛哪个好玩)苏梅岛金普顿基塔蕾度假酒店推出家庭度假套餐
- 14天前(安岚度假村及酒店推出"山海之约"目的地婚礼计划)安岚度假村及酒店推出"山海之约"目的地婚礼计划
- 14天前(夏日纵享 邂逅双面姑苏是哪一集)夏日纵享 邂逅双面姑苏
- 14天前(冬日生活还没安排?上抖音一键打包北方花式过冬精彩)冬日生活还没安排?上抖音一键打包北方花式过冬精彩
- 14天前(我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章