如何重写Android 5.0 新增API
来源:互联网 发布:r语言与matlab 大数据 编辑:程序博客网 时间:2024/06/05 02:12
Context:
一个项目需要重写Android Resource类getDrawable方法,在系统调用Resource.getDrawable时进行拦截,分两种情况:A情况仍旧走正常的调用;B情况则写定制的逻辑。
第一次尝试:
新建一个Resource的子类,并重写getDrawable方法。1.正常调用是super.getDrawable 2.非正常时写自己的逻辑。
可发现在5.0上报错,5.0以下就没问题。
第二次尝试
上官网查了下,发现原来Google在Android 5.0上,新增了一个getDrawable(int id, Resources.Theme theme),系统不会再调用getDrawable(int id)方法,那当然也就拦截不到了,B情况的定制逻辑也就失效了。
把SDK的target调到5.0,重写getDrawable(int id, Resources.Theme theme),当然就ok了。可问题是我要在SDK4.+的情况下开发,那怎么办?
两种做法:在子类新建getDrawable(int id, Resources.Theme theme)进行重写,但是我还需要调用super.getDrawable(int id, Theme theme)方法。在4.+的SDK环境下super即Resource是没有这个办法的,那就没法实现A情况。这可怎么办。
用1.反射调用这个方法2.在方法名上加注释@TargetApi{22}
可问题是反射、注解都没办法实现super.getDrawable这个调用的。
第三次尝试
1.在项目中新建一个android.content.res包结构,并建立Resouce类。
2.将Resource的源码复制到该类中,但是因为系统隐藏API等,可能会报错。
3.把所有方法的方法体内容都删除,返回值是对象的就return null,是基础类型的就随便return 基础类型,void就return。(因为SDK中的API是不会打包到APK中的,只是保持了API的引用,安装到手机上,会自动调用ROM中的相关方法,所以这个复制的类只是为了让项目编译通过而已)。
4.给该类加上getDrawable(int id, Resources.Theme theme),这样我们子类重写Resource方法时,就可以调用super.getDrawable(int id, Resources.Theme theme).。
第四次尝试
大功告成,但发现程序Run as时没问题,但是打包就有问题了。
原因是打包会 调用混淆功能,Resource因被我们复制的类替换了SDK中的类。可是导出APK时不包含这个Resource类的,找不到引用就报错了。可实际上只要安装到手机上,就会调用系统ROM中的Resource类,所以不会产生实际的影响。也就是这个提示是没必要的,那怎么做呢?
在混淆的配置文件proguard-project.txt中加入
-dontwarn android.content.res.**
好了这才是大功告成了。
- 如何重写Android 5.0 新增API
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- android 5.0 API新增特点和改进
- Android 5.0 API新增和改进
- Android 5.0 API新增和改进
- 工厂模式(静态工厂模式、工厂方法模式、抽象工厂模式)
- strlen函数的实现
- 014.定义数组
- 【特种兵Word教程】如何在Word2013中打开PDF文件并编辑?
- css中padding 和 margin的格式
- 如何重写Android 5.0 新增API
- python简单爬取热门文字段子并自动浏览
- Nginx 反向代理Apache
- ZOJ.2952 Find All M^N Please【数学】 2015/10/20
- android自定义状态栏颜色
- 《shell从入门到精通》笔记
- jquery动态网格瀑布流插件Wookmark
- BaseAdapter......
- win+Apache+mod_wsgi部署python程序-apache2.2+python2.7