【Android Studio】AS 使用記錄02(導(dǎo)入系統(tǒng)framework.jar)


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)放置最后;


image_1avveruh812d4vso129e1a6tq909.png-79.8kB
image_1avveruh812d4vso129e1a6tq909.png-79.8kB

但每次項(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版本

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

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,111評(píng)論 25 709
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,879評(píng)論 2 45
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,590評(píng)論 19 139
  • 最近比較忙,沒(méi)時(shí)間動(dòng)筆畫(huà)畫(huà)。抽空用手機(jī)指繪兩張過(guò)過(guò)癮。
    一輩子都是不良人閱讀 228評(píng)論 0 4
  • Flex(Flexible Box)意為"彈性布局" Webkit 內(nèi)核的瀏覽器,必須加上-webkit前綴。 注...
    索哥來(lái)了閱讀 1,110評(píng)論 0 0

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