android.util.xml jar,android studio 导入自己编译的Framework.jar

最近做一个指纹注册验证的APP,需要访问framework层隐藏的接口(接口前的注释里加了@hide),为了能在android studio里可以使用这些接口,需要自己编译下framework的源码,如果编译debug版本,直接把out/target/product/projectXX/system/framewor framework.jar下面拷出来,如果是user版本,out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar

由于我编译的是user版本,所以直接将classes.jar拷贝出来并修改为framework.jar

下面将framework.jar导入android studio工程

1、将framework.jar放在Module的libs下面

d2fc082a212e

image.png

2、右键framework.jar,选择“Add As Library”

3、右键Module选择“Open Module Settings,进入Project Structure界面,把framework.jar移到最顶上,把implementation改为compileOnly(默认Compile),点击确定:

d2fc082a212e

image.png

compileOnly表示只在编译时引用该jar包,打包的时候并不会将该jar打包进去。

这里有一点一定要特别注意:一定要将Modules下的build.gradle里的

implementation fileTree(include: ['*.jar'], dir: 'libs')

注释掉,否则还是会将framework.jar打包进apk

4、在工程的根目录下打开build.gradle,并找到allprojects,加入如下代码

allprojects {

repositories {

google()

jcenter()

}

tasks.withType(JavaCompile) {

options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')

}

}

5、在Module下打开build.gradle,在最后加入如下代码:

preBuild {

doLast {

def imlFile = file(project.name + ".iml")

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)

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

}

}

}

自动更改module.iml,将下面代码会移动最后

通过以上步骤后,就可以引用源码的Api了,但可能在运行时会出错,提示odex超出了65536,所以再加上如下设置就不会出错了

6、在Module下面的build.gradle里找到defaultConfi加入multiDexEnabled = true:

d2fc082a212e

image.png

并在dependencies里添加

implementation 'com.android.support:multidex:1.0.0'

由于使用了framework层隐藏的Api,编译出来的apk是不能作为一个普通的app运行的,必须将该app变成系统级的app才能正常运行,怎样变成系统级的app,下篇文章会详细介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值