前回、Androidで音声ファイルを再生するのにうんぬんという話を書きましたが、そういうAndroidをようやく本格的に意識し始めたところでAndroidと他のプラットフォーム(私はCentos)の両方でQtをビルドしたりすることを話します。
結論
と、なんかわざわざ切り出しましたが話は簡単です。記事にする必要なかった……?
c++ソースの場合
__ANDROID__
マクロでAndroid用の部分をくくります。例えば↓
# ifdef __ANDROID__
# include <QtAndroidExtras/QtAndroid>
# include <QtAndroidExtras/QAndroidJniObject>
# endif /* __ANDROID__ */
.proファイルの場合
android{ }
でAndroid用の部分をくくります。例えば↓
android{
QT += androidextras
QT += remoteobjects
REPC_REPLICA += pingpong.rep
#REPC_SOURCE += pingpong.rep
}
あんまりいらない説明
前回AndroidのAPIを実行するためにしれっと登場したQAndroidJniObject
ですが、こやつを使用するプロジェクトはAndroid用のconfigureだけでしかビルドできないようです。
しかしそれだと画面の調整とかするときに、いちいち端末にデプロイすると少なからず時間がかかって、不便です。画面を見るだけならQt Creatorを動かしているプラットフォーム上で実行する方が当然速いです。
何度も何度も修正と実行を繰り返すのが好きな人のためには上記のやり方が必要でしょう。
QMLソース上ではAndroid用の切り分けができない
たぶん。なのでAudioオブジェクトをLinuxの時だけ使うとかはできないっぽい。
(2018/09/17 気が向いたので追記)
処理の切り分けぐらいはプラットフォームを取得することでできます。方法は……忘れた。WindowsだとOS環境変数が使えます。ただオブジェクトは共通なので、OS依存のオブジェクトがあると困ります。
あとは.proファイルそのものをOSによって切り分けるというアイデアもあります。しかしOSごとに別の構成ファイルを管理していなければならないのはとても面倒。
ソース/クラスによってはAndroid以外ではほとんどNOPになるものもある
前回の音声ファイル再生クラスがそうですね。Android用の再生機能=Android以外では使えない。
それどころか全体にコンパイルすることすら……なんかカッとなってLinux用にダミーのクラスを作成し、Linux時はそちらをロードするようにしてあります。
……なんかちゃんとQtの設定がうまくいっていれば気にしなくてもいい話なんじゃないかという気がしてきましたが、まあ、もし同じような状況になってしまった人のためにこの記事は置いておきます。