구글 플레이 콘솔에서 안드로이드 배포시,
비공개 테스트 단계에서 지원되는 기기가 하나도 없는 오류를 만나는 경우가 있다.
이는 카메라 설정과 관련된 오류로,
모든 카메라 기능을 필수적으로 요구하도록 설정되어 있기 때문일 수 있다. (대개는 이 경우인 듯)
특정 camera 기능을 사용하도록 요구하는 설정을 직접 작성해주지 않으면,
해당 camera 기능을 사용하도록 요구하는 설정이 default가 true로 되어 있게 되고,
아무런 camera 기능을 기재하지 않으면 모든 camera 기능을 사용하도록 요구하는 설정이 true로 되어 있게 된다.
그런데 기기들 중에 모든 camera 기능을 제공하는 기기가 없기 때문에 지원기기가 0개로 표시가 되는 것이다.
따라서 AndroidManifest.xml에 해당 camera 기능들을 required="false"로 설정해야 한다.
required가 false라는 것은, 필수가 아닌 것이지, 해당 카메라가 없으면 없는대로, 있으면 사용하는 방식이다.
아래 코드를 AndoridManifest.xml의
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> 태그 안쪽에 작성하면 된다.
<uses-feature
android:name="android.hardware.camera2"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera.front"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera.any"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false"/>
예시 커밋
https://github.com/Junanjunan/gnuboard_react_native/commit/b0aa799a8cff318652ddc3ed96517e60bab08fb0
참고 블로그
Claude 질문 & 답변
Q.
I want to add uses-feature in AndroidManifest.xml. Can you teach me where do I have to uses-feature in AndroidManifest.xml?
A.
I'll help you understand how to add <uses-feature> tags in your AndroidManifest.xml file. The <uses-feature> tags should be placed inside the <manifest> tag but outside the <application> tag.
Here's a basic example:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- uses-feature tags go here, before application tag -->
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Your application components go here -->
</application>
</manifest>
Some common use cases for <uses-feature>:
- Hardware features:
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.bluetooth" />
<uses-feature android:name="android.hardware.location.gps" />
2. Software features:
<uses-feature android:name="android.software.leanback"
android:required="false" />
3. OpenGL ES version:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Key attributes:
- android:name: Specifies the feature name
- android:required: Boolean that indicates whether the feature is required (true) or optional (false)
- android:glEsVersion: For specifying OpenGL ES version requirements