在使用 Android Studio 編譯系統(tǒng)應用的時候砚殿,有時需要用到非公開的API粘茄,在以前侨核,一般是通過反射去調(diào)用隱藏的API圣絮,但是這樣就會存在性能隱患祈惶。這里介紹如何將 framework.jar 導入到 Android Studio 中,以去掉反射
1. 準備 framewrok.jar
因為我是做系統(tǒng)應用開發(fā)扮匠,經(jīng)常需要編譯整個系統(tǒng)源碼行瑞,所以 framework.jar 可以直接得到。路徑:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
改名得到 framework.jar
2. 把 framework.jar 放到項目中
把 framework.jar 放到 app 模塊的 libs 目錄下
3. 添加 app 模塊對 framework.jar 的依賴
依次打開 File –> Project Structure –> Modules 中找到 app 餐禁,在右邊選擇 Dependencies 選項卡,點擊左下角的 + 按鈕突照,選擇 File dependency 帮非,在彈出的 Select Path 窗口中選擇 libs 中的 framework.jar
4. 修改 Scope 為 Provided
在新增的 Dependencies 記錄的右邊,將 Compile 修改為 Provided 讹蘑,點擊 OK 保存修改末盔,Provided 的作用是只參與編譯,但不打包到apk中
5. 修改項目根目錄的 build.gradle 文件
在項目根 build.gradle 中加入以下內(nèi)容
allprojects {
repositories {
jcenter()
}
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << '-Xbootclasspath/p:app/libs/framework.jar'
}
}
}
6. 編寫代碼
按照以上5步修改完成后座慰,就可以寫代碼了陨舱,需要注意的是,隱藏的API依然關(guān)聯(lián)不到版仔,顯示紅色的游盲,但是可以順利編譯通過。
最后
解釋一下代碼的作用 allprojects
是要作用到所有的子模塊上蛮粮,tasks.withType(JavaCompile)
是在 javac 的 task 中加入一個參數(shù)益缎,就是在 Xbootclasspath
增加自己的 jar 包