由于开发系统应用需要用到hide的api 以及 android.os.SystemProperties 的类,这些在开发的api里面是不带有的,如果需要使用需要导入对应jar包
dependencies {
//把自己需要的jar放在对应的libs里面 使用compileOnly 方式,这样编译apk不会把这个jar打包到apk
//里面,这个系统里面含有这个jar包
compileOnly(files('libs/framework-header.jar'))
}
这样导入你会发现系统的hide api使用不了,并且报红是由于 android studio 优先使用android.jar 而不是优先使用framework.jar里面的类,这时候需要手动在app工程 里面 ,build.gradle里面修改顺序,
在 dependencies {xxxx} 下面添加以下代码
preBuild {
println('preBuild================Looking=============')
println('把api里面的 sdk 移到最后面')
// doLast {
println('Looking for doLast')
// def imlFile = file(project.name + ".iml")
// def imlFile = file("./.idea/modules/"+project.name + ".mian.iml")
//这个是你的工程里面生成的iml文件请按照自己工程添加 ,其他地方可以不用修改
def imlFile = file("./.idea/modules/"+ "wzfdemo.iml")
if (!imlFile.exists()) {
println("IML file not found!")
// return
}
println('Change ' + project.name + '.iml order')
try {
// 使用 XmlParser 解析指定的 .iml 文件
def parsedXml = (new XmlParser()).parse(imlFile)
// 从解析的 XML 中查找类型为 'jdk' 的节点
def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
// 从 XML 树中移除找到的 jdkNode
parsedXml.component[1].remove(jdkNode)
// // 构建一个字符串,用于表示 Android SDK 的 JDK 名称
def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
// // 在 XML 中增加一个新的 'orderEntry' 节点,表示新的 JDK 配置
new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
// 将修改后的 XML 序列化并写回原始文件
groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
} catch (FileNotFoundException e) {
// 如果 .iml 文件未找到,捕获异常并打印错误信息
println('Change ' + project.name + '.iml order eerror========================='+e.toString())
}
// }
println('Looking for preBuild end')
}
如果你工程里面未生成如图所示的
请File-->Settings 或者 (ctrl+alt+s) 打开 找到 Build,Excution,Deployment --> Gradle 如图所示
这个时候就可以使用系统的hide api .
如果编译apk出现问题请参考 博主林外的一篇文章有讲到