如何访问 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" />


目录
相关文章
|
3月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
346 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
342 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
774 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
199 0
|
4月前
|
Linux 测试技术 语音技术
【车载Android】模拟Android系统的高负载环境
本文介绍如何将Linux压力测试工具Stress移植到Android系统,用于模拟高负载环境下的CPU、内存、IO和磁盘压力,帮助开发者优化车载Android应用在多任务并发时的性能问题,提升系统稳定性与用户体验。
314 6
|
4月前
|
Java 数据库 Android开发
基于Android的电子记账本系统
本项目研究开发一款基于Java与Android平台的开源电子记账系统,采用SQLite数据库和Gradle工具,实现高效、安全、便捷的个人财务管理,顺应数字化转型趋势。
|
9月前
|
安全 搜索推荐 Android开发
Android系统SELinux安全机制详解
如此看来,SELinux对于大家来说,就像那位不眠不休,严阵以待的港口管理员,守护我们安卓系统的平安,维护这片海港的和谐生态。SELinux就这样,默默无闻,却卫士如山,给予Android系统一份厚重的安全保障。
303 18
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。

热门文章

最新文章