【问题标题】:Eclipse, Android ndk, source files, and library project dependenciesEclipse、Android ndk、源文件、库项目依赖
【发布时间】:2012-11-04 15:30:45
【问题描述】:

在 Microsoft Visual Studio 2010 中,可以创建具有多个项目的解决方案并设置项目之间的依赖关系。我试图弄清楚是否可以通过 NDK 使用 Eclipse 完成同样的事情。更具体地说,我想知道是否可以在普通的Android项目中创建可以引用Android库项目中的C头文件的C源文件。

例如:

Android library project: Sockets
Ordinary Android project: Socket_Server 

Sockets contains all the C header/source files that are needed to do socket I/O.
Socket_Server contains test code that makes calls to the functions that are defined in Sockets library project.  This test code requires a header file that contains the function declaration of all API calls.

我已经通过以下方式设置了项目之间的库依赖:

Properties > Android > Library > Add

在 Socket_Server 中有一个名为 SocketTestServer.cpp 的文件。它包含测试代码,但对库项目 Sockets 进行 API 调用,并通过 #include "Nv_Socket.h" 进行调用,这不是 Socket_Server 的一部分:

jni/SocketTestServer.cpp:1:23: fatal error: Nv_Socket.h: No such file or directory
compilation terminated.

【问题讨论】:

  • 仍不清楚:“Sockets 包含所有需要进行套接字 I/O 的 C 头文件/源文件。” ...“在Socket_Server 中,有一个名为 SocketTestServer.cpp 的文件。”。那么哪里只有java代码,哪里只有C?
  • 我其实有3个项目,Socket_Client、Socket_Server和Sockets。在 Socket_Client 和 Socket_Server 中,我有一份来自 Sockets JNI 文件夹的所有 C 源代码的副本。我可以在我的 Nexus 7 上运行 Socket_Server 和 Socket_Client 应用程序就好了。问题是我不想在客户端/服务器项目中拥有相同 C 源文件的副本,因为它们之间的唯一区别是 test.cpp 文件对相同的源代码库进行 API 调用。我正在尝试创建项目依赖项,就像在 Visual Studio 2010 中完成的那样。
  • 所以..如果我有一个 test.cpp 文件,其中 #include 来自 Sockets 的一些头文件,我如何在 Eclipse 中设置该项目依赖项?
  • 我修正了我的回复。为什么要将其实现为 NDK?你有良好的 java API 并使用 jar 文件来防止重复。我仅出于性能原因使用NDK(从文件读取/写入/从文件中读取,从 url 获取/发布......)
  • So..if I have a test.cpp file that #include some header files from Sockets, how do I set up that project dependency in Eclipse? 来自我的经验。你不能通过同一个标头集成 2 个 Android 项目

标签: android android-ndk library-project


【解决方案1】:

http://www.kandroid.org/ndk/docs/IMPORT-MODULE.htmlhttp://www.kandroid.org/ndk/docs/PREBUILTS.html。诀窍是不必将二进制文件从一个项目复制到另一个项目!此外,使用LOCAL_EXPORT_C_INCLUDES 可以保证使用最新版本

#include "Nv_Socket.h"

【讨论】:

    【解决方案2】:

    我想我解决了。如果你制作一个 .so 文件,把它放在你的 /jni 文件夹中,然后在你的 .mk 文件中引用它,你应该没有问题编译。

    .mk 文件:

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    # Turn on C++ Exception handling
    LOCAL_CPP_FEATURES += exceptions
    LOCAL_CPPFLAGS += -fexceptions
    
    # Load LogCat utility
    LOCAL_LDLIBS := -llog
    
    # C flags
    LOCAL_CFLAGS    += -Wno-psabi -fpermissive
    
    # Module name                  
    LOCAL_MODULE    := ServerSockets
    
    # C Header includes
    LOCAL_C_INCLUDES := $(LOCAL_PATH)
    
    # Source files
    LOCAL_SRC_FILES := libSockets.so 
    
    include $(PREBUILT_SHARED_LIBRARY)
    

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多