android jar 反射,android 第三方jar库 反射得到自己的资源ID
做jar,jar代码获取资源不能直接引用 R.xx.name,
有两种方法:
1.通过方法: int android.content.res.Resources.getIdentifier(String name,String defType,String defPackage)
2.通过反射
第一种方法比较常见,主要看第二种方法:
public class ResoureExchange {
private static final String TAG = ResoureExchange.class.getName();
private static ResoureExchange self;
private Context mContext;
private static Class> CDrawable = null;
private static Class> CLayout = null;
private static Class> CId = null;
private static Class> CAnim = null;
private static Class> CStyle = null;
private static Class> CString = null;
private static Class> CArray = null;
public static ResoureExchange getInstance(Context context){
if(self == null){
self = new ResoureExchange(context);
}
return self;
}
private ResoureExchange(Context context){
this.mContext = context.getApplicationContext();
try{
CDrawable = Class.forName(this.mContext.getPackageName() + ".R$drawable");
CLayout = Class.forName(this.mContext.getPackageName() + ".R$layout");
CId = Class.forName(this.mContext.getPackageName() + ".R$id");
CAnim = Class.forName(this.mContext.getPackageName() + ".R$anim");
CStyle = Class.forName(this.mContext.getPackageName() + ".R$style");
CString = Class.forName(this.mContext.getPackageName() + ".R$string");
CArray = Class.forName(this.mContext.getPackageName() + ".R$array");
}catch(ClassNotFoundException e){
Log.i(TAG,e.getMessage());
}
}
public int getDrawableId(String resName){
return getResId(CDrawable,resName);
}
public int getLayoutId(String resName){
return getResId(CLayout,resName);
}
public int getIdId(String resName){
return getResId(CId,resName);
}
public int getAnimId(String resName){
return getResId(CAnim,resName);
}
public int getStyleId(String resName){
return getResId(CStyle,resName);
}
public int getStringId(String resName){
return getResId(CString,resName);
}
public int getArrayId(String resName){
return getResId(CArray,resName);
}
private int getResId(Class> resClass,String resName){
if(resClass == null){
Log.i(TAG,"getRes(null," + resName + ")");
throw new IllegalArgumentException("ResClass is not initialized. Please make sure you have added neccessary resources. Also make sure you have " + this.mContext.getPackageName() + ".R$* configured in obfuscation. field=" + resName);
}
try {
Field field = resClass.getField(resName);
return field.getInt(resName);
} catch (Exception e) {
Log.i(TAG, "getRes(" + resClass.getName() + ", " + resName + ")");
Log.i(TAG, "Error getting resource. Make sure you have copied all resources (res/) from SDK to your project. ");
Log.i(TAG, e.getMessage());
}
return -1;
}
}
直接看代码,一目了然。[来源于反编译友盟统计jar]
原文作者:
android jar 反射,android 第三方jar库 反射得到自己的资源ID相关推荐
- 关于如何正确地在android项目中添加第三方jar包
在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception ...
- java调用jar并传参,Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
- java动态加载jar时,jar中还有第三方jar无法加载的解决方法
java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...
- android 工程中引入第三方JAR包后安装APK时老是提示找不到库文件?
网上查都说是通过添加中Build Path或者使用User library来添加,我不知道这些复杂粘贴的人测试过没,反正我测试了好久都不行,估计是我RP不行,这样添加到后编译会通过,但运行的时候就会提 ...
- android proguard 第三方jar,Android Studio代码混淆-第三方jar混淆汇总(持续更新)
前言 Android有非常多的优秀的第三方开源jar包,我们经常在我们的项目中使用了不少jar包,但是往往到了release的时候就忘了混淆第三方jar包了,会给我们开发带来不少麻烦,所有在这里汇总一 ...
- 解决Android Studio加载第三方jar包,出现包重复加载的问题
2015-02-13 0 个评论 来源:JavAndroid 收藏 我要投稿 通过Maven中央库添加第三方jar包的时候,出现了重复加载jar包的问题,解决办法很简单去掉一个不让它去加载就OK了 一 ...
- 怎样在android平台上使用第三方jar包
网上查都说是通过添加中Build Path或者使用User library来添加,我不知道这些复杂粘贴的人测试过没,反正我测试了好久都不行,估计是我RP不行,这样添加到后编译会通过,但运行的时候就会提 ...
- android 混淆不混淆第三方jar,Android 第三方Jar包FastJson 代码混淆时的解决方法 - Android开发论坛 - 51CTO技术论坛_中国领先的IT技术社区...
我们做AndroidApp软件的时候,经常会对App进行签名打包和代码混淆,在工程中没有使用第三方Jar文件的时候不用考虑很多因素,现在要说的是当你在你的工程使用使用了FastJson这个快速解析Js ...
- Android好用的第三方开源库
记录一些对工作学习有帮助的第三方开源库 快捷入口 音频类 AudioPlay Banner类 banner 流式布局 FlowLayout 网络请求框架 RxEasyHttp okhttp-RxHtt ...
- “java程序打成jar包 如何处理第三方jar包”
eclipse的export的 runnable jar file 导出的jar包的形式应该可以避免这个问题,直接想所依赖的jar里的class文件也一并打入jar包里了. 问题一: 现在有一j2se ...
最新文章
- 机器学习新闻综述:2019年AI领域不得不看的6篇文章
- Scrapy源代码分析-经常使用的爬虫类-CrawlSpider(三)
- TikTok玩家,路在何方?
- 大数据成败之“监”:美团数据质量监管平台这样搭建
- php smtp验证,php通过smtp验证登陆
- 应用服务器——jetty架构分析
- c语言ATM机文件储存账号密码,C语言实现_ATM自动取款机系统
- php中调用go代码,php中的goto的用法实例(代码)
- NKOJ2317 英语四六级考试
- Redis Cluster 集群扩容与收缩
- Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
- java栈空异常_Java如何处理空堆栈异常?
- 从集合(内存)中创建RDD
- ubuntu 12.04陷入software center的searching/cancelling...
- 基于matlab的小波去噪方法研究,基于matlab的小波去噪分析毕业论文.doc
- 阿里云大学Linux学习路线图(学+测)重磅上线!
- 保龄球计分c语言程序,保龄球的积分计分规则
- exchange java ews_Exchange服务器之使用EWS读取Exchange邮件
- 在Mavne环境下,实现struts2和hibernate的NVN关系的注解式开发?
- Educoder 机器学习 决策树使用之使用决策树预测隐形眼镜类型