android工程引用jar包

时间:2023-02-05 09:12:24
先以email为例,看看如何引用第1,2方的jar
在4.0中email里有Email/emailcommon文件夹,和2.x结构不一样
这里也有个mk文件
email下面发现exchange文件夹不见了,原来是单独拿了出来
在exchange里面发现用到了emailcommon里面的类
emailcommon下部分mk文件代码如下
LOCAL_MODULE := com.android.emailcommon
LOCAL_STATIC_JAVA_LIBRARIES := guava
LOCAL_SRC_FILES := $(call all-java-files-under, src/com/android/emailcommon)
LOCAL_SRC_FILES += $(call all-java-files-under, src/org)
LOCAL_SRC_FILES += \
    src/com/android/emailcommon/service/IEmailService.aidl \
    src/com/android/emailcommon/service/IEmailServiceCallback.aidl \
    src/com/android/emailcommon/service/IPolicyService.aidl \
    src/com/android/emailcommon/service/IAccountService.aidl
LOCAL_SDK_VERSION := current
include $(BUILD_STATIC_JAVA_LIBRARY)
LOCAL_MODULE := com.android.emailcommon 定义模块名称
include $(BUILD_STATIC_JAVA_LIBRARY) 生成一个jar,可供其他应用使用
编译email时会看到如下log
target Java: com.android.emailcommon (out/target/common/obj/JAVA_LIBRARIES/com.android.emailcommon_intermediates/classes)
Copying: out/target/common/obj/JAVA_LIBRARIES/com.android.emailcommon_intermediates/classes-jarjar.jar
Copying: out/target/common/obj/JAVA_LIBRARIES/com.android.emailcommon_intermediates/emma_out/lib/classes-jarjar.jar
Copying: out/target/common/obj/JAVA_LIBRARIES/com.android.emailcommon_intermediates/classes.jar
target Static Jar: com.android.emailcommon (out/target/common/obj/JAVA_LIBRARIES/com.android.emailcommon_intermediates/javalib.jar)
out/target/common/obj/JAVA_LIBRARIES/com.android.emailcommon_intermediates下面的几个jar中都有emailcommon的源码
打开exchange的mk文件发现有如下代码
LOCAL_STATIC_JAVA_LIBRARIES := android-common com.android.emailcommon
这里引用了android-common和com.android.emailcommon
这样exchange就可以使用emailcommon的类文件了

下面看看如何引用第三方jar

将jar放在工程根目录下
mk文件要给下面两个变量赋值
LOCAL_STATIC_JAVA_LIBRARIES := library_name
LOCAL_PREBUILT_SATTIC_JAVA_LIBRARIES := library_name:xxx.jar即可

注意:这里引用的jar,里面必须是class形式的,如果里面是dex文件,那么编译的时候是无法找到相应的class文件

不要尝试把jar解开,然后把其中的dex文件用dex2jar转换成jar,虽然转换之后的jar里面是class形式的,编译时也能找到相应的class,但是打包的时候会失败,错误是关于字节码的

android的字节码和java的字节码还是不完全一致的,所以不要这么做

ps:library_name不要和其他库的LOCAL_STATIC_JAVA_LIBRARIES重名,不然整体编译的时候会冲突,无法生成img

当然,单独编译的时候不会有问题的



转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/