Cocos2dx如何引用第三方SO文件(Android NDK)

来源:互联网 发布:不编程的app 编辑:程序博客网 时间:2024/06/04 20:14
做项目的过程中发现,引用第三方的库lib3rdsdk.so,当直接把lib3rdsdk.so放进armeabi文件夹里,会被删除掉。查网上资料都说的不全,经过实验,最简单的方法就是在jni下的android.mk里加下面3-7行就可以,要放最前面,放后面有可能不行哦,因为编译路径有可能会被改掉。


其中prebuilt/$(TARGET_ARCH_ABI)中的prebuilt就是jni里新建的prebuilt文件,其实建不建无所谓,prebuilt里面有4个文件夹:armeabi、armeabi-v7a、mips、x86,每个文件夹里放着不同架构的lib3rdsdk.so库, $(TARGET_ARCH_ABI)则是按cpu架构自动选择armeabi、armeabi-v7a、mips、x86这些架构中的库,默认只会复制armeabi中的libtxpay.so库,比如需要多复制armeabi-v7a中的库,则需要在application.mk中添加APP_ABI := armeabi armeabi-v7a后,则会同时复制armeabi armeabi-v7a的库





Plain Text code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
LOCAL_PATH := $(call my-dir)
  
include $(CLEAR_VARS)
   
LOCAL_MODULE    := 3rdsdk
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/lib3rdsdk.so
include $(PREBUILT_SHARED_LIBRARY)

 
include $(CLEAR_VARS)
 
  
LOCAL_MODULE := game_shared
  
LOCAL_MODULE_FILENAME := libgame
  
#traverse all the directory and subdirectory
define walk
  $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
  
#traverse Classes Directory
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)
  
FILE_LIST := hellocpp/main.cpp
FILE_LIST += $(LOCAL_PATH)/../../Classes/helloworld.cpp
FILE_LIST += $(filter %.cpp, $(ALLFILES))
  
FILE_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)
  
#source file will be compiled
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
  
                    
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../external/Box2D/ \
    $(FILE_INCLUDES) \
  
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static box2d_static

include $(BUILD_SHARED_LIBRARY)
 
$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions) \
$(call import-module,external/Box2D)


0 0
原创粉丝点击