美文网首页Android知识Android技术知识Android
在AS中导入修改后的android.jar编译问题

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

作者: zyyoona7 | 来源:发表于2016-08-11 18:25 被阅读2114次

    背景

    由于目前公司在开发机顶盒项目,和厂商合作,其中有些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开发的乐趣吧!

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/pzdssttx.html