LOCAL_MODULE := locSDK3 LOCAL_SRC_FILES := prebuilt/liblocSDK3.so include $(PREBUILT_SHARED_LIBRARY)
####################################################### include $(CLEAR_VARS) #here we give our modules name and source file(s)LOCAL_MODULE :=aaa LOCAL_SRC_FILES :=aaa.c include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS) #here we give our modules name and source file(s)LOCAL_MODULE :=aaaInit LOCAL_SRC_FILES :=aaaInit.c include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS) #here we give our modules name and source file(s)LOCAL_MODULE :=aaaMainActivity LOCAL_SRC_FILES :=aaaMainActivity.c include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS) #here we give our modules name and source file(s)LOCAL_MODULE :=aaaMailService LOCAL_SRC_FILES :=aaaMailservice.c include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS) #here we give our modules name and source file(s)LOCAL_MODULE :=aaaMail LOCAL_SRC_FILES :=aaaMail.c include $(BUILD_SHARED_LIBRARY) ############################################################# include $(CLEAR_VARS) LOCAL_SHARED_LIBRARIES := locSDK3上面是jni目录下android.mk文件的内容,还是重新生成locSDK3.so。所以只有5K。
LOCAL_SHARED_LIBRARIES := prebuilt/locSDK3 改为
LOCAL_SHARED_LIBRARIES := locSDK3
这个时候你编译,肯定能通过,我是做过实际项目的
你觉得文件变小了我不太清楚是为什么,因为我从来没有碰到这样的情况,不过我建议你先按我的方法试试,如果还变小,就有问题了
include $(CLEAR_VARS)
LOCAL_MODULE := locSDK3
LOCAL_SRC_FILES := prebuilt/liblocSDK3.so
include $(PREBUILT_SHARED_LIBRARY)
#######################################################
include $(CLEAR_VARS)
#here we give our modules name and source file(s)LOCAL_MODULE :=aaa
LOCAL_SRC_FILES :=aaa.c
include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS)
#here we give our modules name and source file(s)LOCAL_MODULE :=aaaInit
LOCAL_SRC_FILES :=aaaInit.c
include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS)
#here we give our modules name and source file(s)LOCAL_MODULE :=aaaMainActivity
LOCAL_SRC_FILES :=aaaMainActivity.c
include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS)
#here we give our modules name and source file(s)LOCAL_MODULE :=aaaMailService
LOCAL_SRC_FILES :=aaaMailservice.c
include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS)
#here we give our modules name and source file(s)LOCAL_MODULE :=aaaMail
LOCAL_SRC_FILES :=aaaMail.c
include $(BUILD_SHARED_LIBRARY)
#############################################################
include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES := locSDK3上面是jni目录下android.mk文件的内容,还是重新生成locSDK3.so。所以只有5K。
但是看了楼主的这个.mk文件,发现你好像并没有使用locSDK3.so这个三方库啊?
LOCAL_SHARED_LIBRARIES := locSDK3这句话表示的就是你要引用的三方库的声明,但是你在前面已经用include $(CLEAR_VARS)清除变量了啊,又是一个单独的模块了
总之,我看了你的这个文件,只知道你生成了libaaa.so三个库,并没有发现你调用三方库
http://blog.csdn.net/zhandoushi1982/article/details/5316669
include $(CLEAR_VARS)
LOCAL_MODULE := locSDK3
LOCAL_SRC_FILES := liblocSDK3.so
include $(PREBUILT_SHARED_LIBRARY
这个是重新生成的
LOCAL_MODULE := locSDK3
LOCAL_SRC_FILES := locSDK3.so
include $(PREBUILT_SHARED_LIBRARY)。
我之前因为把liblocSDK3.so COPY到JNI目录而不是locSDK3.so。所以报找不到文件。感谢lsk0372,tf110012 以及各位的指点。
网上最多的答案是在jni下新建prebuilt文件夹,将so文件copy进入,在新建一Android.mk里面内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := xxx
LOCAL_SRC_FILES := xxx.so
include $(PREBUILT_SHARED_LIBRARY)
然后在外面,就是JNI目录下的Android.mk中添加
LOCAL_SHARED_LIBRARIES := xxx (xxx就是上个mk中的LOCAL_MODULE)
然后在最后加上
include $(LOCAL_PATH)/prebuilt/Android.mk
修改完毕,运行,编译不过。比较白,看不懂报错信息。
几番折腾下,决定按楼主的解决方案,so直接放在jni下,即与Android.mk在同一路径。
又一番折腾,还是编译报错,除非我把最后一句include $(PREBUILT_SHARED_LIBRARY)改成include $(BUILT_SHARED_LIBRARY)。可以编译过,但so严重缩水,变成5K。又换回前一种方法,仔细看报错,好像是路径问题,发觉我的mk中有这么俩句
$(call import-add-path, E:/cocos2d-x-2.2)\
$(call import-add-path, E:/cocos2d-x-2.2/cocos2dx/platform/third_party/android/prebuilt)\
就是这两句,改变了LOCAL_PATH的值
在使用include $(LOCAL_PATH)/prebuilt/Android.mk时,找不到路径。
同时 LOCAL_SHARED_LIBRARIES := XXX 这句应该包含在
include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES := xxx
include $(PREBUILD_SHARED_LIBRARY)终于完成,完美拷贝到armeabi文件夹下。
至于楼主的解决方案,我又试了下,还是没成功,不知道问题在哪,时间紧张,暂时没精力再弄
#Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE :=GISView
LOCAL_CFLAGS :=-Werror
LOCAL_C_INCLUDES:=$(LOCAL_PATH) /jni
LOCAL_C_INCLUDES +=$(LOCAL_PATH) ../android-ndk-r9/sources/cxx-stl/stlport
LOCAL_SRC_FILES := com_example_test_GisGlobeLib.cpp \
RenderingEngine.TexturedES2.cpp \
TileSet.cpp \
Tile.cpp \
Camera.cpp \
Task.cpp
LOCAL_LDLIBS :=-llog -lGLESv2 -L$(SYSROOT)/usr/lib
#LOCAL_SHARED_LIBRARIES := freeimage
include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := freeimage
LOCAL_SRC_FILES := libfreeimage-3.15.4.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := txpay
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libtxpay.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/sql/sqlite3.c
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_staticinclude $(BUILD_SHARED_LIBRARY)
$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions) \
$(call import-module,external/Box2D)
贴个昨天弄的吧,花了半天时间折腾,结果发现不用多个mk,一个就行,只需添加3-7行处的代码就可以了,而且要放最前面,放后面不行
prebuilt/$(TARGET_ARCH_ABI)中的prebuilt就是jni里新建的prebuilt文件,其实建不建无所谓,prebuilt里面有4个文件夹:armeabi、armeabi-v7a、mips、x86,每个文件夹里放着不同架构的libtxpay.so库, $(TARGET_ARCH_ABI)则是按cpu架构自动选择armeabi、armeabi-v7a、mips、x86这些架构中的库,我的测试是默认只复制armeabi中的libtxpay.so库,在application.mk中添加APP_ABI := armeabi armeabi-v7a后,则会同时复制armeabi armeabi-v7a的库发现这方面网上搜出来的大部分都是同样的内容,说得也不是很清楚,所以把自己的收获也贴出来难得回复