在不创建项目的情况下构建NDK源

时间:2014-11-23 18:39:10

标签: android c android-ndk

我正在尝试构建本机应用程序,只是从命令行(adb shell)使用它。我试图使用ndk-build(不创建项目)来构建它。这是我的代码Application.mk

APP_ABI := all

Application.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := test.and
LOCAL_SRC_FILES := main.cpp
LOCAL_CPPFLAGS := -std=gnu++0x -Wall         # whatever g++ flags you like
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog   # whatever ld flags you like

include $(BUILD_EXECUTABLE)    # <-- Use this to build an executable.

的main.cpp

#include  <stdio.h>//for printf
#include  <stdlib.h>//for exit

int main(int argc, char **argv)
{
        int i = 1;
        i+=2;

        printf("Hello, world (i=%d)!\n", i);

        return 0;
        exit(0);
}

我正在接下来的错误

Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    
/home/crosp/.AndroidStudioBeta/android-ndk-cr/build/core/build-local.mk:130: *** Android NDK: Aborting    .  Stop.

有没有办法在不创建项目的情况下编译它,我根本不需要项目,我只想编写没有GUI的本机应用程序并在Java应用程序中使用本机代码。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

以下是我完成您想要的最低步骤。
(我假设您已经下载并设置了Android SDK和NDK,并且正在使用shell中的ndk-build命令进行构建。)

1)导航到您的首选位置并创建所需的文件夹:

$ mkdir -p ndk-test/jni

2)设置NDK_PROJECT_PATH环境变量:

$ export NDK_PROJECT_PATH=./ndk-test

3)创建Android.mk and main.cpp files under ndk-test / jni /`:

$ cd ndk-test/jni/
$ vi Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

# see note at ** for following flags
LOCAL_CFLAGS += -fPIE
LOCAL_LDFLAGS += -fPIE -pie

LOCAL_MODULE    := test
LOCAL_SRC_FILES := main.cpp

include $(BUILD_EXECUTABLE)

:wq


$ vi main.cpp
#include  <stdio.h>//for printf
#include  <stdlib.h>//for exit

int main(int argc, char **argv)
{
    int i = 1;
    i += 2;

    printf("Hello, world (i=%d)!\n", i);

    return 0;
    exit(0);
}

:wq

4)导航回原始文件夹并构建项目:

$ cd -

$ ndk-build
[armeabi] Compile++ thumb: test <= main.cpp
[armeabi] StaticLibrary  : libstdc++.a
[armeabi] Executable     : test
[armeabi] Install        : test => libs/armeabi/test

现在,您应该在test文件夹下有ndk-test/libs/armeabi/个文件。

5)测试:

$ adb push ndk-test/libs/armeabi/test /data/local/tmp/
$ adb shell
shell@hammerhead:/ $ cd /data/local/tmp
shell@hammerhead:/data/local/tmp $ ./test
Hello, world (i=3)!

瞧!

<小时/> ** 我使用Android 5.0在Nexus 5上进行了测试,因此需要这些标志,您可能不需要它们。有关详细信息,请参阅Running a native library on Android L. error: only position independent executables (PIE) are supported