美文网首页
Android O构建具有隐藏和内部API的framework.

Android O构建具有隐藏和内部API的framework.

作者: 阿拉贡居民 | 来源:发表于2021-10-13 16:36 被阅读0次

    一、Android 隐藏API和类介绍

    Android 有两种类型的 API 不能通过 SDK 访问。一种是在 com.android.internal 包中的 API(源码路径为framework/base/core/)。另一种是被标记为 @hide 属性的类和接口。
    对于internal API来说,从来都没有计划将其开放出来。它就是Android的“内部厨房”,对开发者来说,应该将其视作黑盒。
    Hidden API之所以被隐藏,是想阻止开发者使用SDK中那些未完成或不稳定的部分(接口或类),因为其可能会在后续的版本中被修改或者移除。
    当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 sdk-platform-{android版本}-android.jar。SDK 中默认移除了所有的被@hide标识的接口或者类以及 internal 包下的类。
    当应用在设备上运行时,它会加载 framework.jar。简单来说,framework.jar 和 android.jar 等同,但是没有移除 internal API 和 hidden API。

    二、获取带有隐藏和内部API接口的framework.jar

    网上的方法很多,感觉挺麻烦, 我这边是直接编译android os源码,拿到classes.jar就可以。

    1. 编译Android系统源码(eng版本)
    2. framework源码编译出来的jar路径如下:
      out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
    3. 重命名, out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar ----》framework.jar

    三、Android Studio导入framework.jar

    1. 工程目录创建libs目录。
    2. 复制framework.jar包到libs目录,
    3. 模块build.gradle添加 compileOnly files('libs/framework.jar')
    4. 全局build.gradle添加
      allprojects {
      //.... 省略
      gradle.projectsEvaluated {
      tasks.withType(JavaCompile) {
      options.compilerArgs << '-Xbootclasspath/p:app/libs/framework.jar'
      }
      }
      }

    四、测试调用系统隐藏接口
    通过调用android.os.SystemProperties获取系统属性接口,通常我们使用反射获取系统属性,这里我们可以直接使用SystemProperties接口。


    获取系统属性

    五、参考博客:
    如何构建具有隐藏和内部API的Android SDK?
    Android Studio 加载第三方jar包并提高framework.jar包优先级
    如何使用hide掉的类及接口
    怎样查看并且使用 Android 隐藏 API 和内部 API

    相关文章

      网友评论

          本文标题:Android O构建具有隐藏和内部API的framework.

          本文链接:https://www.haomeiwen.com/subject/jpqeoltx.html