0

我对 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 将如何使用这些?还是现在呢?

4

1 回答 1

0

当我们ndk-build在您项目的顶层目录(您图片中 jni 目录的父目录)中运行时,我们实质上是运行gnu makeinclude jni/Android.mk

在您的情况下,此顶部jni/Android.mk应仅包含所有子 .mk 文件:

include $(call all-subdir-makefiles)

主文件是,它是指其他人生成的二进制文件,例如jni/myproject/Android.mk

LOCAL_SHARED_LIBRARIES += openssl

等等。请注意,这些名称不是库文件的名称,而是LOCAL_MODULE构建它们的 's 的名称。

通常,使用静态库更容易。例如,您需要以正确的依赖关系顺序从 Java 加载所有共享库。


main在这里是一个非正式的词。我只想说,这是导致其兄弟姐妹工作的 make 文件,并按预期的顺序进行。LOCAL_SHARD_LIBRARIES这样做是因为它通过指定and来引用其他 make 文件生成的二进制文件LOCAL_STATIC_LIBRARIES

jni/Android.mk重要的是要理解,仅仅包含所有的 make 文件以使它们都完成它们的工作并按预期的顺序完成是不够的。我想强调的是,该jni/Android.mk文件是一个服务文件,而不是main文件,即使它位于目录层次结构的顶部。

于 2013-06-05T21:45:33.620 回答