android 应用导入第三方jar、so文件

当我们在自己的应用里,想引入第三方的jar文件时,需要如下修改Android.mk文件:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := pinyin4j:pinyin4j-2.5.0.jar
include $(BUILD_MULTI_PREBUILT)

# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_STATIC_JAVA_LIBRARIES := pinyin4j
LOCAL_PACKAGE_NAME := ebook
LOCAL_CERTIFICATE := platform


include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))

首先我们需要把pinyin4j-2.5.0.jar放到应用的根目录,再调用LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := pinyin4j:pinyin4j-2.5.0.jar,来将pinyin4j-2.5.0.jar放到pinyin4j这个名字开头的目录下. 然后我们要在下面调用LOCAL_STATIC_JAVA_LIBRARIES := pinyin4j, 在编译应用时,会到以pinyin4j这个名字开头的目录下面去寻找jar文件. 编译时,编译器会自动在out\target\product\hsdroid\obj\JAVA_LIBRARIES\这个目录下生成一个pinyin4j_intermediates文件夹,把我们的pinyin4j-2.5.0.jar改名为javalib.jar放在这个目录里面.再编译代码时,会到这个目录下面找这个JAR里的接口.      pinyin4j这个名字可以随便取,但是LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := pinyin4j:pinyin4j-2.5.0.jar这里要和下面的LOCAL_STATIC_JAVA_LIBRARIES := pinyin4j名字保持一致. 如果我们的JAR文件,没在根目录下,而在根目录下的lib文件夹下,那么要在LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := pinyin4j: 后面加上目录名,类似lib/pinyin4j-2.5.0.jar


      我们再来顺带解释一下其它几行代码:
1,LOCAL_PATH := $(call my-dir) ,一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数‘my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
2,include $( CLEAR_VARS),
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
3,LOCAL_SRC_FILES := $(call all-subdir-java-files),LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的java、C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。


*.SO文件

总结一下:

1 集成jar包

LOCAL_STATIC_JAVA_LIBRARIES取jar库的别名,可以任意取值;

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar库的规则,格式:别名:jar文件路径。注意:别名一定要与LOCAL_STATIC_JAVA_LIBRARIES里所取的别名一致,且不含.jar;jar文件路径一定要是真实的存放第三方jar包的路径。

编译用BUILD_MULTI_PREBUILT

2 集成.so动态库

LOCAL_PREBUILT_LIBS指定prebuilt so的规则,格式:别名:so文件路径。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真实的存放第三方so文件的路径。

编译拷贝用BUILD_MULTI_PREBUILT


再发个完整的Android.mk的例子,在Camera2目录下有libs目录,这目录下有baidu.jar和armeabi文件夹,armeabi文件夹下有liblocSDK4d.so文件,现在我们将baidu.jar和liblocSDK4d.so要编译进Camera2这个APK里,那么它的Android.mk应该如下来写:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit

<span style="color:#cc0000;">LOCAL_STATIC_JAVA_LIBRARIES += baidu</span>

LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd_gcam)

LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res


include $(LOCAL_PATH)/version.mk
LOCAL_AAPT_FLAGS := \
        --auto-add-overlay \
        --version-name "$(version_name_package)" \
        --version-code $(version_code_package) \

LOCAL_PACKAGE_NAME := Camera2

#LOCAL_SDK_VERSION := current

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

# If this is an unbundled build (to install seprately) then include
# the libraries in the APK, otherwise just put them in /system/lib and
# leave them out of the APK
ifneq (,$(TARGET_BUILD_APPS))
  LOCAL_JNI_SHARED_LIBRARIES := libjni_mosaic libjni_tinyplanet
else
  LOCAL_REQUIRED_MODULES := libjni_mosaic libjni_tinyplanet
endif

include $(BUILD_PACKAGE)

<span style="color:#ff0000;">include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := baidu:libs/baidu.jar
LOCAL_PREBUILT_LIBS :=liblocSDK4d:libs/armeabi/liblocSDK4d.so 

include $(BUILD_MULTI_PREBUILT)</span>

include $(call all-makefiles-under, $(LOCAL_PATH))


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值