【问题标题】:How to update/Order 'Android.mk' file?如何更新/订购“Android.mk”文件?
【发布时间】:2018-06-20 10:50:04
【问题描述】:

我开始研究从 Eclipse 导入的“Android Studio”项目。在这个项目中,我有两个 .c 文件,这给我带来了很多问题:

D:\AndroidProjects\AndroidApp\SDK\src\main\jni\ip\ip.c D:\AndroidProjects\AndroidApp\SDK\src\main\jni\nativeinterface\native.c

我正在更新此文件的代码,并且每隔几次编译(Build ---> Build Project)我就会收到以下错误:

“此文件不是项目的一部分。请将其包含在适当的构建文件(build.gradle、CMakeLists.txt 或 Android.mk 等)中并同步项目”

我尝试执行 Build ---> "Refresh Linked C++ Projects",有时有效,有时无效,如果有效,几次编译后错误返回。

我认为问题与文件有关:

D:\AndroidProjects\AndroidApp\SDK\Android.mk

您可以在下面看到。我有 5 个主要问题:

  1. 我在这个文件中看到了一些 *.mk、*.mk.swp 和 *.so 文件,可以吗?这些文件应该在那里吗?

  2. 在我的文件路径中,我有这个斜杠“\”,但在互联网上的某些示例中,我看到这个斜杠“/”,哪一个是正确的?这有关系吗?

  3. 我可以在这个文件中看到两个主要部分:

LOCAL_SRC_FILES

LOCAL_C_INCLUDES

我应该在两个部分中添加“ip.c”和“native.c”文件的路径吗?还是只对其中之一?

  1. 在项目中,我看到了更多的“Android.mk”文件(更短),除了主“Android.mk”文件之外,它们还应该存在吗?

例如这是'ip.c'文件文件夹中的'Android.mk':


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
     ip.c

LOCAL_LDLIBS := -llog

LOCAL_MODULE := ipAndroidApp

LOCAL_CFLAGS += -O3

include $(BUILD_SHARED_LIBRARY)

这是'native.c'文件文件夹中的'Android.mk':


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := native.c
LOCAL_MODULE    := native

include $(BUILD_STATIC_LIBRARY)  

  1. LOCAL_C_INCLUDES 部分以 += 开头,可以吗?还是第一行必须以:= 开头?

谢谢。

这是我的主要“Android.mk”文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := app
LOCAL_LDFLAGS := -Wl,--build-id
LOCAL_SRC_FILES :=

    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\.Application.mk.swp \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\Application.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\ip\Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\ip\ip.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\ipd\Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\ipn\Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_orig\core.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_orig\descriptor.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_orig\io.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_orig\os\linux_usbfs.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_orig\os\threads_posix.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_orig\sync.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_orig\__Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\core.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\core_original.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\descriptor.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\descriptor_original.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\hotplug.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\hotplug_original.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\io.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\io_original.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\libusb-1.0.def \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\libusb-1.0.rc \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\Makefile.am \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\android_netlink.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\android_usbfs.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\darwin_usb.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\linux_netlink.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\linux_udev.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\linux_usbfs.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\netbsd_usb.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\openbsd_usb.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\poll_posix.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\poll_posix_original.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\poll_windows.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\threads_posix.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\threads_windows.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\wince_usb.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\os\windows_usb.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\strerror.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\sync.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\libusb_saki4510t\libusb\sync_original.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\nativeinterface\Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\nativeinterface\native.c \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\Android.mk \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi\libDropboxSync.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi\libipandroidapp.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi\libopentok.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi\librs.androidappsdk_ipd.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi\librs.androidappsdk_ipn.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi\librs.androidappsdk_rgb2yuv.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi\libusbandroidapp.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi-v7a\libDropboxSync.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi-v7a\libipandroidapp.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi-v7a\libopentok.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi-v7a\librs.androidappsdk_ipd.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi-v7a\librs.androidappsdk_ipn.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi-v7a\librs.androidappsdk_rgb2yuv.so \
    D:\AndroidProjects\AndroidApp\SDK\src\main\jni\prebuilt\armeabi-v7a\libusbandroidapp.so \

LOCAL_C_INCLUDES += D:\AndroidProjects\AndroidApp\SDK\src\main\jni

LOCAL_C_INCLUDES += D:\AndroidProjects\AndroidApp\SDK\src\release\jni

include $(BUILD_SHARED_LIBRARY)

【问题讨论】:

    标签: java android c++ android-ndk native


    【解决方案1】:

    惯例是在 .mk 文件中使用/ 作为路径分隔符。如果您曾经想在 Linux 上使用这个项目,这将是真正的帮助。

    在您的情况下,LOCAL_C_INCLUDES 可能无关紧要,因为您的 jni 目录中没有 C 文件。

    您应该清理 'main' jni/Android.mk 文件。您可以在子目录中使用 (include) 较小的 .mk 文件,前提是它们是正确的。例如,我希望 libusb/Android.mkpublic version on GitHub 不远,并且不编译特定于 Windows 的源,例如wince_usb.c

    这将是一个合理的第一次迭代:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := app
    LOCAL_WHOLE_STATIC_LIBRARIES := native
    
    include $(BUILD_SHARED_LIBRARY)
    
    include $(LOCAL_PATH)/ip/Android.mk
    include $(LOCAL_PATH)/nativeinterface/Android.mk
    include $(LOCAL_PATH)/libusb_saki4510t/Android.mk
    

    我不知道您是否需要像 libDropboxSync.so 等预建库,但它们在 jni/prebuilt/Android.mk 中列出。

    【讨论】:

    • 好的,我将把 \ 改为 /。您说 LOCAL_C_INCLUDES 可能无关紧要,因为我的 jni 目录中没有 C 文件。但是我确实在 jni 目录中有 C 文件,看我的第一篇文章,就在第 3 行和第 4 行的开头,我写了 'ip.c' 和 'native.c' 的完整路径,它们都位于jni 文件夹。
    • ip.c$(LOCAL_PATH)/ip/Android.mk 覆盖,不是吗?而 native.c 旁边还有另一个 Android.mk,我也是 include.
    • 我不知道,我对这个文件的格式以及需要和不需要的内容仍然有些困惑。 LOCAL_SRC_FILES 和 LOCAL_C_INCLUDES 有什么区别?为什么第一个还不够?
    • 您可以了解android.mk,但简而言之,LOCAL_SRC_FILES 列出了必须编译的 c 和 cpp 文件(相对于 LOCAL_PATH),而 LOCAL_C_INCLUDES 列出了包含编译它们所需的头文件。与 LOCAL_SRC_FILES 不同,LOCAL_C_INCLUDES 不依赖于 LOCAL_PATH。
    猜你喜欢
    • 2020-02-17
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多