自定义android.jar(包含internel,hide)
来源:互联网 发布:linux ifconfig udp 编辑:程序博客网 时间:2024/05/22 13:25
http://rudolph.iteye.com/blog/1319942
在Eclipse开发中,我们可能会需要引用android的hide或internals或自己添加到源码中的接口
所以公共api包无法满足我们的要求,为了方便开发。需要自定义android.jar,实质上就是把源码中的jar拖出来用,详细步骤如下。
在查阅了一些资料后,及验证后整理如下:
一、在源码中找到编译好的jar包。
地址如下:out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar
这个jar包, 这里面包含了framework中的包括hide和internal以及你自己添加的属性及方法
二、找到公共AndroidSDK下的jar包。
在你的AndroidSDK目录android-sdk-windows\platforms下找到对应以上源码版本下的android.jar
三、合并覆盖jar包。
(按照他人提供的资料,直接解压两个jar包,拷贝,然后重新打包的话,我打包的新的android.jar无法正常使用,原因未知)
解决方法如下:同时用rar打开两个jar包, 然后直接将上述的classes.jar里的东西全部拖到android.jar下,覆盖,然后直接打包。这样新的android.jar就可以正常使用了
四、取消ADT对internal的使用限制
(在修改文件不要直接用记事本打开修改,用UE或其他支持十六进制编辑的工具,搜索2A 2A即**这两个字符
然后把internal的l的16进制码6C改成78即x,然后添加进jar包即可。
要不然会导致Unsupported major.minor version 8241.8224的错误,在尝试之前请先备份ADT jar)
这对Hidden API来说足够了。但对Internal API来说,仍然还有一个包袱:Eclipse的ADT插件。
它限制使用com.android.internal包中的任何类。
1) ADT源码可以下载。因此,删除/修改代码中的某些代码,从而编译出一个新的ADT是可以的。麻烦的是你需要搭建64位Linux系统,下载源码,编译等。它需要花费一些时间。当有新的ADT版本时,你需要重来一遍。
2) 另外的方法就是修改ADT的字节码。用一个类似于“com/android/internax/**”的字符串替换“com/android/internal/**”。
1. 关闭Eclipse
2. 从Eclipse的plugin文件夹中拷贝出ADT插件的jar文件
3. 重命名.jar -> .zip,然后解压至独立的文件夹
4. 找到com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class文件
5. 用“com/android/internax/**”替换“com/android/internal/**”
6. 压缩这个文件夹
7. 重命名 .zip -> .jar
8. 用修改后的jar替换原始的ADT jar文件
9. 启动Eclipse
五、创建自定义Android平台以方便随时切换工程引用的api版本
为了达到这样的灵活性,你需要创建一个新的自定义的Android平台。当不需要访问internal和hidden API时,你只需使用原有的Android平台。当你使用这些API时,你使用自定义的Android平台。
(假设当前操作源码为2.3.1)为了创建一个新的平台,我们需要拷贝android-9文件夹 -> android-9-internals。让我们做一些修正:
1. 删除其中的android.jar
2. 拷贝新的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。并确认你能看到新的平台。
最后,享受便捷的开发吧。
- 自定义android.jar(包含internel,hide)
- 自定义android.jar(包含internel,hide)
- 自定义android.jar(包含internel,hide)
- 自己制作Android包含@hide接口的SDK
- 编译包含隐藏API的Android SDK(被@hide隐藏)
- Android动态加载包含so文件的jar的自定义view控件
- android hide
- AndroidStudio 更改jar包编译顺序优先于android.jar,使用@hide api
- AndroidStudio 更改jar包编译顺序优先于android.jar,使用@hide api
- AndroidStudio 更改jar包编译顺序优先于android.jar,使用@hide api
- Android Studio生成包含assets的Jar
- Cordova 自定义插件,包含有Jar包的插件
- android 打包自定义JAR包
- android 打包自定义JAR包
- Android 打包自定义JAR包
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]
- 定制android.jar-[使用内部(com.android.internal)和隐藏(@hide)API]
- C#关于DateTime获得当前日期时间的格式与用法
- 实训心得_魏明伟
- 【Linux Device Driver】—(1)—Char Drivers——代码
- 关机屏蔽power键
- php上传文件类型大全
- 自定义android.jar(包含internel,hide)
- ubuntu下codeblocks更改调试终端
- linux驱动模块开机自动加载,以及应用程序开机自启动
- 上海斗地主攻略超级系列3——出牌细节
- hook键任意键唤醒屏幕 黑屏时hook键挂断电话
- 下拉菜单效果的实现方法--纯css实现
- Windows Live Messenger/MSN无法登录
- 解决Can't create handler inside thread that has not called Looper.prepare() inside AsyncTask
- firefox,ie,chrome禁止浏览器缓存