Tho*_*ann 82 android android-source android-sdk-2.3
我想重建Android SDK(或者更确切地说只是android.jar)以包含隐藏和内部API.
我找不到任何关于如何解决这个问题的文档或讨论.我已经设置了一个能够构建cm7的Ubuntu CyanogenMod构建环境.
现在,我读到make SDK将构建SDK,但我想构建一个SDK,其中包含使用@hide标记为隐藏的方法和字段.这可能吗?
我想要做的是更改使用隐藏API的应用程序,为了重建它,我想使用修改后的SDK.
小智 65
这是我经常使用隐藏的api.
Bja*_*sen 41
我已经对此做了一些调查,我的结论很简单:如果没有相当多的工作,这是不可能完成的.阅读本答案的其余部分,了解我所发现的详细信息.
android.jar实际上由"公共API"的framework.jar和core.jar被发现在system/frameworks/该设备上.android.jar是一种我称之为Java库的头,实际字节代码中的所有实现都只是一个throw new RuntimeException("stub");,这允许你构建android.jar(例如在Eclipse中),但必须在设备或模拟器上执行.
Android SDK的公共API由不带有@{hide}javadoc注释前缀的类/方法/字段定义.即所有未注释的内容都包含在SDK中.
android.jar从位于源中内置out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates本身由工具生成DroidDoc位于build/tools/droiddoc.
DroidDoc是生成实际Android SDK文档的工具(可能改编自javadoc,或使用javadoc).作为一个副作用,可能因为它已经解析了所有的javadoc,它也会喷出android存根,然后编译成android.jarSDK中分发的存根.
因此,要包含您可能隐藏的内容,如果您只想包含特定部分,只需删除@hide注释并重建SDK即可.
但是,如果你想要包含所有隐藏的部分,事情会变得复杂得多.您可以修改DroidDoc(相关源build/tools/droiddoc/src/Stubs.java),以便不会将任何内容检测为隐藏.这是非常简单的,我已经尝试过,但是生成的存根根本不会编译.
我现在的结论是,这根本不可行.如果删除检测隐藏注释的DroidDoc部分生成的存根,则根本无法编译,并且需要相当多的工作才能正确编译.
所以我对你的问题的回答是:不,如果不做很多工作,就无法做到这一点.抱歉.
关于该mkstubs工具的附注.mkstubs在构建SDK插件时使用,即您可以在供应商的Android SDK管理器中找到的插件,例如Samsung为您提供针对Samsung手机特定内容的附加API.mkstubs与DroidDoc存根生成过程大致相同,但是它不使用@hide注释,它使用一个.defs文件来描述要在SDK插件中包含或排除的包/类/字段.
然而,这一切无关的问题,如在Android SDK构建并不能使用该mkstubs工具.(不幸.)
ken*_*ytm 29
我们可以从Android平台重建*.jar文件.
首先,将ADB连接到您的设备.然后运行:
adb pull /system/framework/core.jar .
adb pull /system/framework/framework.jar .
Run Code Online (Sandbox Code Playgroud)
在core.jar包含标准的Java库(java.*)和framework.jar包含了Android库(android.*).这还不可用,因为实际文件是DEX格式,而不是JAR格式.
我们可以使用dex2jar等工具将这些DEX格式的*.jars转换为真正的JAR :
dex2jar core.jar
dex2jar framework.jar
Run Code Online (Sandbox Code Playgroud)
然后使用"添加外部JAR ..."(假设您正在使用Eclipse ADT)拉入这些罐子
Project ? Properties ? Java Build Path ? Libraries ? Add External JARs...→(选择core-dex2jar.jar和framework-dex2jar.jar从上面).这将使您能够使用内部和一些Java 7 API.(据我所知,生成的APK不包含来自JAR的任何实际代码.)
dev*_*ant 16
对于Lollipop来说,流程略有不同:
从棒棒糖设备获取/system/framework/arm/boot.oat
使用'java -jar oat2dex.jar boot boot.oat'
ps:可能你需要为'framework_classes2.dex'重复步骤4-6
Blu*_*ell 15
Sony Ericson的Erik Hellman解释了如何访问隐藏的Android API:
http://vimeo.com/30180393 (嗯链接似乎不起作用).
转到DroidCon网页第2天向下滚动到使用隐藏的API 10:15,你可以在那里观看.
链接正在消失!
我发现了这个:http://skillsmatter.com/podcast/os-mobile-server/hidden-api dunno它会持续多长时间
Android SDK中的官方API通常足以满足大多数普通应用程序的需求.但是,有时开发人员需要访问未在官方API中发布的内部系统服务,API和资源.幸运的是,这些API仍然可以通过一些巧妙的技巧获得,并且在Android上开发新的创新解决方案时通常很有用.在本课程中,您将学习如何访问和使用这些隐藏和受保护的API,它们的使用限制以及如何在多个供应商设备和Android版本中以安全和控制的方式使用它们的一些技巧.观众将看到一些您通常无法使用Android进行的高级演示.期待一个相当高级的会议,在Android平台的内部有很多见解.
Zor*_*orb 12
试着看看这个:
这些文章的最终目标是为开发人员提供内部和隐藏API的强大功能,而无需使用反射.如果您完成了下面几个部分中描述的所有步骤,您将能够使用内部和隐藏 API,就像它们是公共开放API一样.不需要反思.
但是,如果您使用这些非公共API,那么您应该意识到您的应用程序存在很大风险.基本上无法保证下次更新Android操作系统时不会破坏API.甚至不保证来自不同供应商的设备之间的一致行为.你完全靠自己.
您可能想要遵循三种方案:
- 启用内部 API 和隐藏 API(方案A)
- 仅启用隐藏的 API(方案B)
- 仅启用内部 API(方案C)
场景A是B和C的总和.场景B是最简单的场景(不需要修改eclipse ADT插件).
| 归档时间: |
|
| 查看次数: |
51611 次 |
| 最近记录: |