使用内部(com.android.internal)和隐藏(@hide)API[第3部分,定制android平台]
2014-04-13 20:58
337 查看
ZT: http://mogoweb.net/archives/104
本文翻译自https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-3-custom-android-platform/
在前一篇文章中我展示了如何创建定制的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是如何组织的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/61242e3125b74110883b995c684db2f1.png)
我们需要"platforms”目录,进去瞧瞧:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/9e0ca667380c1d86584bc3b70794d5ff.png)
这里有一个支持的Android平台列表。
现在让我们瞧瞧这是如何与Eclipse设置关联起来的。选择一个Android工程,右键点击->Properties -> Android。您可以看到一个支持平台的列表(它反映的是…/platforms/文件夹)。下面是截图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/8ddf119a5874c557ecf022113fff8fe0.png)
创建新的平台
要创建一个定制的平台,需要复制android-9文件夹,命名为android-9-internals,然后做一些修改:
从android-9-internals文件夹删除android.jar。
复制original-android.jar,重命名为android.jar。
修改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,确认可以看到该新的平台,下面是我所看到的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/13f241b6ad6196a5106aea0daa87c6dc.png)
为什么我会选择API Level -9? 那是因为必须为一个数字,而且不能是9(或其它已经存在的API Level),否则您的定制平台将不会使用(它会在列表中显示,但不会工作,编译时会取原始的相同数字的平台)。
下面是Libraries视图的截图(当定制平台选中时):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/3c503f0a6cdb78bfa8fc2bf4dd938606.png)
在前一篇文章中,我说明了如何创建一个android.jar的未经裁减版本original-android.jar。本篇文章中,我演示了如何创建使用该original-android.jar的定制android平台。这对于使用隐藏API足够了,但是对于使用内部API还需要更进一步。这是因为ADT仍然禁止使用com.android.internals包中的类(请看上面的截图)。在下一篇文章中,我将告诉您如何定制ADT,允许使用内部API。
本文翻译自https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-3-custom-android-platform/
在前一篇文章中我展示了如何创建定制的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是如何组织的:![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/61242e3125b74110883b995c684db2f1.png)
我们需要"platforms”目录,进去瞧瞧:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/9e0ca667380c1d86584bc3b70794d5ff.png)
这里有一个支持的Android平台列表。
现在让我们瞧瞧这是如何与Eclipse设置关联起来的。选择一个Android工程,右键点击->Properties -> Android。您可以看到一个支持平台的列表(它反映的是…/platforms/文件夹)。下面是截图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/8ddf119a5874c557ecf022113fff8fe0.png)
创建新的平台
要创建一个定制的平台,需要复制android-9文件夹,命名为android-9-internals,然后做一些修改:
从android-9-internals文件夹删除android.jar。
复制original-android.jar,重命名为android.jar。
修改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,确认可以看到该新的平台,下面是我所看到的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/13f241b6ad6196a5106aea0daa87c6dc.png)
为什么我会选择API Level -9? 那是因为必须为一个数字,而且不能是9(或其它已经存在的API Level),否则您的定制平台将不会使用(它会在列表中显示,但不会工作,编译时会取原始的相同数字的平台)。
下面是Libraries视图的截图(当定制平台选中时):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/17/3c503f0a6cdb78bfa8fc2bf4dd938606.png)
总结
在前一篇文章中,我说明了如何创建一个android.jar的未经裁减版本original-android.jar。本篇文章中,我演示了如何创建使用该original-android.jar的定制android平台。这对于使用隐藏API足够了,但是对于使用内部API还需要更进一步。这是因为ADT仍然禁止使用com.android.internals包中的类(请看上面的截图)。在下一篇文章中,我将告诉您如何定制ADT,允许使用内部API。
相关文章推荐
- 使用内部(com.android.internal)和隐藏(@hide)API[第3部分,定制android平台]
- 使用内部(com.android.internal)和隐藏(@hide)API ——[第三部分 定制android平台]
- 使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]
- 使用内部(com.android.internal)和隐藏(@hide)API ——[第四部分 定制ADT]
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 定制android.jar-[使用内部(com.android.internal)和隐藏(@hide)API]
- 使用内部(com.android.internal)和隐藏(@hide)API[第1部分,介绍]
- 使用内部(com.android.internal)和隐藏(@hide)API[第1部分,介绍]
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- 使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- android源代码分析一:使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- android源代码分析一:使用内部(com.android.internal)和隐藏(@hide)API ——介绍
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- Eclips 开发 apk 使用android内部(com.android.internal) API
- Android 内部API (android.internal)和隐藏代码(@hide)概述
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 3