我是Java和Android开发人员的新手,但我正在尝试将一个C / C ++项目移植到Android手机上,只是为了做一些测试。这是一些细节。该项目取决于Openssl,GMP和NTL库。我下载了副本并将所有内容放在jni/
文件夹中。所以现在文件夹结构如下所示:
jni/
Android.mk
gmp/
Android.mk
...
ntl/
Android.mk
...
openssl/
Android.mk
...
myproject/
Android.mk
...
每个包含.cpp, c.
个文件的子文件夹都有一个Android.mk文件。现在,我的问题是:非常广泛,我应该如何构建Android.mk文件的内容?我能够在线跟踪指令并编译Openssl(我在其中生成了所有.so文件)。顶级Android.mk如何使用这些?或者现在呢?
答案 0 :(得分:0)
当我们在项目的顶层目录(图片中jni目录的父目录)中运行ndk-build
时,我们基本上运行gnu make和 include {{1 }}
在您的情况下,此顶级jni/Android.mk
应仅包含所有子.mk文件:
jni/Android.mk
主文件是include $(call all-subdir-makefiles)
,它指的是其他人制作的二进制文件,例如
jni/myproject/Android.mk
等等。请注意,名称不是库文件的名称,而是构建它们的LOCAL_SHARED_LIBRARIES += openssl
的名称。
通常,使用静态库更容易。例如,您需要自己以正确的依赖顺序从Java加载所有共享库。
LOCAL_MODULE
和LOCAL_SHARD_LIBRARIES
来引用其他make文件生成的二进制文件。
重要的是要理解,在LOCAL_STATIC_LIBRARIES
中包含所有make文件以使它们全部完成工作并按预期顺序执行是不够的。我想强调的是,jni/Android.mk
文件是服务文件,而不是主,即使它位于目录层次结构的顶部。