写Resource反射工具类ResourceUtils:
public class ResourceUtils {
private static HashMap idMap = new HashMap();
/**
* 通过名称获取资源id
* @param context
* @param className
* 引用资源文件类型名称,eg id, drawable
* @param resName
* 资源文件名称
* @return
*/
public static int getResourceIdByName(Context context, String className, String resName) {
int id = 0;
try {
//Class> cla = Class.forName(context.getPackageName() + ".R$" + className);
//if (cla != null) {
//id = cla.getField(resName).getInt(cla);
//}
Class> cla = Class.forName(context.getPackageName()+".R");
Class[]clesses = cla.getClasses();
Class targetClass=null;
for (Class class1 : clesses) {
if(class1.getName().split("\\$")[1].equals(className)){
targetClass = class1;
break;
}
}
if(targetClass!=null){
id = targetClass.getField(resName).getInt(targetClass);
}
}catch(NoSuchFieldException e){
Log.e("Error", "no such file");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return id;
}
/**
* 通过名称获取view
* @param context
* @param parentView
* @param idName 组件的id名称
* @return
*/
public static View getViewById(Context context, View parentView, String idName) {
Integer id = idMap.get(idName);
if (id == null) {
id = getResourceIdByName(context, "id", idName);
idMap.put(idName, id);
return parentView.findViewById(id);
}
return parentView.findViewById(id);
}
}
需要打jar包的Activity,通过反射获取ResourceId
public class ImageActivity extends Activity {
private ImageView img_show1, img_show2;
private Button btn_show;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getApplication();
// 获取Resource名称反射获取获取layout的id
int activityId = ResourceUtils.getResourceIdByName(context, "layout",
"activity_image");
View view = View.inflate(context, activityId, null);
setContentView(view);
// 通过Resource的id反射获取ResourceID
img_show1 = (ImageView) ResourceUtils.getViewById(context, view,
"img_show1");
img_show2 = (ImageView) ResourceUtils.getViewById(context, view,
"img_show2");
btn_show = (Button) ResourceUtils
.getViewById(context, view, "btn_show");
btn_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
// 通过名称获取drawable的id
img_show1.setBackgroundResource(ResourceUtils
.getResourceIdByName(context, "drawable", "img01"));
img_show2.setBackgroundResource(ResourceUtils
.getResourceIdByName(context, "drawable", "img02"));
}
});
}
}
项目打包成jar,项目右键 - Export - 选择“jar” - 选择项目的“src” - 选择生成路径;
把jar复制到项目中,把打包jar的Activity需要的resource(drawable、layout)相关内容复制到项目中
调用的项目AndroidManifest.xml中添加 打包的Activity的名称;
调用jar中的Activity:
btn_goto_lib = (Button) findViewById(R.id.btn_goto_lib);
btn_goto_lib.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
try {
Intent intent = new Intent(MainActivity.this,
ImageActivity.class);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
});