在android studio中加入framework.jar的方法

在把一個老項目從eclipse遷移到android studio的過程中遇到了添加framework.jar的問題,在百度,google搜了幾篇文章,照着攻略實行了一遍,發現仍然無法用framework.jar覆蓋android sdk中的api,最後用英文在google中搜索,發現了這篇文章才解決問題,才知道那幾篇中文文章裏面少了至關重要的一點東西。英文文章鏈接(可能需要翻牆):https://kwagjj.wordpress.com/2017/08/10/using-framework-jar-in-android-studio/

簡要的描述下實現步驟:

1、將framework.jar放進module下的libs目錄下


2、在module下的build.gradle裏面添加這行代碼,然後sync

3、在module下的build.gradle中添加如下腳本,然後sync

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"
            println 'what' + sdkString
            new 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
            println "no iml found"
        }
    }
}
此腳本是爲了調整module下iml文件中的orderEntry的順序,讓framework.jar的優先級在android默認sdk的前面。添加腳本前:
<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK"/>
...
<orderEntry type="library" exported="" name="framework" level="project"/>

添加腳本後:

4、在project根目錄下的build.gradle中添加如下代碼:

allprojects {
    repositories {
        jcenter()
        google()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
        }
    }
}

然後就可以使用framework.jar中的API了,如果不行,rebuild一下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章