android将activity打成jar包供第三方调用,把Activity打包成jar供其App使用

写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();

}

}

});

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值