AndroidStudio中使用自己编译的framewokr jar包编译

背景:
在主机厂或者有Android系统源码,通常会改framework下的代码,比如隐藏接口要开放或者新增一些api等,但因为AS中使用的是标准的api jar,在AS工程编译时会出现找不到函数实现等问题。
解决方案:将编译出来的framework jar包放在AS工程中,配置编译优先级
操作步骤:
1.拷贝源码编译出来的framewokr的jar包到AS工程里
在AS工程app目录下新建libs_provided文件夹,将源码编译生成目录out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar,拷贝到libs_provided目录下,同时不妨重命名为framework.jar

2.将自己编译出来的framework.jar加入编译
2.1选中framewokr.jar右键-->添加为lib


AndroidStudio中使用自己编译的framewokr jar包编译_第1张图片
图片1.png

2.2修改工程依赖,将framework.jar配置为仅参与编译的方式
点击工具栏“File”-->Project Structure


AndroidStudio中使用自己编译的framewokr jar包编译_第2张图片
图片2.png

选择Dependencies Tab将framework.jar配置为Compile only
AndroidStudio中使用自己编译的framewokr jar包编译_第3张图片
图片3.png

3.修改build.gradle(Project)
3.1添加os判断函数
def isWindows() {
return System.properties['os.name'].contains('windows')
}


AndroidStudio中使用自己编译的framewokr jar包编译_第4张图片
图片4.png

3.2 allprojects节点下添加如下代码
gradle.projectsEvaluated {
//兼容不同os路径配置
if (isWindows()){
//方式1
tasks.withType(JavaCompile){
options.compilerArgs.add('-Xbootclasspath/p:app\lib_provided\framework.jar')
}
}else{
tasks.withType(JavaCompile){
options.compilerArgs.add('-Xbootclasspath/p:app/lib_provided/framework.jar')
}
}
//方式2
// tasks.withType(JavaCompile) {
// options.compilerArgs << '-Xbootclasspath/p:app/lib_provided/framework.jar'
// }
}


AndroidStudio中使用自己编译的framewokr jar包编译_第5张图片
图片5.png

补充:
gradle中判断os
1.导包
import org.apache.tools.ant.taskdefs.condition.Os
2.定义os函数
def osFamily() {
if (Os.isFamily(Os.FAMILY_MAC)) return 'mac'
if (Os.isFamily(Os.FAMILY_UNIX)) return 'linux'
if (Os.isFamily(Os.FAMILY_WINDOWS)) return 'windows'
return null
}
3.判断
osFamily() == 'windows'

参考文章:

1.Android Studio 优先源码编译的framework.jar(android.jar)

https://blog.csdn.net/lei1217/article/details/71627916

2.Android Studio中解决framwork.jar和SDK api冲突的方法

https://blog.csdn.net/zhiwenwei/article/details/80592734

你可能感兴趣的:(AndroidStudio中使用自己编译的framewokr jar包编译)