AndroidでAndroidアプリ(DXライブラリ使用)を開発する


概要

Android 端末上に、Android ネイティブ向けのビルド環境を構築し、DXライブラリ Android版を使って Android ネイティブ向けのアプリを作成するまでの手順を、詳細を省いて説明します。

手元の開発環境を GitHub にアップロードしています。適宜使ってください。

筆者のまともに使える Android 環境がエミュレータしかないので、実機では通用しない可能性が非常に高いと思われます。

以下は少し前に、DXライブラリ Android 版を使ったアプリ開発 on Termux を試したものです。

検証環境

項目名
端末 Android Emulator
OS Android 11
CPU Architecture x86_64

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 DxLib.zip

なお、Zip ファイルの文字エンコードの違いゆえにファイル名の文字化けが起きます。
この記事 を参考に、DXライブラリ本体に含まれるフォルダのうち、その名前に Android を含むフォルダを適当な名前にリネームすることをお勧めします。

ソースファイルを書く

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エンジニアがこの記事を踏み台にしていくことを望んでいたりします。


  1. Android SDK 29 以降の SELinux の W^X ポリシーの強化と、Google Play が受け付けるアプリの最低 SDK バージョンの引き上げのため、Play Store 版の機能更新ができない状況になっています。詳細は Termux and Android 10 を確認してください。