Android L反射扫描不到包名原因

本文介绍了在Android L版本后,反射调用隐藏API的方式发生了变化,导致原有构造方法无法成功。通过对比分析,展示了不同版本中构造PackageParser对象的代码差异,以解决在Android L及以上版本反射扫描不到包名的问题。
摘要由CSDN通过智能技术生成

由于我们是调用了隐藏的API 。这部分通过反射方法拿到。。在android L 之后版本,这一隐藏API接口的构造方式有所改变,从而导致了该实现方式无法构造Constructor类成功,需要针对版本进行区分调用构造该对象。

 

Android L版本前的构造方法

Class pkgParserCls = Class.forName(path_packageparser);

Object[] valueArgs = new Object[1];

Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs);

valueArgs[0] = apkPath;

Object pkgParser = pkgParserCt.newInstance(valueArgs);

 

Android L版本开始后的构造方法

 Class pkgParserCls = Class.forName(path_packageparser);

 ConstructorpkgParserCt = null;

pkgParserCt = pkgParserCls.getConstructor(null);

Object pkgParser = pkgParserCt.newInstance(null);

 

有源码的同学可以对比两个版本去参看一下,它构造方式的改变


 ZipResources类内

修改后的方法

public static String getThemePkgFromReflect(String apkPath) {

if (null == apkPath || apkPath.length() < 0) {

return LauncherEnv.Package.PACKAGE_NAME;

}

if (sThemePathMap != null) {

Iterator iter = sThemePathMap.entrySet().iterator();

while (iter.hasNext()) {

Map.Entry entry = (Map.Entry) iter.next();

Object key = entry.getKey();

Object val = entry.getValue();

if (val != null && ((String) val).equals(apkPath)) {

return (String) key;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值