[android] Google Play 스토어에 내 Android 앱이 내 기기와 호환되지 않는다고 표시되는 이유는 무엇입니까?

많은 사람들이 비슷한 문제를 가지고있는 것처럼 보이지만 특정 사례를 해결하는 해결책을 찾지 못한 것 같아서이 질문을하는 것이 주저 합니다.

Android 앱 ( 실제 앱 링크)을 개발 하여 Play 스토어에 업로드했습니다. Play 스토어에 따르면

"This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."

물론 그것이 제가 앱을 개발 한 전화기이므로 호환 되어야 합니다. 다른 기기를 사용하는 사람들은 호환된다고 말하고 다른 사람들은 호환되지 않는다고 말하지만 추세를 찾을 수 없습니다. (분명히 저는 Android 기기를 사용하는 사람을 많이 알지 못합니다.)

나는 다음을 시도했다 :

  • 이 답변에서res/raw 제안한대로 디렉토리 에서 큰 파일을 이동합니다 . 거기에있는 유일한 파일은 ~ 700kB 텍스트 파일 이었지만 명백한 변경없이 파일을 옮겼습니다 .assets/

  • 다음 두 가지 기능 어설 션 추가 :

    <uses-feature android:name="android.hardware.faketouch" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
    

    내 휴대 전화가 일반적인 android.hardware.touchscreen기능 을 지원하지 않는다고 생각 하지만 다시 한 번 명백한 변화는 없습니다.

APK를 Play 스토어에 업로드 할 때 활성으로보고하는 유일한 필터는 android.hardware.faketouch기능입니다.

다음은의 출력입니다 aapt dump badging bin/NZSLDict-release.apk.

package: name='com.hewgill.android.nzsldict' versionCode='3' versionName='1.0.2'
sdkVersion:'4'
targetSdkVersion:'4'
uses-feature:'android.hardware.faketouch'
uses-feature-not-required:'android.hardware.touchscreen'
application-label:'NZSL Dictionary'
application-icon-160:'res/drawable/icon.png'
application: label='NZSL Dictionary' icon='res/drawable/icon.png'
launchable-activity: name='com.hewgill.android.nzsldict.NZSLDictionary'  label='NZSL Dictionary' icon=''
main
other-activities
supports-screens: 'small' 'normal' 'large'
supports-any-density: 'true'
locales: '--_--'
densities: '160'

완전성을 위해 내 매니페스트 파일 :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.hewgill.android.nzsldict"
      android:versionCode="3"
      android:versionName="1.0.2">
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
    <uses-feature android:name="android.hardware.faketouch" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
    <application android:label="@string/app_name"
        android:icon="@drawable/icon">
        <activity android:name="NZSLDictionary"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".WordActivity" />
        <activity android:name=".VideoActivity" />
        <activity android:name=".AboutActivity" />
    </application>
</manifest>

Play 스토어의 ‘기기 가용성’섹션에서 Wildfire S를 포함한 모든 HTC 기기가 지원되는 것을 확인할 수 있습니다. ‘G1 (송어)’및 ‘Touch Viva (opal)’를 제외한 모든 기기가 지원됩니다. 실제로 “Wildfire S (marvel)”와 “Wildfire S A515c (marvelc)”가 모두 지원되는 것으로 표시되어 있지만 “Wildfire S A510b”는 구체적으로 언급되지 않았습니다. 이런 종류의 하위 모델 식별자가 그렇게 중요 할 수 있습니까? Google Play에서 다른 여러 앱을 문제없이 내 휴대 전화로 다운로드 할 수있었습니다.

이 시점에서 내가 하지 않은 유일한 일은 최신 버전을 업로드 한 후 ( 이 댓글 에서와 같이) 4 ~ 6 시간을 기다려 내 휴대 전화와 여전히 호환되지 않는지 확인하는 것입니다. 그러나 현재 Play 스토어 페이지에는 내가 업로드 한 최신 버전 인 1.0.2가 표시됩니다.



답변

대답은 전적으로 응용 프로그램 크기와 관련된 것으로 보입니다. 매니페스트 파일에 특별한 내용이없는 간단한 “hello world”앱을 만들어 Play 스토어에 업로드했으며 내 기기와 호환되는 것으로보고되었습니다.

res/drawable디렉토리에 더 많은 콘텐츠를 추가하는 것 외에는이 앱에서 아무것도 변경하지 않았습니다 . .apk크기가 약 32MB에 도달 했을 때 Play 스토어에서 내 앱이 내 휴대 전화와 호환되지 않는다고보고하기 시작했습니다.

Google 개발자 지원팀에 연락하여이 제한의 이유에 대한 설명을 요청하겠습니다.

업데이트 : 다음은 이에 대한 Google 개발자 지원 응답입니다.

메모 감사합니다. 현재 Google Play에 앱을 업로드하기위한 최대 파일 크기 제한은 약 50MB입니다.

그러나 일부 기기는 캐시 파티션이 50MB 미만이므로 사용자가 앱을 다운로드 할 수 없습니다. 예를 들어 HTC Wildfire 장치 중 일부는 35-40MB 캐시 파티션이있는 것으로 알려져 있습니다. Google Play에서 앱을 저장할만큼 캐시가 충분하지 않은 기기를 식별 할 수있는 경우 사용자에게 표시되지 않도록 필터링 할 수 있습니다.

결국 모든 PNG 파일을 JPG로 변환하여 품질을 약간 떨어 뜨리면서 문제를 해결했습니다. 이제 .apk파일은 28MB로 Google Play가 내 휴대 전화에 적용하는 임계 값보다 낮습니다.

나는 또한 모든 것을 제거 <uses-feature>했고 이제는 다음과 같습니다.

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />


답변

나는 이것도 만났다-나는 Lenovo IdeaTab A2107A-F에서 모든 개발을 수행했으며 여기에서 개발 빌드를 실행할 수 adb install있으며 문제없이 서명 된 APK (로 설치됨 )를 릴리스 할 수도 있습니다. 알파 테스트 모드로 게시되고 Google Play에서 사용할 수있게되면 ‘기기와 호환되지 않음’오류 메시지가 표시됩니다.

AndroidManifest.xml튜토리얼에서 다음 항목을 배치 한 것으로 나타났습니다 .

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />

음, Lenovo IdeaTab A2107A-F에는 자동 초점 카메라가 없습니다 ( http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611 , Cons : lacks autofocus camera). 그 기능을 사용하고 있는지 여부에 관계없이 Google Play는 아니오라고 말했습니다. 그것이 제거되면 내 APK를 다시 빌드하고 Google Play에 업로드했으며 이제 IdeaTab이 호환되는 장치 목록에 충분히 있는지 확인했습니다.

따라서 모든 항목을 <uses-feature>다시 확인하고 웹에서 복사하여 붙여 넣은 경우 다시 확인하십시오. 사용하지 않는 기능을 요청했을 가능성이 있습니다.


답변

응용 프로그램에서 비디오를 오프라인으로 사용하려는 고객을 위해 응용 프로그램을 개발하는 동안에도이 문제가 발생했습니다. 몇 달 동안 작업 한 앱이 내 기기의 Play 스토어에 표시되지 않는 이유에 대한 블로그 게시물을 작성했습니다 ( 게시물은 여기에서 찾을 수 있음 ). @Greg Hewgill이 찾은 것과 동일한 것을 발견했습니다 . 일부 장치의 캐시 파티션 제한 .

그 여정은 거기서 멈추지 않았습니다. 고객은 이러한 비디오를 응용 프로그램에 포함하고 싶었고 비디오 품질이 저하되는 것을 원하지 않았습니다. 몇 가지 조사 끝에 확장 파일사용 하는 것이 우리 문제에 대한 완벽한 해결책 이라는 것을 알게 되었습니다.

내 지식을 Android 커뮤니티와 공유하기 위해 droidconNL 2012 에서 확장 파일에 대한 강연을 가졌습니다 . 확장 파일 사용을 얼마나 쉽게 시작할 수 있는지 설명하기 위해 프레젠테이션과 샘플 코드를 만들었습니다. 이 문제를 해결하기 위해 확장 파일을 사용하려는 분들 은 프레젠테이션과 샘플 코드가 포함 된 게시물 을 확인하십시오.


답변

support-screens 속성을 시도하고 설정할 수 있습니다.

<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" >
</supports-screens>

Wildfire에는 작은 화면이 있으며 문서에 따르면이 속성은 모든 경우에 기본적으로 “true”로 설정되어야하지만 다른 휴대 전화의 지원 화면 설정에 알려진 문제가 있으므로 어쨌든 시도해 보겠습니다.

또한 David가 제안한 것처럼 항상 최신 버전의 Android API에 대해 컴파일하고 타겟팅하지 마십시오. 2.2 이전의 거의 모든 SDK에는 심각한 문제 나 이상한 동작이 있습니다. 후자의 SDK는 많은 문제를 해결하거나 은폐하는 데 도움이됩니다 (모두는 아니지만). Lint 도구를 사용하여 릴리스를 준비 할 때 앱이 API 4와 호환되는지 확인할 수 있습니다.


답변

Finlay, 내 응용 프로그램에서 동일한 문제에 직면했습니다. android:minSdkVersion="7" & android:targetSdkVersion="18"최신 버전의 Android 플랫폼 인 Phone Gap 앱을 개발했습니다
.

Google 문서 도구를 사용하여 문제를 발견했습니다.

문제가 될 수있는 것은 KEY-CODE알파벳 및 숫자 만 확인 하는 JS 기능을 작성 했지만 키보드에는 컴퓨터 키보드 및 모바일 키보드에 대해 특별히 다른 키 코드가 있습니다. 그래서 그것이 제 문제였습니다.

내 대답이 맞는지 아닌지 잘 모르겠고 위의 대답에 웃는 얼굴이 될 수도 있지만 앱을 구축하는 동안주의해야 할 몇 가지 사항을 나열하려고 노력할 것입니다. 이런 종류의 문제를 해결하십시오.

  • android:minSdkVersion="?"요구 사항에 따라 를 사용하고 android:targetSdkVersion="?"앱이 타겟팅 할 최신 버전이어야합니다. 더보기

  • 응용 프로그램에서 사용할 권한 만 추가하고 불필요한 것은 모두 제거하십시오.

  • 애플리케이션별로 지원되는 화면 확인

    <supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true"
    android:xlargeScreens="true"/>
    
  • 일부 장치 또는 탭에서 늦게 실행할 수없는 의상 코드 또는 의상 위젯을 구현했을 수 있으므로 긴 코드를 작성하기 전에 먼저 베타 코드를 작성하고 코드가 모든 장치에서 실행되는지 테스트 해보십시오. .

  • 그리고 Google이 앱을 업로드하기 전에 코드를 확인할 수있는 도구를 게시하고 특정 이유로 인해 일부 기기에서 앱을 실행할 수 없으므로 쉽게 해결할 수 있다고 말합니다.


답변

몇 가지 제안이 있습니다.

  1. 우선, API 4를 타겟으로 사용하고있는 것 같습니다. AFAIK, 항상 최신 SDK에 대해 컴파일하고 android:minSdkVersion그에 따라 설정하는 것이 좋습니다 .

  2. 이를 염두에두고 android:required속성 이 API 5에 추가 되었음을 기억하십시오 .

기능 선언에는 android:required=["true" | "false"]속성 (API 레벨 5 이상에 대해 컴파일하는 경우)이 포함될 수 있으며 ,이를 통해 애플리케이션 (…)

따라서 SDK 15에 대해 컴파일 targetSdkVersion하고 15로 설정 하고 해당 기능을 제공하는 것이 좋습니다 .

또한 여기 Play 사이트에서 (우연?) Gingerbread (여기서는 Galaxy Ace 및 Galaxy Y) 인 모든 장치와 호환되지 않는 것으로 표시 됩니다 . 하지만 내 Galaxy Tab 10.1 ( Honeycomb ), Nexus S 및 Galaxy Nexus (모두 ICS에서 ) 와 호환되는 것으로 표시됩니다 .

그것도 궁금 해졌고 이것은 매우 거친 추측이지만 android.hardware.faketouch API11 + 이므로 작동하는지 확인하기 위해 제거하는 것이 어떻습니까? 또는 API 4에서 사용할 수없는 기능 ( faketouch)과 required속성 을 사용하려고하기 때문에 어쨌든 모든 관련 이 있습니다.이 경우 최신 API에 대해 컴파일해야합니다.

나는 그것을 먼저 시도하고 faketouch마지막 수단으로 만 요구 사항을 제거 할 것입니다 (물론) — 개발할 때 작동하기 때문에 컴파일 된 앱이 기능을 인식하지 못하는 문제라고 말하고 싶습니다 (SDK 요구 사항으로 인해) , 따라서 Play에 예기치 않은 필터링 문제가 남습니다.

이 추측이 귀하의 질문에 대한 답이 아니라면 죄송합니다. 그러나 이러한 종류의 문제를 진단하고 실제로 테스트하지 않고 해결책을 찾아내는 것은 매우 어렵습니다. 또는 Play가 실제로 앱을 필터링하는 방법에 대한 적절한 지식이없는 저에게는 적어도.

행운을 빕니다.


답변

위의 ‘이 앱은 당신의 …와 호환되지 않습니다.’문제에 대한 추가 솔루션을 제공하기 위해 다른 문제 원인에 대한 솔루션을 공유하겠습니다. 저가형 Samsung Galaxy Y (GT-S6350) 기기에 앱을 설치하려고했는데 Play 스토어에서이 오류가 발생했습니다. 다양한 AndroidManifest 구성을 테스트하기 위해 내 기기가 지원되는 기기 목록에 나타날 때까지 https://stackoverflow.com/a/5449397/372838에 설명 된대로 계정을 만들고 루틴을 따랐 습니다.

카메라 권한을 사용하면 많은 장치가 호환되지 않는 것으로 나타났습니다.

<uses-permission android:name="android.permission.CAMERA" />

특정 권한을 제거했을 때 응용 프로그램은 870 대가 아닌 1180 대의 장치에서 사용할 수있었습니다. 누군가에게 도움이되기를 바랍니다.