Android studio使用SDK隱藏API方法

前言:最近遇到一個問題,就是公司做自己的rom,對framwork有改動,添加了自己的api,那么問題來了,我們開發(fā)的階段使用的是android原生的環(huán)境,所以不可能調用得到自己定義的api,或者我們開發(fā)的是系統(tǒng)應用,需要調用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 (沒有的自己添加)下添加如下配置:

這個主要控制應用中調用的是android.jar的類還是我們加入的framework.jar,提升jar調用優(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里面已經有了,所以打包的時候就沒有必要帶上這個jar了,那么如何在Android studio下設置讓項目打包的時候能編譯通過,但是jar又不會編譯到apk里面呢?
只需要將build.gradle 文件中對應的implementation改為compileOnly就可以了。

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


(方法二調用SDK隱藏API方法:我自己驗證失敗報java常量池行數錯誤,這里貼一下:
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。
有關常量池的資料:)。

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

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容