Android NDKでC++をビルドしてAndroid上で実行ファイルを動かしたい
はじめに
題名どおりC++をビルドして、バイナリファイルをAndroid上で実行します。
ビルドにAndroid NDKを使いましたよーって話です。
ローカル環境
Androidの環境
環境構築
export PATH=$PATH:/Users/ユーザ名/Library/Android/sdk/ndk/22.0.7026061
ソースコード
- HelloWorld.cppを作成(Project名/app/src/HelloWorld.cpp)
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello world.\n"); return 0; }
ビルドの設定ファイル
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := HelloWorld LOCAL_SRC_FILES := HelloWorld.cpp include $(BUILD_EXECUTABLE)
- Application.mkを作成(Project名/Application.mk)
APP_PROJECT_PATH := /Users/ユーザ名/AndroidStudioProjects/プロジェクト名 APP_ABI := arm64-v8a #CPUアーキテクチャを設定(複数設定可能) APP_PLATFORM := android-28 #APIレベルを設定 #ターゲットのAndroid.mkを指定 APP_BUILD_SCRIPT := /Users/ユーザ名/AndroidStudioProjects/プロジェクト名/app/src/Android.mk
ビルド実行
- プロジェクト直下で以下を実行
ndk-build NDK_PROJECT_PATH=${PWD} NDK_APPLICATION_MK="\$(NDK_PROJECT_PATH)/Application.mk"
- CPUアーキテクチャごとに実行ファイルが作成される
ファイルの転送
adb push プロジェクト名/libs/arm64_v8a/HelloWorld /data/data/パッケージ名/HelloWorld
端末で実行
- ルート権限でログインして実行ファイルを実行
adb root adb shell chmod 555 /data/data/パッケージ名/HelloWorld /data/data/パッケージ名/HelloWorld
- 実行結果
Hello World