AndroidStudio 更改jar包编译顺序优先于android.jar,使用@hide api

原博客地址:http://blog.sina.com.cn/s/blog_6e65e8cc0102wpmx.html



使用@hide 的api,可以通过反射,但反射速度慢,且使用不方便。

@hide的api,在编译的时候有问题,如果能编译成功,是可以调用的。那么问题来了,如何编译成功?

可以修改android源码,去掉@hide,编译生成该模块的framework.jar。Eclipse中直接引入该jar包在android.jar前即可。AndroidStudio就比较麻烦,需要做两步。

1.引入jar包,这个网上有无数方法,不表。注意设置compile->provide,gradle文件如下:

1
provided  files ( 'lib/android_packageManager.jar' )

原因就是我们只需要编译成功,不需要把这个包打到系统。



这时候在系统自动生成的iml文件中,可以看到一排orderEntry标签 ,也就是我们引用的所有jar包信息,把framework的jar包放到orderEntry的第一位,也就是

https://www.mobibrw.com/2016/5122

1
& lt ; orderEntry  type = "jdk"  jdkName = "Android API 22 Platform"  jdkType = "Android SDK"  / & gt ;

前面,这时候IDE就不报错了。

不过只是表象,方便我们写代码自动补全而已。而且iml文件是自动生成的,每次重启IDE都要重新改一下。

2.真正的编译需要在工程的gradle中增加编译选项

找到

1
2
3
4
5
6
7
allprojects  {
 
 
     repositories  {
      jcenter ( )
     }
}

在repositores同级增加

1
2
3
4
5
gradle .projectsEvaluated  {
     tasks .withType ( JavaCompile )  {
         options .compilerArgs .add ( '-Xbootclasspath/p:/lib/android_packageManager.jar' )
     }
}

Xbootclasspath/p:是Java编译的寻址优先设置,先找缺省路径还是全路径

1
Xbootclasspath / p :

不确定路径怎么填的,可以使用绝对路径,如

1
Xbootclasspath / p : D : / / mProject / app / lib / android_packageManager .jar' )

编译通过

Tips:

1.有时候@hide的api编译过了,其他地方又报错。查看一下报错的api,看看是不是对android版本有要求,framework.jar编译最好用较新的编译环境。

2.不要做过多的其他尝试,这两步绝对可以解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值