如何访问 android系统hide的类或接口

简介: 如何访问 android系统hide的类或接口

两种方法 :1. 反射      2. 狸猫换太子    把系统的class.jar  导入项目的libs文件夹 使用该jar包

1.反射

获取u盘路径
public static String getUDiskPath() {
        StorageManager mStorageManager = getContext().getSystemService(StorageManager.class);
        if (mStorageManager != null) {
            try {
                Class storeManagerClazz = null;
                try {
                    storeManagerClazz = Class.forName("android.os.storage.StorageManager");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                Method getVolumesMethod = storeManagerClazz.getMethod("getVolumes");
                List<?> volumeInfos = (List<?>) getVolumesMethod.invoke(mStorageManager);
                Class volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");
                Method getFsUuidMethod = volumeInfoClazz.getMethod("getFsUuid");
                Field pathField = volumeInfoClazz.getDeclaredField("path");
                if(volumeInfos != null){
                    for(Object volumeInfo:volumeInfos){
                        String uuid = (String)getFsUuidMethod.invoke(volumeInfo);
                        if(uuid != null){
                            String pathString = (String)pathField.get(volumeInfo);
                            return pathString;
                        }
                    }
                }
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

2.替换jar包

1.获取Android源码并进行编译。

2..编译完毕后,取出out\target\common\obj\JAVA_LIBRARIES\framework_intermediates路径下的classes.jar

3.将classes.jar重命名为framework.jar并添加到Android Studio项目的libs目录下。

4.在build.gradle中的dependencies中,添加:

compileOnly files('libs/framework.jar')

5.在build.gradle中的Android节点设置编译参数   可以解决编译时找不到符号的错误

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        Set<File> fileSet = options.bootstrapClasspath.getFiles()
        List<File> newFileList =  new ArrayList<>();
        //JAVA语法,可连续调用,输入参数建议为相对路径
        newFileList.add(new File("libs/framework.jar"))
        //最后将原始参数添加
        newFileList.addAll(fileSet)
        options.bootstrapClasspath = files(
                newFileList.toArray()
        )
    }
}

  • 或者在工程的根目录build.gradle中找到allprojects,加入如下代码(新版本无效)
gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
    }
}
allprojects {
    tasks.withType(JavaCompile) {
        options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
    }
}

 

7.配置依赖优先级,否则Android studio默认引用配置的Android sdk进行编译,可以解决点击方法名,无法跳转的问题

def imlFile = file("\\..\\.idea\\modules\\app\\"+rootProject.name+'.'+projectDir.name+'.iml')
def imlFile = file("\\..\\.idea\\modules\\"+projectDir.name+"\\"+rootProject.name+'.'+projectDir.name+'.main.iml')

 

preBuild {
    doLast {
        //def imlFile = file(project.name + ".iml")     //AndroidStudio 3.x 适用
        //Android studio4.0的app.iml文件路径为项目/.idea/modules/app/app.iml。早期版本,app.iml文件在项目根目录下
        //def imlFile = file("\\..\\.idea\\modules\\app\\app.iml")
        def imlFile = file("\\..\\.idea\\modules\\app\\DiagnoseDemoTest.app.main.iml" )
        println 'path=' + projectDir.absolutePath
        //        println 'Change ' + project.name + '.iml order'
        try {
            def parsedXml = (new XmlParser()).parse(imlFile)
            def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
            parsedXml.component[1].remove(jdkNode)
            println 'api =' +  android.compileSdkVersion.substring("android-".length())
            def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
            new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
            groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
        } catch (FileNotFoundException e) {
            // nop, iml not found
            e.printStackTrace();
        }
    }
}

这个 task 在编译之前, 自动更改.idea/modules/app/DiagnoseDemoTest.app.iml,将下面代码会移动最后,才能在编译时使用我们引入的 framework.jar。

<orderEntry type="jdk" jdkName="Android API 30 Platform" jdkType="Android SDK" />


目录
打赏
0
1
1
0
112
分享
相关文章
Android系统SELinux安全机制详解
如此看来,SELinux对于大家来说,就像那位不眠不休,严阵以待的港口管理员,守护我们安卓系统的平安,维护这片海港的和谐生态。SELinux就这样,默默无闻,却卫士如山,给予Android系统一份厚重的安全保障。
72 18
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
199 16
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
Android--adb权限拒绝访问(permission denied)解决
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/78222147 用户机已经root了,但是在执行删除系统文件出现permission denied,查找了下原因: 默认运行所有命令时都仍然是普通用户身份,除非显式切换到root用户。
5124 0
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
285 76
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
85 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等