当前位置: 首页 > news >正文

网站建设与制作企业做效果图的兼职网站

网站建设与制作企业,做效果图的兼职网站,菏泽网站建设公司官网,艺术学校示范校建设专题网站Android有两种类型的API是不能经由SDK访问的。 第一种是位于com.android.internal包中的API。我将称之为internal API。第二种API类型是一系列被标记为hide属性的类和方法。从严格意义上来讲#xff0c;这不是一个单一的API#xff0c;而是一组小的被隐藏的API#xff0c;但… Android有两种类型的API是不能经由SDK访问的。 第一种是位于com.android.internal包中的API。我将称之为internal API。第二种API类型是一系列被标记为hide属性的类和方法。从严格意义上来讲这不是一个单一的API而是一组小的被隐藏的API但我仍将其假设为一种API并称之为hidden API。 Hidden API 例子 你可以查看一下android的源码并能找到一些变量、函数和类等都被hide属性标记了。 下面的例子就是在WifiManagerAPI 10源码中隐藏的变量。 另一个例子是在WifiManagerAPI 10源码中隐藏了setWifiApEnabled函数。 因此只要你看到hide属性那你看到的就是hidden API。 Internal和hidden API的区别 Hidden API之所以被隐藏是想阻止开发者使用SDK中那些未完成或不稳定的部分接口或架构。举个例子Bluetooth API在API 5Android 2.0上才开放在API 3 和4上都是用hide属性隐藏了。当这些API被验证和清理后Google的开发者会移除hide属性并让其在API 5官方化。很多地方在API 4 和5之间发生了变化。如果你的程序依赖某些隐藏的API当其部署到新的平台上时就有可能陷入困境。 对于internal API来说从来都没有计划将其开放出来。它就是Android的“内部厨房”对开发者来说应该将其视作黑盒。凡事都会有变化的。如果你依赖某些internal API也有可能在新的Android release上这些internal API发生变化从而令你失望。 总结一下区别 Hidden API 进行中的工作 Internal API 黑盒 Internal和hidden API的编译时 vs. 运行时 当你使用Android SDK进行开发的时候你引用了一个非常重要的jar文件——android.jar。它位于Android SDK平台的文件夹中SDK_DIR/platforms/platform-X/android.jar其中X表示API等级。这个android.jar移掉了com.android.internal包中所有的类也移掉了所有标记有hide的类枚举字段和方法。 但当你在设备上启动应用程序时它将加载framework.jar简单来说它和android.jar等同而其未移掉internal API和hidden API。但它对开发者来说并不能友好地访问因此我将向大家展示不通过反射如何使用这些API。 关于internal API还有一件事需要说明。Eclipse的ADT插件增加了一个额外的规则那就是禁止使用com.android.internal包中的任何东西。所以即便是我们可以拿到最原始的android.jar未删减版也没有轻松的办法通过Eclipse使用这些internal API。 你可以亲自检查一下。创建一个新的Android工程或者使用已有的。查看一下它引用的类库右击project Properties – Java Build Path – Libraries。 重要的总结internal和hidden API在SDK中是按照一样的方式处理的都从android.jar中移除了但internal API更惨的是还被Eclipse的ADT插件显式禁止了。 不通过反射使用internal和hidden API 这些文章的终极目标是让开发者能够不通过反射使用Internal和Hidden API。如果你完成了接下来部分中描述的步骤你将能使用这些Internal和Hidden API如同公开的API。你不再需要使用反射。 注如果你正在使用这些非公开的API你必须知道你的程序有着极大的风险。基本上无法保证在下一次的Android OS更新时这些API不被破坏也无法保证不同的运营商有着一致的行为。你自己决定吧。 接下来有三个场景 1. Internal 和hidden API都可用场景A 2. 只Hidden API可用场景B 3. 只Internal API可用场景C 场景A是B、C的总和。场景B是最简单的一个不需要对Eclipse的ADT修改。 场景A阅读Part1, 2, 3, 4, 5 场景B阅读Part1, 2, 3, 5 场景C阅读Part1, 2, 3, 4, 5 我解释了为什么我们不通过反射就会很难使用internal和hidden API。这是因为android.jar中就没包含这些API因此没人能够在编译时引用这些类。 这篇文章将描述如何还原最初的android.jar。这将允许我们像使用公开的API那样使用internal和hidden API。 如何得到原版android.jar 我们需要修改android.jar这样它才能包含所有的*.class文件包括internal和hidden API类。有两种办法 1 Android是一个开源工程。我们可以下载源码并搭建编译环境这样它就不能移除那些internal和hidden的类了。这个办法比较困难 2 每个模拟器或真机在运行时都会有一个等同android.jar的东西。我们可以从这里拿到jar文件提取出原始的.class文件并拷贝到Android SDK的android.jar中。 我将采用方案2。它易于开始还不需要搭建Linux环境及编译环境等。 从设备上获取framework.jar 你可以使用命令行adb pull从模拟器或设备上下载文件或者使用DDMS借助Eclipse或SDK中的应用。 注意模拟器通常在.dex文件中包含代码而真机一般在优化版的dex文件中包含代码——odex文件。操作odex文件比较困难这也是为什么我选择模拟器的原因。 与Android SDK中的android.jar等同的文件是framework.jar。这个文件位于设备的/system/framework/framework.jar adb pull /system/framework/framework.jar 当framework.jar从设备上下下来之后重命名为framework.zip并解压到独立的文件夹中看起来是这个样子的 classes.dex正是我们需要的。 创建framework-classes.zip 首先我们需要把.dex文件转换成.jar格式。你可以使用通用的工具dex2jar。只需要运行 dev2jar classes.dex 当转换结束时你应该得到了classes.dex.dex2jar.jar文件。重命名为framework-classes.zip。使用zip查看器进入到framework-classes.zip/com/android/internal/ 恭喜你你已经拥有了所有的.class文件包括internal和hidden API尽管截图只确认了internal部分。 创建original-android.jar Android SDK的android.jar位于ANDROID_SDK/platforms/android-X/android.jarX表示API等级。 拷贝android.jar成custom-android.jar。解压至custom-android文件夹。将framework-classes.zip中所有的.class文件拷贝到custom-android文件夹中你需要覆盖所有已经存在的.class文件。 然后压缩custom-android文件成original-android.zip。重命名为original-android.jar。 步骤总结 1. 选择你的目标平台X 2. 创建目标平台X的模拟器 3. 启动模拟器下载/system/framework/framework.jar 4. 重命名framework.jar - framework.zip 5. 从framework.zip中抽取classes.dex 6. 使用dex2jar工具将其转换成classes.jar 7. 重命名classes.jar - framework-classes.zip 8. 拷贝android.jar – custom-android.zip 9. 解压custom-android.zip至custom-android文件夹 10. 将framework-classes.zip中所有文件拷贝至custom-android文件夹覆盖存在的文件 11. 压缩custom-android文件夹成original-android.zip 12. 重命名original-android.zip - original-android.jar 打完收功。 总结 我们还原了android.jar使其包含所有的internal和hidden API的.class文件。这只是第一步。下一步将创建定制的android平台使其使用未删节版的android.jar并将其添加到Android SDK platforms文件夹中。 我已经展示了如何创建一个包含所有internal和hidden API的original-android.jar。 接下来的工作就是要修改已经存在的Android平台SDK_DIR/platforms/platform-X/android.jarX表示API等级。你可以直接使用Part2中创建的original-android.jar替换android.jar。但这样的话你的所有工程都将直接使用internal和hidden API而没有任何限制。这不够方便因为在多数的工程中你不希望这样。甚至你可能更希望禁止这些APIADT/android.jar的默认行为。但对于一些特定的工程你希望能够使用这些internal和hidden API。 为了达到这样的灵活性你需要创建一个新的自定义的Android平台。当不需要访问internal和hidden API时你只需使用原有的Android平台。当你使用这些API时你使用自定义的Android平台。 Android SDK文件夹结构 让我们看一下Android SDK树是如何组织的 我们需要“platforms”文件夹。看一下里面 这里列出了支持的Android平台。 现在我们看一下它是如何与Eclipse设定关联的。选择你的工程右击– Properties – Android。你将会看到一组支持的Android平台与…/platforms/folder相似。下面是截图 创建新的平台 为了创建一个新的平台我们需要拷贝android-9文件夹 - android-9-internals。让我们做一些修正 1. 删除其中的android.jar 2. 拷贝original-android.jar并改名为android.jar 3. 修改build.prop文件 … ro.build.version.sdk9 - ro.build.version.sdk-9 … ro.build.version.release2.3 - ro.build.version.release2.3.extended … 重启Eclipse。并确认你能看到新的平台。下面是我所看到的 为什么我选择API等级为-9这是因为它必须是一个数字而且它不能是9或者其它已经存在的API等级。否则你自定义的平台将不能被使用它在列表里可见但选中后也不能正常工作编译时仍然使用相应API等级的原始平台。 下面是引用类库的截图当前工程选中了自定义的平台 总结 在上一篇中我已经告诉你如何创建一个未删节版的android.jar。在这一篇中我向你展示了如何创建一个自定义的Android平台并在其中使用original-android.jar。这对于hidden API来说已经足够了。但对于internal API来说还需要另一步。这是因为ADT仍然不允许使用com.android.internal包中的类参见上图中的“forbidden”访问规则。下一节我将向你展示如何定制ADT来允许使用internal包中的类。 华丽的分割线 在实际的操作过程中我创建的自定义的android.jarAPI 10不能被Eclipse成功加载会出现以下的错误框如同网站上其它人操作的结果一样期待解决方案。 不过作者提供了可用的自定义的android.jar如果不想自己尝试的话可以直接从网站下载地址将在Part5中给出稍等。 为了能够使用Internal和Hidden API你需要 1. 创建自定义的original-android.jar包含所有的.class文件 2. 创建自定义的Android平台来使用original-android.jar 3. 修改ADT插件允许使用com.android.internal包只为Internal API 4. 创建新的工程引用自定义的Android平台本文中的例子 在本文中我将向你们展示如何使用那些Internal和Hidden API。 此外在本文的结尾我列出了一些自定义的Android平台它们都包含Internal和Hidden API。我附带了它们是为了可能你不想花太多时间在这方面但又想快速的尝试什么。 例子 创建一个新工程选择2.3.extender平台 下面是代码 这个代码使用了Internal APIPowerProfile和Hidden APIisWifiApEnabled。我不用使用反射就能编译并运行这些代码。 自定义平台 下面有些平台是我为自己创建的。只用拷贝它们到SDK_DIR\platforms文件夹下。这只是让Hidden API可用。对于Internal API你需要修改你的ADT插件。 API 3http://www.megaupload.com/?dS1F2MKYZ API 4http://www.megaupload.com/?dVUCTRI3Y API 7http://www.megaupload.com/?d7ITNILBK API 8http://www.megaupload.com/?dEXT5FKKT API 9http://www.megaupload.com/?dEXT5FKKT API 10http://www.megaupload.com/?dFCV78A9M 华丽的分割线 我尝试了其中的几个自定义平台发现internal 和hidden API真的是可用了但也有一些意外的问题如AlertDialog.Builder(Context context)居然说Context参数是多余的。。 没花时间去研究为什么会这样如果哪位童鞋知道原因告诉我哈~~
http://www.w-s-a.com/news/493099/

相关文章:

  • 杭州网站建设招聘网长沙网络销售公司
  • 网站制作一年多少钱免费做电子章网站
  • 信誉好的营销网站建设徐州市铜山新区建设局网站
  • 建行网站关于我们山西seo和网络推广
  • 1m带宽做网站怎么样深圳网站建设制作开发公司
  • 网站建设 服务内容 费用郴州网站建设公司哪里有
  • 网站关键词重要性育才网站建设
  • 网络安全形势下怎么建设学校网站wordpress最新主题下载
  • 自己建设网站需要什么条件.gs域名做网站怎么样
  • 网上做公益的网站推广手机卡返佣平台
  • 网站是公司域名是个人可以南京建设银行官方网站
  • 做互联网网站的会抓百度网盟推广 网站
  • 商务网站开发设计结论微信报名小程序怎么制作
  • 网站建设销售简历wordpress七比2
  • 制作网站报价工程项目查询哪个网站
  • 深圳移动网站建设制作公司网站建设的认识
  • 网站建设脚本语言有哪些想开网店哪个平台好
  • 视频网站用什么做的好深圳的小程序开发公司
  • 南京网站定制开发商城网站免费模板
  • 青海学会网站建设公司照片组合拼图
  • 中国建设银行福清分行网站爱站网权重查询
  • 外贸通网站建设网站建设7个主要流程图
  • 元气森林网络营销方式医疗网站优化怎么做
  • 手机网站制作报价表做网站公司做网站公司
  • 湖州网站设计吉林网站建设哪家好
  • 做存储各种环境信息的网站使用tag的网站
  • 阿里云用ip做网站网站开发员属于
  • 外链网盘下载南宁seo推广优化
  • 网站的推广方案有哪些此网站可能有
  • wordpress更改链接后网站打不开一键生成个人网站