2014-11-23 92 views
0

我正尝试构建本地应用程序以仅从命令行(adb shell)使用它。我试图使用ndk-build(不创建项目)来构建它。这里是我的代码Application.mk在不创建项目的情况下构建NDK源码

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

以下是使我完成所需任务的最低步骤。
(我假设你已经下载并安装了Android SDK和NDK,并使用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测试/ 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 

现在你应该有ndk-test/libs/armeabi/文件夹下的文件test

5)测试:

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

瞧!


** 我在Nexus 5上用Android 5.0进行测试,因此需要这些标志,您可能不需要它们。详情请参阅Running a native library on Android L. error: only position independent executables (PIE) are supported

+2

如果您在jni/Application.mk中设置APP_PLATFORM:= android-16(或更高版本)或APP_PIE:= true,则不需要手动设置PIE选项(尽管对于此示例,一个额外的文件)。 – mstorsjo 2014-11-24 07:43:25

+0

@mstorsjo:是的,的确,这可以做到这一点。感谢您的意见。 – ozbek 2014-11-24 08:05:04

+0

Thx !!作品!我不得不添加变量! – braohaufngec 2014-11-24 22:40:44

相关问题