ゲレの工房

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

備忘録 : android.hardware.camera2問題 : この端末モデルはアプリの APK マニフェストでサポートされていないため、この端末モデルのユーザーはアプリをインストールできません。 (その3)

前回の記事はこちらです。

blog.gelehrte.com


ブログの読者からコメントをいただきました。ありがとうございます。コメントを引用させていただきますと、

uses-featureのandroid.hardware.camera2.fullって公式のリファレンスに見当たらないのですが、存在するのでしょうか?
もともと uses-featureの android.hardware.cameraは「背面カメラを使用する」という宣言であって、API verは関係ないような気がします。

これに関して再勉強しましたので、ここにメモしたいと思います。

そもそも uses-featureとはなんなのか

インストール先にこの機能が欲しいという宣言

まず uses-featureでandroid.hardware.cameraを制限した場合、これは以下を意味します。
背面カメラが無いAndroid機にはインストールしない。
私のアプリでは背面カメラが有効でないと動かないようなので、これはしょうがないものですね。実際にテストとして、前回の記事ではuses-featureを以下のようにしていました。

    <uses-feature android:name="android.hardware.camera" android:required="false"/>
    <uses-feature android:name="android.hardware.camera2.full" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>

これをこのように変更できました。

    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera2.full" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>

android:required="false"を消しただけですね。当然カメラ機能を使うアプリなので、 android:required="false"は不要でしたね。ごめんなさい。

ではuses-feature android:name="android.hardware.camera2.full" とは?

android.hardware.camera2.full とは?

以下の記事を参考にしました。
stackoverflow.com

拙い私の意訳ではありますが、私はこう解釈しました。
camera2には制限版と完全版があって、もし完全版を利用したい場合は android.hardware.camera2.fullとしてね。
ということだそうです。ただ宣言しちゃうと対応機種が0台になっちゃうので、android:required="false"としました。

じゃぁ宣言する必要ある?

ごめんなさい。不明です。ただ、Camera2APIを使用する以上、宣言することが親切だと思います、というものです。もちろんベストプラクティスでは無いとは思いますが、とりあえずこのようにした方がよさそうです。

uses-feature android:name="android.hardware.camera2 として android:required="false" は不要なんじゃない?

android:required="false"を消すと対応機種0台になっちゃいました。残念。

ひとまずの結論

こうして見ました

前述しましたが、以下のようにしました。

    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera2.full" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>

これによる対応機種の変動は、
変更前
f:id:gelehrtecrest:20180417151917p:plain

変更後
f:id:gelehrtecrest:20180417151947p:plain
対応機種変動ありませんでした。

uses-feature android:name="android.hardware.camera2" android:required="false" にしてみたら?

fullを消して見ました。これによる対応機種の変動は
f:id:gelehrtecrest:20180417152120p:plain
変動ありませんでした。

終わりに

自分の中で整理ができてなかったuses-featureについて少し整理ができました。これが誰かの役に立てばいいなと思います。
いやそれはおかしいという意見はどしどしいただけると嬉しいです。よろしくお願いします。


広告