需求:import com.android.internal.telephony.Phone;

症状:the import xxxxxx cannot be resolved

诊断:android的SDK的目录里面明明是有\sdk\sources\android-15\com\android\internal\telephony 这样的目录。不能import的原因是,\sdk\platforms\android-x\android.jar文件中\com\android\internal\目录下面只有util\Predicate.class文件,所以在Eclipse里面import的时候只提示有com.android.internal.util。但是,模拟器和真实手机的/system/framework/framework.jar 库里面是有这些internal API的实现的。

原因:google反对使用internal下面的API做开发,但是在真机这些API是可以用的。另外,在ADT插件中,Google做了一个 Access Rules。打开Java Build Path->Libraries->android.jar->access rules 可以看到:Forbidden: com/android/internal/**

解决:分两步,第一是把class文件加入到android.jar文件内。 第二是去掉access rules

第一步:class文件可以从模拟器/真机的/system/framework/framework.jar 文件里提取,用dex2jar这个工具。提取了之后塞进android.jar文件就OK了。如果从API level 比较高的设备需要提取framework.odex文件,然后用baksmali+smali等工具处理。

第二步:修改eclipse的adt插件的bytecode来绕过这个限制。找到eclipse的plugin 插件,找到这个文件com.android.ide.eclipse.adt_*.jar,做个备份,然后解压缩,找到com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class 这个文件,用notepad++打开。因为notepad++看不懂二进制的部分,所以只会修改字符部分,不会乱动二进制的部分。找到这个字符串: “com/android/internal/**”.  把internal中某个字符替换掉,这样字符串长度不会变。然后保存。然后重新打包。然后重启Eclipse。不出意外的话,在Access Rules里面已经可以看到修改后的字符串了。限制去掉了。

这里的内容节选自下面这篇英文博客,原文里面图文并茂,更加详细。

https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/

Android 如何使用internal 和 hidden API相关推荐

  1. 千里马android framework开发解决Accessing hidden method限制,让应用访问隐藏方法(需要可以修改系统源码方案)

    hi,粉丝朋友们大家好! 今天来给大家分享一下,就是经常大家会做安卓系统开发工作问到一个问题,那就是我如果framework代码中增加了一个方法啥的,但是我又不想公开给第三方应用知道,只想让我系统的应 ...

  2. 【Unity】打包报错 com.android.buil.gradle.internal.tasks.workers$ActionFacade

    问题的发生 Unity版本:Unity 2020.3.0f1c1 (64-bit) 直接使用Unity打包,打包报错 Console报错: 有些没存截图 但是大概内容是这样 gradleOut\uni ...

  3. Android P阻止调用非sdk api后,Atlas该何去何从

    0.背景 自从Android 9.0后,Android就已经开始着手阻止app开发调用非sdk的api,也就是被标记为@hide的变量.函数.类不可以通过反射调用,否则会提示NoSuchMethod异 ...

  4. java.lang.NoClassDefFoundError: com/android/build/gradle/internal/ToolingRegistryProvider

    执行 linux机器上 执行gradle 构建 [root@uranuspreapp30 app]# gradle clean build --info > /opt/test1.txtFAIL ...

  5. android 4.2 noclassdeffounderror,NoClassDefFoundError:android.support.v7.internal

    运行Android 4.2的三星设备上的Android appcompat v7库存在问题.在我的开发者控制台中,我不断遇到以下堆栈跟踪崩溃: java.lang.NoClassDefFoundErr ...

  6. 连接Android与ASP.NET Core Web API的完整教程

    目录 准备数据库 ASP.NET Core Web API项目 创建新的ASP.NET Core Web API项目 实体 导入EF Core 创建DbContext 将连接字符串添加到appsett ...

  7. Android:SQLiteOpenHelper数据库的两套API

    SQLiteOpenHelper数据库的两套API 目录 Android:sqliteopenHelper数据库的两套API 一.目录结构 二.类:MainActivity 三.类:MyopenHel ...

  8. Android P+通过反射调用系统API实现高级功能

    Android P+通过反射调用系统API实现高级功能 1. 打开隐藏API 1.1 导入FreeReflection包 1.2 打开隐藏API 2. 反射系统服务并调用相应方法 通过反射调用系统AP ...

  9. Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 10

    我的android项目之前一直运行正常的,没有错误: 今天看源码,svn管理的bin和gen每次都会重新编译,想把这两个目录从svn管理中去掉,然后在svn端将bin和gen目录删除了,并没有更新到本 ...

最新文章

  1. ATS 5.3.0分级缓存
  2. 职场笔记[0702]:用户体验和创业
  3. Windows 2003 AD升级到 Windows 2008 AD
  4. 用 Parser Combinator 解析 Cirru 的缩进语法
  5. javascript高级程序设计---Event对象二
  6. 信号的基本概念以及信号的产生
  7. 利用python脚本程序监控文件被修改
  8. 深度学习第五课-训练注意事项与框架使用
  9. 二维数组找鞍点c语言,怎么求一个二维数组的鞍点
  10. pip和pip3 换源
  11. FPGA入门程序(1)——流水灯
  12. 今日头条的企业服务产品线
  13. 希尔密码 matlab,非数学专业线性代数教学设计
  14. 图像超分辨率重建原理学习
  15. python数据处理-整理表格数据
  16. a-table的数据内容特定处换行处理
  17. 文字转语音在线转换方法
  18. 各种语言随机数的产生方法
  19. [Tree Breadth First Search] 二叉树的最大深度
  20. 【Linux】在Windows 10环境下安装适用于 Linux 的子系统 (WSL安装指南)

热门文章

  1. RabbitMQ 原理相关
  2. android AlertDialog的基本属性以及创建方法
  3. Linux放大缩小字体的快捷键
  4. 基于paddle的柠檬实战
  5. Linux硬盘分区,格式化,分区
  6. 程序员也要学会生活,今天自己看教程学做芝士蛋糕
  7. 数位屏快捷键怎么设置?绘王GT-156手绘屏快捷键设置教程
  8. 围住神经猫源码下载地址 火爆的网站引流游戏 微信公众号最快加粉丝游戏
  9. 100种思维模型之长远思考思维模型-63
  10. 中专介绍自己的专业计算机作文,中职学生自我介绍作文