专栏名称: 开发者全社区
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
郭霖  ·  提升 WebView ... ·  4 天前  
郭霖  ·  iPhone 到 Android ... ·  1 周前  
郭霖  ·  Android Surface截图方法总结 ·  1 周前  
stormzhang  ·  打工人可以薅点羊毛​了 ·  6 天前  
51好读  ›  专栏  ›  开发者全社区

如何不使用反射调用系统隐藏API-Android Studio使用自定义framework.jar

开发者全社区  · 公众号  · android  · 2017-04-08 09:12

正文

相关阅读:

吊炸天!74款APP完整源码!

两个开源的Android App,包含后台,直接拿去用: 每日趣闻/ Android 炫酷音乐播放

Android MVP Plugin,一键完成MVP结构代码编写

作者:为何是Hex的昵称
简书:http://www.jianshu.com/u/0c6ff6654a6c

开发中,有时需要用到非公开的API,在以前,一般是通过反射去调用隐藏的API,但是这样就会存在性能隐患。这里介绍如何将 framework.jar 导入到 Android Studio 中,以去掉反射 

1. 准备 framewrok.jar

因为我是做系统应用开发,经常需要编译整个系统源码,所以 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 中加入以下内容

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

6. 编写代码

按照以上5步修改完成后,就可以写代码了,需要注意的是,隐藏的API依然关联不到,显示红色的,但是可以顺利编译通过。

最后

解释一下代码的作用 allprojects 是要作用到所有的子模块上,tasks.withType(JavaCompile) 是在 javac 的 task 中加入一个参数,就是在 Xbootclasspath 增加自己的 jar 包

看完本文有收获?请分享给更多人

Java和Android架构

欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。搜索微信公众号:JANiubility。

公众号:JANiubility