Android Studio 導(dǎo)入系統(tǒng)jar包的正確姿勢

前言

前段時間負(fù)責(zé)了一個系統(tǒng)設(shè)置的項目,里面用到了大量的系統(tǒng)隱藏方法,所以自己用Eclipse打了一個系統(tǒng)jar包,但是導(dǎo)入到Android studio的時候,中間踩了很多坑,現(xiàn)在總結(jié)一下,防止大家踩坑。

正文

按照下面步驟一步一步來,基本不會出現(xiàn)大問題。

1、將系統(tǒng)jar包放到module的libs文件夾下

2、在Module下的build.gradle添加

provided files('libs/android_framework.jar')

注意 provided作用是只在編譯時使用,最終不會打包到Apk中
更新 :在Android studio3.0 后,providedcompileOnly 替代

3、在Project下的build.gradle文件中添加

   gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app/libs/android_framework.jar')         
    }
}

app/libs/android_framework.jar 為jar包路徑,app為Module名
注意:gradle.projectsEvaluated 是放在 allprojects 標(biāo)簽內(nèi)。

這個時候基本就算大功告成了,但是,你會發(fā)現(xiàn),使用系統(tǒng)隱藏方法的地方還是會爆紅,那是因為Android Studio在編譯時優(yōu)先使用系統(tǒng)的Sdk。

解決辦法:

找到Module下的.iml文件,在里面將你導(dǎo)入的jar包放在sdk之前,這樣Android studio編譯時優(yōu)先使用導(dǎo)入的系統(tǒng)jar而不是sdk中的。

通過代碼改變,在module的build.gradle中最后添加如下代碼重新編譯后,會發(fā)現(xiàn)順序變化

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 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
        }
    }
}

最終,Android studio在編譯時優(yōu)先使用導(dǎo)入的jar包,什么系統(tǒng)隱藏方法啥的,使用起來暢通無阻!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容