1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Qt/QMLをAndroidとそれ以外の両方でビルドする - Qtで作るAndroid目覚ましもどき #4-2 -

Last updated at Posted at 2018-01-06

前回、Androidで音声ファイルを再生するのにうんぬんという話を書きましたが、そういうAndroidをようやく本格的に意識し始めたところでAndroidと他のプラットフォーム(私はCentos)の両方でQtをビルドしたりすることを話します。

結論

と、なんかわざわざ切り出しましたが話は簡単です。記事にする必要なかった……?

c++ソースの場合

__ANDROID__マクロでAndroid用の部分をくくります。例えば↓

summer_clock.cpp
# ifdef    __ANDROID__
# include <QtAndroidExtras/QtAndroid>
# include <QtAndroidExtras/QAndroidJniObject>
# endif /* __ANDROID__ */

.proファイルの場合

android{ } でAndroid用の部分をくくります。例えば↓

summer_clock.pro
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の設定がうまくいっていれば気にしなくてもいい話なんじゃないかという気がしてきましたが、まあ、もし同じような状況になってしまった人のためにこの記事は置いておきます。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?