我正在尝试构建本机应用程序,只是从命令行(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应用程序中使用本机代码。 提前感谢您的帮助。
答案 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。