概要
Android 端末上に、Android ネイティブ向けのビルド環境を構築し、 Android ネイティブ向けのアプリを作成するまでの手順を、詳細を省いて説明します。
Termux での開発では、クロスコンパイルが困難であるため、ホストと同じアーキテクチャへの出力を行います。
今回は GUI ライブラリに DXライブラリ Android 版を使用しています。
手元の開発環境を GitHub にアップロードしています。適宜使ってください。
以下は少し前に、DXライブラリ Android 版を使ったアプリ開発 on Termux を試したものです。
AndroidでAndroidアプリ(DXライブラリ使用)を開発してみたのです#Android #DXライブラリ #termux pic.twitter.com/vCCEV16pcs
— かめのこにょこにょこ (@kamenoko_dev) October 27, 2020
検証環境
項目名 | ||
---|---|---|
端末 | Android Emulator | Aquos Phone Sense6 |
OS | Android 11 | Android 12 |
CPU Architecture | x86_64 | arm64 |
Termux のインストール
Google Play または F-Droid1 から termux をインストールしてください。
必要なパッケージのインストール
pkg install curl build-essential aapt openssl-tool apksigner
# それと適当なテキストエディタ
pkg install vim
DXライブラリ Android版のダウンロードと解凍
curl -o DxLib.zip https://dxlib.xsrv.jp/DxLib/DxLib_Android3_22a.zip
unzip -oCP932 DxLib.zip
ソースファイルを書く
Android版の注意点 (Windows版にあってAndroid版にない関数、ファイルパッケージングの制約など) に気を付けながら適当に書いてください。
#include <DxLib.h>
int android_main() {
if (DxLib_Init() == -1) {
return 0;
}
while (ProcessMessage() == 0) {
ClearDrawScreen();
DrawBox(0, 0, 300, 300, GetColor(255, 0, 0), TRUE);
ScreenFlip();
}
DxLib_End();
}
ビルドスクリプトの記述
依存ライブラリが非常に多いのと、ライブラリ同士の依存関係に注意が必要です。
clang -o libmain.so --shared --fPIC \
Main.cpp \
-I<DXライブラリへのパス>/<アーキテクチャ> \
-L<DXライブラリへのパス>/<アーキテクチャ> \
-landroid -lGLESv1_CM -lEGL -lstdc++ -lGLESv2 -lOpenSLES \
-lm -lDxLib -lDxUseCLib -ljpeg -lpng -lzlib -ltiff \
-ltheora_static -lvorbis_static -lvorbisfile_static -logg_static \
-lbullet -lopus -llog -ldl
# TODO: CMakeFile を使いたい
AndroidManifest.xml の記述
知識がないので、android/ndk-samples をほぼそのまま使用
パッケージングスクリプトの記述
cp libmain.so lib/<アーキテクチャ>
cp $PREFIX/lib/libc++_shared.so lib/<アーキテクチャ>
aapt package -M AndroidManifest.xml -F app.apk -f
aapt add app.apk lib/<アーキテクチャ>/libmain.so
aapt add app.apk lib/<アーキテクチャ>/libc++_shared.so
APK 署名の準備
keytool
が termux では使えそうにないので、OpenSSL を使って手動生成 しました。
openssl genrsa -3 -out key.pem 2048
openssl req -new -x509 -key key.pem -out key.x509.pem -days 10000 -subj '/'
openssl pkcs8 -in key.pem -topk8 -outform DER -out key.pk8 -nocrypt
APK への署名
apksigner sign --key key.pk8 --cert key.x509.pem app.apk
作った APK のインストール
手元の環境では、ファイルアプリから Termux が公開するストレージを開いて、それから .apk をタップしてインストールできました。
環境によっては、SDカードのダウンロードに移したり、提供元不明のアプリのインストールを許可したりする必要があると思われます。
あとがき
これが筆者のはじめての Android ネイティブアプリ作成であり、あちらこちらにバッドノウハウがちりばめられていると思います。
それと、手順が煩雑すぎるくせに、単一アーキテクチャにしか対応できないなど、どう考えても手軽とはいきません。
しかし、Android上でAndroidネイティブアプリを手軽に制作できる環境の潜在需要は、おそらく非常に大きいと考えている故、
私より強いAndroidエンジニアがこの記事を踏み台にしていくことを望んでいたりします。
-
Android SDK 29 以降の SELinux の W^X ポリシーの強化と、Google Play が受け付けるアプリの最低 SDK バージョンの引き上げのため、Play Store 版の機能更新ができない状況になっています。詳細は Termux and Android 10 を確認してください。 ↩