Android studio使用SDK隱藏API方法

前言:最近遇到一個問題,就是公司做自己的rom,對framwork有改動,添加了自己的api,那么問題來了,我們開發(fā)的階段使用的是android原生的環(huán)境,所以不可能調(diào)用得到自己定義的api,或者我們開發(fā)的是系統(tǒng)應(yīng)用,需要調(diào)用SDK中的隱藏API方法,那么為了在Android Studio上編譯通過,我們只能把framwork.jar單獨引進來。

Adnroid Studio 使用SDK隱藏API的方法:

  1. 編譯 Android 源碼

  2. 找到 \out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar 文件,拷貝出來,重命令 framework.jar。

  3. 拷貝 framework.jar,放到 android studio 工程 app/libs 目錄下。

  4. 修改android studio工程根目錄的 build.gradle 文件,在 allprojects (沒有的自己添加)下添加如下配置:

這個主要控制應(yīng)用中調(diào)用的是android.jar的類還是我們加入的framework.jar,提升jar調(diào)用優(yōu)先級

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

另外一種改法是修改model下面的iml文件,把sdk移到最后,這樣studio就會優(yōu)先使用我們自己的framework.jar;

  1. 修改android studio工程目錄 app/build.gradle文件,dependencies 中添加 framework.jar。
dependencies {
    implementation provided files('libs/framework.jar') 
    // Android Studio 3.0 之前使用 compile files('libs/framework.jar')
}
  1. 同理添加其他報錯API的jar包,例如 core.jar
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app/libs/framework.jar;app/libs/core.jar')
        }
    }
}

dependencies {
    implementation provided files('libs/framework.jar')
    implementation provided files('libs/core.jar')
    // Android Studio 3.0 之前使用 compile files('libs/framework.jar')
    // Android Studio 3.0 之前使用 compile files('libs/core.jar')
}

此方案驗證成功。
但是新的問題又來了,framwork.jar非常大,而且在rom里面已經(jīng)有了,所以打包的時候就沒有必要帶上這個jar了,那么如何在Android studio下設(shè)置讓項目打包的時候能編譯通過,但是jar又不會編譯到apk里面呢?
只需要將build.gradle 文件中對應(yīng)的implementation改為compileOnly就可以了。

dependencies {
    // Android Studio 3.0 之前使用 provided files('libs/framework.jar')
    compileOnly files('libs/framework.jar') 
}


(方法二調(diào)用SDK隱藏API方法:我自己驗證失敗報java常量池行數(shù)錯誤,這里貼一下:
1、同上考出framework.jar;
2、使用 Android SDK Manager 下載SDK,拷貝出SDK目錄的 android.jar。
3、使用 Beyond Compare 工具比較二者,將 framework.jar 中的同名文件拷貝到 android.jar 中進行覆蓋。
4、使用 新合成的 android.jar 替換原SDK目錄的 android.jar。
5、如果還有其他API報錯,也可用同樣方法,在 \out\target\common\obj\JAVA_LIBRARIES 目錄找到報錯API的jar包,合成進 android.jar。
有關(guān)常量池的資料:)。

?著作權(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ù)。

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    wgl0419閱讀 6,603評論 1 9
  • 紅塵囂 笙歌落 此情未央 卻道離殤 那年今日 一邂逅,終難忘 夢里繁華落盡 惆悵了輕狂 紅妝初上 漢霄蒼茫 鐵騎故...
    桃之夭妖妖閱讀 388評論 0 1
  • 《我,開始想你》 1 我站在你遺忘的記憶里 當太陽按時落下時 我,開始想你 2 月亮習慣了黑暗 而我,習慣了想你 ...
    麥茫閱讀 439評論 0 5
  • 第二次小組會,和大家見面好開心呀,會議本來是一個半小時,后來臨時決定徹底會議,支持到每一位同學。 聞雅助教說我面相...
    葉子卷閱讀 244評論 0 0

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