在AS中导入修改后的android.jar编译问题

2017-01-14 15:50:48来源:http://www.jianshu.com/p/9eacb1d60601作者:zyyoona7人点击

第七城市
背景

由于目前公司在开发机顶盒项目,和厂商合作,其中有些jar包对android.jar中的内容做了修改。开始在Eclipse上开发,可以调整编译包的优先级,一直没什么问题;可是现在Android Studio越发成熟,再不使用Android Studio开发你就out啦!!!所以问题来了:AS默认是不支持改变编译优先级的,我们修改过的android.jar根本引用不到里面的内容


解决

Android Studio在编译时默认系统SDK的优先级最高,所以如果你更改了android.jar的内容,默认情况下是引用不到的~那么在Android Studio中如何将我们的jar包优先于android.jar编译?解决的办法有两种:


1.替换android.jar

第一种方法比较简单粗暴,把你的修改后jar包内的所有文件复制到你编译的SDK版本对应目录下面的android.jar中,进行文件的替换。这种效果亲测可以


2.改变build.gradle配置(推荐)

这种方法是谷歌搜到的,先附上链接How to put my libraries in front of android.jar by editing build.gradle in Android-Studio
步骤如下:


将你的jar包复制到libs目录下
打开File->Project structure...->找到刚才复制进的jar包->将scop改为Provided
然后找到你工程目录下的的build.gradle文件中
allprojects {    
repositories {
jcenter()
}
}

allprojects{...}中添加
gradle.projectsEvaluated {        
tasks.withType(JavaCompile) {
options.compilerArgs.add('Xbootclasspath/p:app//libs//xxx.jar')
}
}

这段代码,app是你的module名称,一般为app;xxx.jar是你jar包名称。
在你的module目录下找到对应的xxx.iml,和上一步的app名称是对应的,然后将xxx.jar的那条元素移动至系统SDK之上,即第一个位置,像这样:
<content>
...
</content>
<orderEntry type="library" exported="" name="xxx" level="project" />
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
...


OK了,这样就大功告成了~体验用as开发的乐趣吧!




第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台