Android打jar包之将Android工程连同第三方jar包一起打包成jar包问题总结

时间:2021-09-22 09:39:13

由于项目需要,需要将Android工程打包成jar包供他人调用,随着功能的增加,需要引入第三方jar包的功能,因而要将Android工程连同第三方的jar包一起重新打包成jar包,现在将实际操作中的一些问题稍作总结。

Android工程打包成jar包一共可分为三种情况,下面针对不同情况总结不同的打包方法:


情况一:需要打包的Android工程不包含任何资源文件,只需打包源代码

方法1,使用proguard打包工具,这种工具打包的好处是可以对代码进行混淆,并且可以删除不需要的代码,压缩jar包的大小,但是使用proguard工具时,需要自己写配置文件,本人研究了一段时间,暂时还不是完全掌握,只能在原有基础上做简单修改。

方法2,使用eclipse直接导出jar包,这种方法简单,只是代码不能混淆,再次不做赘述。


情况二:需要打包的Android工程中包含资源文件

由于android中的资源文件都是会生成R文件,程序会根据R文件进行索引,由于R文件是动态生成的,将资源文件放入jar包中,R文件不能生成对应的索引,当程序使用jar包中的资源文件时就会报错。

解决方法:将资源文件放入到assets文件夹中,通过以下方法引用文件

public static Drawable getDrawableFromAssets(Context context,
       String imageFileName) {
   Drawable result = null;
   AssetManager assetManager = context.getAssets();
   InputStream is = null;
   try {
       is = assetManager.open(imageFileName);
       result = Drawable.createFromStream(is, null);
       is.close();
       is = null;
   } catch (IOException e) {
       e.printStackTrace();
   }
   return result;
}

但是使用这中方法,就不能使用proguard工具打包,只能使用eclipse或者Fat jar插件进行打包。


情况三:引用到第三方jar包

当引用到第三方jar包的时候,使用proguard或者eclipse直接导出,第三方的jar包都不能被包含到新的jar包中,运行程序会出现java.lang.NoClassDefFoundError的错误。

解决办法:使用Fat jar工具进行打包,发现可以将第三方的jar包包含进来。

希望对您有所帮助!!