Loading

NDK编译hello-world

编译

  1. 下载最新NDK包:NDK 下载
    image

  2. 创建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;
}
  1. 编译工程
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

运行

  1. 准备一台Android手机(Pixel 7)

  2. 打开USB调试模式,并在手机上完成授权

  3. 查看架构

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

  1. 上传二进制文件到Android手机
cd app/hello-world
adb push libs/arm64-v8/hello-world /data/local/tmp

  1. 在Android手机上执行二进制文件
adb shell

cd /data/local/tmp
chmod +x hello-world

panther:/data/local/tmp $ ./hello-world                                                                                                                      
hello world with android

posted @ 2025-11-25 09:55  eiSouthBoy  阅读(7)  评论(0)    收藏  举报