アドベントカレンダーに投稿する記事の3番目です。
今回は、dxlibのandroid版の使いかたです。今回何かandroid版を使って記事を書こうとしたら色々と苦労したので苦労したところを共有しようと思いました。なお、あくまでも私の環境で成功した方法ですし、アプリを公開する予定はないので自分のスマホで動けばいいの精神で開発しています。アプリを公開する人は気を付けてください。
前提条件
android版を使うには以下のものが必要です。
- android studio
(visualstudioでも開発できますが、今後を考えると絶対にandroidstudioにしてください) - android版dxlib
環境構築
1からすべてを説明するには大変なので、ある程度公式サイトに書かれていることは省略させていただきます。※最初にandroid版dxlibの加工する工程がありましたが管理人さんが対応したことにより消去しました。
- 公式サイトを参考にandroidstudioでプロジェクトを作成する。
注意することがあって、途中にあるminimumSDKというところをAPI26にすることです。
こちらの環境ではデフォルトはAPI21となっていました。
正確には必須かはわかりませんが、ここで指定しているのが低すぎると一部機能がきちんと動かない可能性があります。ちなみに、ここで公式サイトではNDKが無いとエラーが出ると書いてありますが、こちらで確認した限りでは自動でダウンロードされました。 - 次にAndroidManifest.xmlを編集します。公式のものにいくつか修正が必要です。11行目の@style/AppThemeを@style/Theme.(プロジェクト名)、13行目のandroid:name=".MainActivity"の後ろの>の前で改行してandroid:exported="true"というのを追加します。
- 公式サイトの通りにCMakeLists.txtを変える。
- (ここは今のところ警告だったと記憶してるのでやらなくてもいいですがやった方がいいです。)setting.gradleのrepositoriesというところのJCenter()というところを消す。コメントで警告が書いてあるので場所はすぐにわかると思います。
- ここが一番わかってなく、管理人さんとの違いを考えるといまいち条件がわかっていません。build.gradle(Moduleなんとかってカッコに書いてあるやつです。もう一つと間違えないように)を開きます。一番下のdependenciesというところを確認します。
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
となっていたら僕と同じ状態で、ビルドすることができません。どうやら、バージョンが高すぎるようです。(API31を使うなら上記のままでもいいですがこちらでは正常に起動できることを確認できていません。)
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
という風に変更してください。本当はむやみやたらに変更したらよくなさそうですが、管理人さんが正常に実行できることを確認しているプロジェクトと同じものなのでたぶん大丈夫です。
これでプロジェクトの設定は終了です。
プログラムは変わらないので自由にプログラミングをしてください。従来はプログラムのヘッダーファイルを読み込んでいるのところに赤線が引かれ、関数名が赤文字になっているのですが、管理人さんが対応したことによって、必要がなくなりました。
次にエミュレータの用意です。
- c:\users\ユーザー名\.androidをエクスプローラで開く。
- advancedFeatures.iniというファイルを作成して、
Vulkan = off
GLDirectMen = on
という2行を入力して保存。(これが無いとエミュレータが起動できません。なお、意味は分かっていません。)
3. 公式サイトの通りにエミュレータを作成する。一応管理人さんはAPI30で動いたらしいですが、僕はAPI29のエミュレータを使いました。
これで後は公式サイトに書いてあるようにエミュレータ上でアプリを動かすことができます。
おまけ
最後に実機で動かしたい向けにって思ったのですが、ここから先はちょっと説明が難しいので自分で調べてください。スマホ側で設定が必要なのですが、google公式の方法ですが隠しコマンドっぽい操作になるので頑張ってください。僕は既にその操作をやっていたのでスムーズに実機デバッグできました。API29でビルドしたのでandroid11のスマホで動くか心配でしたが、無事に実機で動かすことができました。
まとめ
この記事に書いてある情報が役立つ人…がいるかわかりませんが、誰かしら役に立ってくれると嬉しいです。
次の記事はいろいろ考えていますが、アドベントカレンダーに記事投稿しているのは今のところ僕だけなのが気になって果たして記事を追加していいものか。もしよさそうだったらせっかくandroid版の開発環境が整ったのでdxlibとopencvを同時利用した何かを作ってみたいと思います。で、さらに次の記事では(できたら)ARアプリを作ってみたいと思います。