打包第三方jar包,主要针对第三方工程文件中包含资源文件的情况:
因为资源文件不能直接打包到jar包中,所以此种情况需特殊处理,可能处理方式有多种,
此处指列出我在项目中测试使用过的。
1.jar包源码中不能用R..的方式访问资源,可如此替换。
package org.coolx.getresourse;
import android.content.Context;
public class ResourceUtil {
public static int getLayoutId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "layout",
paramContext.getPackageName());
}
public static int getStringId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "string",
paramContext.getPackageName());
}
public static int getDrawableId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString,
"drawable", paramContext.getPackageName());
}
public static int getStyleId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString,
"style", paramContext.getPackageName());
}
public static int getId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString,
"id", paramContext.getPackageName());
}
public static int getColorId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString,
"color", paramContext.getPackageName());
}
public static int getRawId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString,
"raw", paramContext.getPackageName());
}
}
2.通过eclipse直接导出(Export)jar包,同时释放资源文件给jar包使用者。
如何使用第三方jar包:
1.在eclipse环境下:
a.在项目的根目录下建立libs目录,然后将你需要的第三方JAR包放在该目录下。
b.在Eclipse中,在项目上右键,先择Properties,会出现一个对话框,在对话框左边选择Java Build Path,然后点击右边的Add Class Folder,选择项目下的刚刚新建的libs目录。
注:使用第三方库时,可能会遇上此问题,编译运行会出现错误提示:
Unable to execute dex: Multiple dex files define…
此情况多半是由于重复包含jar包引起的,可通过Android Dependencies和Android Private Libraries查看确认。
2.在源码编译的环境(没有eclipse等图形化工具,直接在服务器上编译)
a.在工程中建libs(可任意名)文件夹,将第三方jar包放入其中。
b.修改Android.mk文件,此处只列出关键部分代码。
LOCAL_PATH:= $(call my-dir)
#此处的jar_name可自己随意取名,只是类似找到文件路径的索引名
jar_libs = jar_name1 jar_name2 ...
LOCAL_STATIC_JAVA_LIBRARIES := $(jar_libs)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := jar_name1:libs/jar_name1.jar \
jar_name2:libs/jar_name2.jar
include $(BUILD_MULTI_PREBUILT)
c.如果第三方jar包附带有资源文件,还需将资源文件拷贝到新项目的资源文件路径下。