一种将Android应用打成架包提供给第三方使用的方法

之前在网上也有看到过将android应用打包成jar的形式提供给第三方使用,使用的方法是将源码打成jar,而资源文件是直接提供给使用者,或者将资源文件放在单独项目中作为library提供给调用者。这两种方式都有个缺点,就是资源文件会暴露给使用者,使用者可以随意修改资源文件。为了保证源码以及资源文件不暴露给调用者,我这里仿照一些产品尝试了以下方法。


大体思路是:

1、首先使用纯代码开发JAR中的Actvity页面,将源码导出jar(导出方法不做说明);

2、将资源文件(图片)单独处理成可读文件;

3、在调用者的项目中使用jar以及可读资源文件;


1、在开发JAR中Activity页面过程中需要使用图片的时候,需要获取资源data.ebi文件;

<span style="font-size:14px;">private Object getObjectFromAssets(String name) {
  AssetManager asm = getAssets();
  InputStream is = null;
  ObjectInputStream ois = null;
  try {
   is = asm.open(name);
   ois = new ObjectInputStream(is);
   return ois.readObject();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   if (is != null) {
    try {
     is.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   if (ois != null) {
    try {
     ois.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
  return asm;
 }</span>

2、在获取到data.ebi 对象后在data.ebi对象中获取相应的资源并使用:

<span style="font-size:14px;">HashMap<String, byte[]> list2 = (HashMap<String, byte[]>) o;
  byte[] bottom_coupon_s2 = list2.get("bottom_coupon_s");
  Bitmap bo = Utils.Bytes2Bimap(bottom_coupon_s2);
  //为TextView设置背景
  textView.setImageBitmap(bo);</span>

这样使用纯代码开发的Activity就完成了,并且没有调用本地资源,之后就是将用代码开发的Activity打成jar,只需要将src中的源码导出,其他的所有文件都不要,到处的jar可以自行混淆;


下面是data.ebi的存储方法:

单独新建一个资源处理的工程用于专门处理资源文件(图片)

其中主要的方法:

HashMap<String, byte[]> dblist = new HashMap<String, byte[]>();
				dblist.put("redbtn", bitmap2Bytes(BitmapFactory.decodeResource(
						getResources(), R.drawable.redbtn)));
				saveObj("data.ebi", dblist);

	protected void saveObj(String name, Object dblist) {
		FileOutputStream fos = null;
		ObjectOutputStream oos = null;
		try {
			fos = openFileOutput(name, MODE_PRIVATE);
			oos = new ObjectOutputStream(fos);
			oos.writeObject(dblist);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	private byte[] bitmap2Bytes(Bitmap bm) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
		return baos.toByteArray();
	}

以上方法会将 data.ebi 文件保存与设备的data/data/yourapplicationname中.

将data.ebi导出来提供给第三方调用者使用。


使用方法,将data.ebi放入需要使用的项目的assets中,在前面生成的jar导入需要使用的项目中即可;

具体的Activity调用方法可以自己封装;


总结:这种方法由于页面开发需要使用纯代码开发,所以不太适合页面过多的jar,除非不嫌麻烦;其实android的插件开发有很多方法.这种方法只适合于小型插件的开发.

小弟拙见,请多多赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值