
Android Studio IDE 導(dǎo)入系統(tǒng)framework.jar包方案
Eclipse app 開(kāi)發(fā)中需要使用到 framework.jar ,引入方法很簡(jiǎn)單;但目前趨勢(shì) App 開(kāi)發(fā)都轉(zhuǎn)入Android Studio IDE 開(kāi)發(fā), AS IDE 對(duì)引入 framework.jar 方法角復(fù)雜,記錄導(dǎo)入不打包的第三方 jar 包方案,本文已 classes-full-debug.jar 作為測(cè)試jar包;
1. classes-full-debug.jar copy 到 /libs 目錄中;
2. AS IDE 引入 classes-full-debug 包
AS Module 右鍵 classes-full-debug.jar --> Add as Library --> 選擇需要引入jar包Module,當(dāng)前 Model build.gralde 增加了剛引入jar包
compile files('libs/classes-full-debug.jar')
3. 改變classes-full-debug.jar作用域?qū)傩?/h3>
Module --> Open Module Setting --> Dependencies --> libs/ classes-full-debug.jar --> 屬性改為Provided ;
Model build.gralde文件更新:
provided files('libs/classes-full-debug.jar')
4. 修改 classes-full-debug.jar 相對(duì)于Android.jar 優(yōu)先級(jí)
project 中 build.gradle 增加如下代碼:
allprojects {
repositories {
jcenter()
}
//添加以下代碼,使classes-full-debug.jar包編譯先于android.jar
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:setting\\libs\\classes-full-debug.jar')
}
}
}
完成上述流程后,系統(tǒng)部分API仍然會(huì)顯示紅色,且無(wú)法跳轉(zhuǎn)到定義處,給開(kāi)發(fā)帶來(lái)諸多不便,傳統(tǒng)解決方案 Module.iml 中手動(dòng)修改jar包引入順序,android.jar 包手動(dòng)放置最后;

但每次項(xiàng)目同步后,android.jar 優(yōu)先級(jí)高于framework.jar,也是比較郁悶的一件事情。
痛點(diǎn)解決方案:
內(nèi)部分享中,同事分享了一個(gè)新的解決方案,無(wú)需手動(dòng)調(diào)整jar 包優(yōu)先級(jí),在build.gradle 中添加如下代碼,實(shí)現(xiàn)自動(dòng)調(diào)整
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': "Android API 25 Platform", 'jdkType': 'Android SDK'])
groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
} catch (FileNotFoundException e) {
// nop, iml not found
}
}
}
注意事項(xiàng):“Android API 25 Platform”替換為編譯所使用的Android SDK版本