我希望包含一个在我的Android Studio NDK项目中预编译的静态库.我正在使用Android Studio 1.0.1,任何在SO上尝试此问题的解决方案似乎已过时(或涉及创建库项目并包含它).
结构如下:
app
/--src
/--main
/--java
+--jni
+--jniLibs
/--armeabi
/--libpng.a
--armeabiv7
/--libpng.a
...(for each abi)
Run Code Online (Sandbox Code Playgroud)
我试图包括库libpng.我尝试创建jniLibs(根据ph0b(awesome guide,btw)并将libpng.a添加到相应的ABI文件夹.这仍然给我错误 - 当我尝试使用以下代码编译时找不到-llibpng:
ndk {
moduleName "game"
cFlags "-std=c++11 -fexceptions -DANDROID -I${project.buildDir}/../src/main/jni/include \
-I${project.buildDir}/../src/main/jni/include/png"
ldLibs "EGL", "GLESv3", "dl", "log", "android", "libpng"
stl "gnustl_static"
}
Run Code Online (Sandbox Code Playgroud) 我已经完成了这里的scons构建示例,发现他们希望提供适合我项目的解决方案.
结构如下:
root/
Module_A/
include/
foo.h
bar.h
src/
foo.cpp
bar.cpp
Module_.../
Run Code Online (Sandbox Code Playgroud)
每个模块都遵循相同的结构,包括所有.h的include文件夹和cpps的src文件.每个模块构建为共享对象.没有可执行文件.
模块具有交叉依赖性.例如,Module_A是日志记录机制,它用于模块B,C,D等.同样,Module_B是配置加载程序,在其他几个模块中使用.Module_C将是IPC模块,几乎用于列出的每个模块.最后,Module_D是命令中心,并链接到每个其他模块(字面意思).
我有兴趣替换我们使用递归make来构建项目的当前设置.我正在尝试构建必要的sconstruct和SConscripts,但我甚至很新,甚至是scons.
我有兴趣将每个Module的.cpp和.h转换为.so并使其依赖关系自动解决,就像make now一样.
在SConscript中,我目前使用glob来获取*.cpps,然后在CPPPATH中包含模块的'./include'.我用过
env.SharedLibrary(CPPATH='./include', source= (list of the cpps))
但由于这取决于其他模块,它将无法工作,说明使用的其他模块的功能是"未声明".
如何使用分层scons设置来构建这种复杂的结构?