NDK编译hello-world
编译
-
下载最新NDK包:NDK 下载

-
创建hello-world工程
ubuntu:~/workspace/android-ndk-r27d-linux/android-ndk-r27d$ tree app
app
└── hello-world
├── Android.mk
├── Application.mk
├── build.sh
├── clean.sh
└── main.c
1 directory, 5 files
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 模块名称 - 这将生成可执行文件
LOCAL_MODULE := hello-world
# C源文件
LOCAL_SRC_FILES := main.c
# 构建可执行文件(而不是共享库)
include $(BUILD_EXECUTABLE)
Application.mk
# 指定目标ABI
APP_ABI := all
# 使用系统C库
APP_STL := none
# 平台级别
APP_PLATFORM := android-21
# 编译标志
APP_CFLAGS := -O2 -Wall -std=c99
build.sh
#!/bin/bash
# 设置NDK路径 - 修改为你的实际路径
NDK_PATH=/home/ubuntu/workspace/android-ndk-r27d-linux/android-ndk-r27d
# 设置项目路径
export NDK_PROJECT_PATH=$(pwd)
echo "开始编译命令行可执行文件..."
$NDK_PATH/ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk
if [ $? -eq 0 ]; then
echo "编译成功!"
echo "生成的可执行文件在: libs/"
find libs -name "hello-world" -type f
else
echo "编译失败!"
exit 1
fi
clean.sh
#!/bin/bash
# 设置NDK路径 - 修改为你的实际路径
NDK_PATH=/home/ubuntu/workspace/android-ndk-r27d-linux/android-ndk-r27d
export NDK_PROJECT_PATH=$(pwd)
echo "清理编译文件..."
$NDK_PATH/ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk clean
# 删除生成目录
rm -rf libs
rm -rf obj
echo "清理完成!"
main.c
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("hello world with android\n");
return 0;
}
- 编译工程
cd app/hello-world
chmod +x build.sh clean.sh
ubuntu:~/workspace/android-ndk-r27d-linux/android-ndk-r27d/app/hello-world$ ./build.sh
开始编译命令行可执行文件...
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-21.
[arm64-v8a] Compile : hello-world <= main.c
[arm64-v8a] Executable : hello-world
[arm64-v8a] Install : hello-world => libs/arm64-v8a/hello-world
[armeabi-v7a] Compile thumb : hello-world <= main.c
[armeabi-v7a] Executable : hello-world
[armeabi-v7a] Install : hello-world => libs/armeabi-v7a/hello-world
[x86] Compile : hello-world <= main.c
[x86] Executable : hello-world
[x86] Install : hello-world => libs/x86/hello-world
[x86_64] Compile : hello-world <= main.c
[x86_64] Executable : hello-world
[x86_64] Install : hello-world => libs/x86_64/hello-world
编译成功!
生成的可执行文件在: libs/
libs/x86/hello-world
libs/arm64-v8a/hello-world
libs/x86_64/hello-world
libs/armeabi-v7a/hello-world
运行
-
准备一台Android手机(Pixel 7)
-
打开USB调试模式,并在手机上完成授权
-
查看架构
ubuntu:~/workspace$ adb devices
List of devices attached
34111FDH20020G unauthorized
ubuntu:~/workspace$ adb devices
List of devices attached
34111FDH20020G device
ubuntu:~/workspace$ adb shell getprop ro.product.cpu.abi
arm64-v8a
- 上传二进制文件到Android手机
cd app/hello-world
adb push libs/arm64-v8/hello-world /data/local/tmp
- 在Android手机上执行二进制文件
adb shell
cd /data/local/tmp
chmod +x hello-world
panther:/data/local/tmp $ ./hello-world
hello world with android

浙公网安备 33010602011771号