はじめに
突発的に Android の NativeActivity を使う必要があったので、公式が提供しているサンプルを使おうとしたのですが、現状(2023.11.10時点)そのままでは動かない状態になっているので、必要な修正手順を記します。
修正手順
1. git clone
# ndk-samples を取得
git clone https://github.com/android/ndk-samples
# native-activity を AndroidStudio で開く
studio ndk-samples/native-activity
2. gradleのアップグレード
Android Studio で開いた時 Start AGP Upgrade Assistant
が出ると思われるので、念のためアップグレードをしておきましょう。
3. AndroidManifest.xmlを修正
その後、ビルドして起動すると androidx.startup.InitializationProvider not found
というエラーで常にクラッシュするので、AndroidManifest.xml
から android:hasCode="false"
という行を削除する必要があります。
% git diff
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f35e5f3..718050e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,6 @@
<application
android:allowBackup="false"
android:fullBackupContent="false"
- android:hasCode="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
ここまでの修正で起動できるようになります。
確認
起動するとブラックスクリーンになり、画面を触ると画面の色が変わる感じで動作します。
折角なのでどういう処理をしているか覗いてみました。
app/cpp/cpp/main.cppがメインコードのようです。
android_main
関数がエントリポイントで、初期化 & 復帰処理後にイベントを拾って処理することを繰り返していることが分かります。
何故か(C++なのに)Cのような実装になっていたり、warningが大量に出ていて気持ち悪かったので、軽くモダン化改修しつつwarningを対処したバージョンを作ってみました。