当前位置: 代码迷 >> Android >> Android源码下平添第三方库
  详细解决方案

Android源码下平添第三方库

热度:99   发布时间:2016-04-28 05:38:30.0
Android源码下添加第三方库
最近做IPTV的客户端,用到一些第三方的加解密库,格式为so.

在/external下创建自己的文件夹,然后放上自己的SO和Android.mk文件即可。
比如我要添加lib_a.so和lib_b.so,那么在创建文件夹/external/mylib
然后把这两个so和Android.mk放入mylib文件夹,
Android.mk文件如下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := lib_aLOCAL_MODULE_TAGS := optional LOCAL_PREBUILT_LIBS := lib_a.so include $(BUILD_MULTI_PREBUILT)include $(CLEAR_VARS)LOCAL_MODULE := lib_bLOCAL_MODULE_TAGS := optional LOCAL_PREBUILT_LIBS := lib_b.so include $(BUILD_MULTI_PREBUILT)#表示编译当前目录和所有子目录,如果不加$(LOCAL_PATH)表示只编译当前目录include $(call all-makefiles-under,$(LOCAL_PATH))

当然如果你不愿意用
include $(callall-makefiles-under,$(LOCAL_PATH))
也可以自己配置,XXX和YYY是当前子的目录,比如还要添加jni
LOCAL_PATH := $(call my-dir)include $(LOCAL_PATH)/XXX/Android.mk $(LOCAL_PATH)/YYY/Android.mk 

如果是源码全部编译过就直接切换到该目录,然后
mm -B 

-B是强制重新编译

然后在out\target\product\xxx\system\lib下就能找到,直接在代码里load就好了。

JNI的mk文件
LOCAL_PATH:= $(call my-dir)#自定义一个地址xxx目录DVB_PATH := $(wildcard external/xxx)ifeq ($(DVB_PATH), )	DVB_PATH := $(wildcard vendor/xxx/xxx)endifinclude $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE:= libiptv  LOCAL_ARM_MODE := arm#对应xxx目录下的xx.h头文件,如果在这里声明后,jni文件就可以直接引用不用目录LOCAL_C_INCLUDES := $(DVB_PATH)/include/xx LOCAL_LDLIBS := -llog #这里是需要用到的动态库,后缀为soLOCAL_SHARED_LIBRARIES += liblog libandroid_runtime#需要编译的源码文件LOCAL_SRC_FILES:= \  iptv_jni.cpp#静态库,这里没有用到就注释掉了#LOCAL_STATIC_LIBRARIES := #	liba \#	libb \#包含自己的头文件进去LOCAL_C_INCLUDES +=	\	$(JNI_H_INCLUDE)LOCAL_CFLAGS +=LOCAL_PROGUARD_ENABLED := disabledLOCAL_PRELINK_MODULE := falseinclude $(BUILD_SHARED_LIBRARY)


下面就是APP的Android.mk文件了,这里用了一个开源的网络请求jar,android-async-http-1.4.4.jar
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optional #定义jar的别名LOCAL_STATIC_JAVA_LIBRARIES := aync LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := IPTVtestLOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)###############################include $(CLEAR_VARS)#这里引用别名,注意冒号前要对应上面的别名LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := aync:libs/android-async-http-1.4.4.jar#也可以在app添加自己需要的so库#LOCAL_PREBUILT_LIBS :=libxxx:libs/armeabi/libxxx.so ## 如果把jni放在app下的话,可以请求jni的MODULE名字#LOCAL_REQUIRED_MODULES := libjni##LOCAL_MODULE_TAGS := optional  include $(BUILD_MULTI_PREBUILT)# Use the following include to make our testapk.  include $(callall-makefiles-under,$(LOCAL_PATH)) 
  相关解决方案