Android开发之依赖framework.jar包引用系统隐藏的属性和方法

前言

本篇文章主要针对在本地开发系统级应用,使用系统源码中的隐藏方法时,优先加载需要的隐藏api而不是官方的SDK的解决策略。

一、AndroidStudio编译时依赖库加载的默认顺序。

1、这里我们新建一个工程MyApplication,并添加对framework.jar包的依赖。
在这里插入图片描述
2、更新项目gradle,然后我们在代码MainActivity中引用一些系统类的隐藏属性或者方法,然后编译运行,就会出现如下图所示的错误提示。
引用系统类属性
3、我们打开.idea/modules/app/MyApplication.app.iml文件(高版本的gradle插件可能没有这个文件,可以直接忽略这一步),这个文件是编译器在运行时候加载需要依赖的库文件的顺序表,该文件的内容如下所示:
依赖库文件的顺序表
通过查看MyApplication.app.iml这个文件我们可以发现,对AndroidSDK的依赖优先级要高于我们新添加的依赖framework.jar包,这样就会导致编译器优先引用AndroidSDK中的类,而AndroidSDK中的关键系统类和隐藏属性和方法都是不允许我们直接引用的,所以编译器就会报错。

二、修改AndroidStudio的编译时依赖库加载的顺序。

1、如果我们想让MainActivity中的代码正常编译运行,就需要修改依赖模块AndroidSDK和framework.jar的先后顺序,只要让framework.jar加载的优先级高于AndroidSDK,MainActivity的代码就可以正常编译运行了。那么如何调整依赖库的优先级呢?只要在app模块的build.gradle中添加如下所示的配置就行了。

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()
        )
    }
}

在这里插入图片描述
2、添加如上图所示的配置之后,更新gradle,这个时候再进行编译,MainActivity中的代码基本上就可以正常编译运行了。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值