`

使用内部(com.android.internal)和隐藏(@hide)API[第3部分,定制android平台]

 
阅读更多

在前一篇文章中我展示了如何创建定制的original-android.jar,包含内部API和隐藏API中的所有类。

接下的步骤很明显,就是修改现有的android平台(SDK_DIR/platforms/platform-X/android.jar)。您可以简单的用第2部分创建的original-android.jar替换android.jar,但这样您的所有工程都能够无限制的使用内部API和隐藏API。这不是很合适,因为在大多数工程中,您可能并不允许这样。而且,您基本上希望禁止使用这些API(这是ADT/android.jar的缺省行为),只是在少数工程中要用到内部和隐藏API。

为了达到这种灵活性,需要创建一个新的定制的android平台。当没有必要使用内部和隐藏API时,您使用原始的android平台。当需要访问内部和隐藏API时,您使用定制的android平台。

Android SDK目录树

让我们看看android SDK是如何组织的:

image5

我们需要"platforms”目录,进去瞧瞧:

image6

这里有一个支持的Android平台列表。

现在让我们瞧瞧这是如何与Eclipse设置关联起来的。选择一个Android工程,右键点击->Properties -> Android。您可以看到一个支持平台的列表(它反映的是…/platforms/文件夹)。下面是截图:

image9

创建新的平台

要创建一个定制的平台,需要复制android-9文件夹,命名为android-9-internals,然后做一些修改:

  1. 从android-9-internals文件夹删除android.jar。
  2. 复制original-android.jar,重命名为android.jar。
  3. 修改build.prop文件:

    …  

    ro.build.version.sdk=9 –> ro.build.version.sdk=-9

    …

    ro.build.version.release=2.3 –> ro.build.version.release=2.3.extended

重启eclipse,确认可以看到该新的平台,下面是我所看到的:

image2

为什么我会选择API Level -9? 那是因为必须为一个数字,而且不能是9(或其它已经存在的API Level),否则您的定制平台将不会使用(它会在列表中显示,但不会工作,编译时会取原始的相同数字的平台)。

下面是Libraries视图的截图(当定制平台选中时):

image10

总结

在前一篇文章中,我说明了如何创建一个android.jar的未经裁减版本original-android.jar。本篇文章中,我演示了如何创建使用该original-android.jar的定制android平台。这对于使用隐藏API足够了,但是对于使用内部API还需要更进一步。这是因为ADT仍然禁止使用com.android.internals包中的类(请看上面的截图)。在下一篇文章中,我将告诉您如何定制ADT,允许使用内部API。

分享到:
评论

相关推荐

    使用internal和 hide api

    这些API主要供Android系统内部使用,而不是设计给第三方开发者使用的。它们通常包含了Android框架中的一些核心功能和服务实现。 **特点**: - **不可预测性**:由于这些API主要用于内部,所以在新版本的Android中...

    android.jar的internal与hideApi

    然而,除了公开的API之外,Android还存在两类非公开的API:`internal`和`hideApi`。这些API通常不对外公开,但有时可能因为特殊需求或扩展功能而被开发者利用。 ### 1. 公开API (Public API) 公开API是Android官方...

    Android Material FlowLayout简单使用

    在Android开发中,Material Design是一种广泛采用的设计规范,它提供了丰富的UI组件和交互方式,提升了应用的用户体验。其中,FlowLayout是一种特殊的布局管理器,用于在水平或垂直方向上动态排列子视图,当一行或一...

    Android代码-直接访问安卓系统隐藏的 APIs 和资源

    The internal API is located in the com.android.internal package which is available in the framework.jar file from a real Android device, while the hidden API is located in the android.jar file with @...

    com.google.android.webview.apk

    webview全称叫做Android System WebView,它是Android生态系统的重要组成部分,也是Chrome浏览器的内核。可以让你的手机变得瞬间畅通,它会及时优化网页相关数据,有着接入式的操作体验数据,各种类型的应用程序可...

    com.google.android.webview

    android system webview 适配系统>=5.0

    android-26-带internal-telephony包.jar

    android sdk -26 带 com.android.internal.telephony 包的 jar, 下载后 将名称改为 android.jar 替换 anroid-sdk -> platform -> android-26 文件下的 android.jar 即可直接找到 telephony 下的类, 不会报错

    uniapp安卓离线sdk_Android-SDK@3.2.3.81011_20210826

    针对Android平台,uniapp提供了离线SDK——Android-SDK@3.2.3.81011_20210826,这是一款专为Android应用开发者设计的工具包,旨在简化开发流程,提高开发效率。本文将详细介绍这款SDK的主要特点、功能及使用方法。 ...

    android.jar

    当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 SDKDir\platforms\android-X 目录下(X 代表 API 级别),默认移除了所有的被@hide标识的方法或者类以及 internal 包下的类。。当应用在...

    android-hidden-api:一个提供对Android隐藏API和内部资源的访问的库

    内部API位于包com.android.internal ,可在framework.jar ,而隐藏的API位于具有@hide javadoc属性的android.jar文件中。 现在您知道了区别。 但是我将两者都称为隐藏API。 此存储库包含自定义android.jar ,可用于...

    android (7.0,7.1,8.0,8.1,9.0)对应的framework.rar

    【4.2到6.0的在已上传,文件太大,一次上传不了】当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 SDKDir\platforms\android-X 目录下(X 代表 API 级别),默认移除了所有的被@hide标识的...

    googleGson JsonObject json转换包

    包含以下java源文件: ...com.google.gson.internal.bind.CollectionTypeAdapterFactory.class com.google.gson.internal.bind.DateTypeAdapter.class com.google.gson.internal.bind.JsonTreeReader.class ...

    org.eclipse.swt.win32

    org.eclipse.swt.internal.image.JPEGArithmeticConditioningTable.class org.eclipse.swt.internal.image.JPEGComment.class org.eclipse.swt.internal.image.JPEGDecoder.class org.eclipse.swt.internal.image....

    关于引入com.sun.org.apache.xpath.internal.operations.String后右键RUN选项消失

    3. **使用标准API**:对于XML处理,优先考虑使用Java标准库提供的API,或者经过广泛测试和验证的第三方库。 4. **保持良好的编码习惯**:编写代码时,时刻注意代码的可读性和可维护性,及时清理无用的导入,使用清晰...

    Android Flowlayout:LinearLayout内部控件自动换行

    在Android开发中,布局管理器是构建用户界面的关键部分,它们负责组织和定位屏幕上的各个组件。LinearLayout是最常见的布局之一,它按照垂直或水平方向排列其子视图。然而,当需要在一个容器中动态地展示数量不定且...

    inside android / internal android

    Android操作系统作为全球最广泛使用的智能手机和平板电脑平台,其内部机制和架构对于开发者、技术爱好者以及任何对移动计算感兴趣的人来说,都是一个充满挑战和机遇的研究领域。"Inside Android / Internal Android...

    android (4.4,5.0,5.1,6.0)对应的framework.rar

    【7.0到9.0在下一个上传,文件太大,一次上传不了】当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar,它位于 SDKDir\platforms\android-X 目录下(X 代表 API 级别),默认移除了所有的被@hide标识...

    IDEA编译Gradle报错No signature of method Possible solutions asVersio

    在使用IntelliJ IDEA(IDEA)开发Java项目时,我们可能会遇到与Gradle相关的编译错误,如“`No signature of method: org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.DefaultVersionComparator....

    android 6.0 sdk源码

    Android 6.0 SDK源码是开发者深入了解Android操作系统工作原理的重要资源,特别是对于那些希望定制系统、编写系统级应用或优化性能的开发人员而言。API Level 23对应的是Android 6.0(Marshmallow)版本,这个版本...

    CallBlocker:呼叫阻止程序是一个Android应用程序,可在无需用户干预的情况下阻止来电。 此源代码是关于如何的? 我们可以使用内部API com.android.internal.telephony.ITelephony来访问endCall()函数-How to use the source code

    Android呼叫拦截器 步骤1: 在Android Studio中创建一个新项目 第2步: 创建一个AIDL文件夹 ...第三步: 现在是时候阻止所有来电 创建一个BroadcastReceiver class 将该代码添加到类中 package jovial.callbloc

Global site tag (gtag.js) - Google Analytics