做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相关推荐

  1. 关于如何正确地在android项目中添加第三方jar包

                  在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception ...

  2. java调用jar并传参,Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

  3. java动态加载jar时,jar中还有第三方jar无法加载的解决方法

    java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...

  4. android 工程中引入第三方JAR包后安装APK时老是提示找不到库文件?

    网上查都说是通过添加中Build Path或者使用User library来添加,我不知道这些复杂粘贴的人测试过没,反正我测试了好久都不行,估计是我RP不行,这样添加到后编译会通过,但运行的时候就会提 ...

  5. android proguard 第三方jar,Android Studio代码混淆-第三方jar混淆汇总(持续更新)

    前言 Android有非常多的优秀的第三方开源jar包,我们经常在我们的项目中使用了不少jar包,但是往往到了release的时候就忘了混淆第三方jar包了,会给我们开发带来不少麻烦,所有在这里汇总一 ...

  6. 解决Android Studio加载第三方jar包,出现包重复加载的问题

    2015-02-13 0 个评论 来源:JavAndroid 收藏 我要投稿 通过Maven中央库添加第三方jar包的时候,出现了重复加载jar包的问题,解决办法很简单去掉一个不让它去加载就OK了 一 ...

  7. 怎样在android平台上使用第三方jar包

    网上查都说是通过添加中Build Path或者使用User library来添加,我不知道这些复杂粘贴的人测试过没,反正我测试了好久都不行,估计是我RP不行,这样添加到后编译会通过,但运行的时候就会提 ...

  8. android 混淆不混淆第三方jar,Android 第三方Jar包FastJson 代码混淆时的解决方法 - Android开发论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    我们做AndroidApp软件的时候,经常会对App进行签名打包和代码混淆,在工程中没有使用第三方Jar文件的时候不用考虑很多因素,现在要说的是当你在你的工程使用使用了FastJson这个快速解析Js ...

  9. Android好用的第三方开源库

    记录一些对工作学习有帮助的第三方开源库 快捷入口 音频类 AudioPlay Banner类 banner 流式布局 FlowLayout 网络请求框架 RxEasyHttp okhttp-RxHtt ...

  10. “java程序打成jar包 如何处理第三方jar包”

    eclipse的export的 runnable jar file 导出的jar包的形式应该可以避免这个问题,直接想所依赖的jar里的class文件也一并打入jar包里了. 问题一: 现在有一j2se ...

最新文章

  1. 机器学习新闻综述:2019年AI领域不得不看的6篇文章
  2. Scrapy源代码分析-经常使用的爬虫类-CrawlSpider(三)
  3. TikTok玩家,路在何方?
  4. 大数据成败之“监”:美团数据质量监管平台这样搭建
  5. php smtp验证,php通过smtp验证登陆
  6. 应用服务器——jetty架构分析
  7. c语言ATM机文件储存账号密码,C语言实现_ATM自动取款机系统
  8. php中调用go代码,php中的goto的用法实例(代码)
  9. NKOJ2317 英语四六级考试
  10. Redis Cluster 集群扩容与收缩
  11. Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
  12. java栈空异常_Java如何处理空堆栈异常?
  13. 从集合(内存)中创建RDD
  14. ubuntu 12.04陷入software center的searching/cancelling...
  15. 基于matlab的小波去噪方法研究,基于matlab的小波去噪分析毕业论文.doc
  16. 阿里云大学Linux学习路线图(学+测)重磅上线!
  17. 保龄球计分c语言程序,保龄球的积分计分规则
  18. exchange java ews_Exchange服务器之使用EWS读取Exchange邮件
  19. 在Mavne环境下,实现struts2和hibernate的NVN关系的注解式开发?
  20. Educoder 机器学习 决策树使用之使用决策树预测隐形眼镜类型

热门文章

  1. 看完这个你还不理解右值引用和移动构造 你就可以来咬我(上)
  2. oracle体系三大文件,oracle 体系_第三章控制文件
  3. Emacs之LaTeX环境配置及效果展示
  4. Basic Calculator
  5. Visual Studio 2017 15.5.0 正式发布 正式版下载
  6. web系统架构设计中需要知道的点(前端篇)
  7. Linux下SVN安装配置全程实录(转)
  8. 世界不是gameBoy
  9. javascript 中的innerHTML的用法
  10. Video : 将使用AD认证的SharePoint网站配置为表单方式登录