LoginSignup
6
5

More than 3 years have passed since last update.

C++ メインな Android アプリの APK を gradle を使わずビルドする

Last updated at Posted at 2019-02-21

背景

  • AR, Vision や 3D レンダリング(GLES, Vulkan)などで, C++ + CMake がメインで Android native で動くアプリを開発したい(エミュレータを使うのができない. GPU の性能を実デバイスで確認する必要があるなど)
  • Android での C++ 部分の動作確認が主であるので, release APK を作るとか, 凝った UI を作る必要はない.
  • デバッグはビジュアルデバッグ(画面に色をつけたり, グラフを出したり)がメインなので gradle にあるように build variant などプロジェクトのビルド構成を変える必要がない(C++ パートは CMake などでビルド構成を設定)
  • gradle が遅くてつらい. gradle すぐバージョンアップしたり仕様かわったりで, バージョンミスマッチとかでてつらい. gradle でよくわからないモジュールがたくさんダウンロード必要になってつらい
  • Ant の時代はよかった. しかし Ant でのビルドは deprecated 扱いとなっている.

gradle も Ant なども, 実際には Android SDK のツールを呼び出しているだけなはずので, gradle 非依存でビルド環境を整えることができるはず.

手順

先人たちの素晴らしい記事があります. 顧客が本当に欲しかったものです. ありがとうございます.

How to make Android apps without IDE from command line
https://medium.com/@authmane512/how-to-build-an-apk-from-command-line-without-ide-7260e1e22676

Building an Android App from the Command Line
https://www.hanshq.net/command-line-android.html

先人たちの素晴らしい記事を参考にし, 作成した APK が Android 9(Pixel3) で動きました. ありがとうございます.

APK とは?

中身は単に zip で圧縮したフォルダっぽい.
C++ は .so ファイルで, Java レイヤーは jar で格納
フォルダのレイアウトで, アセットやアーキティクチャの管理をしたりしている模様.

注意点など

apksigner で署名したあとに zipalign すると adb install できない(バイナリのレイアウトが変わってハッシュ値が変わるから?).

zipalign でアラインは, 昨今のスマホの性能向上で基本不要かも?(e.g. Android 8 以降くらいの端末とか)

参考文献

Filament では .lib/.so は CMake + Ninja, 最後の APK を作るところは gradle を使っていますね.

SDK version

SDK 28 でビルドし, Android 9 で動かすと, "古い環境向けにビルドされています" warning が出ます.
min sdk version を指定していないためです.

昨今では, SDK バージョンは AndroidManifest.xml に記載するのではなく, apksigner の引数で指定が推奨のようです.

apkzlib

並列 zip 圧縮などして, より高速に apk を作るツール.

https://android.googlesource.com/platform/tools/apkzlib/

あんまり公開情報はないのでつらい.

TODO

  • Meson build と組み合わせ, CMake 依存を無くす. e.g. https://github.com/glimpse-project/glimpse/blob/master/build_apk.py
  • aapt/zipalign/apksigner あたりを呼ぶスクリプトを書く
  • Clang/LLVM を Android native でビルドして, C++ コードの Android 上での動的コンパイル(JIT コンパイル)を試す.
  • Java(UI)のアプリと, C++ 処理の部分を切り分け, C++ 部分はバックグランドサービス(Intent?)として動かし, C++ 部分のリコンパイルと差し替えをやりやすくする.
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5