96

多くの人が同様の問題を抱えているように見えますが、特定のインスタンスを解決する解決策が見つからないため、この質問をするのをためらっています.

Android アプリ (実際のアプリへのリンク) を開発し、Play ストアにアップロードしました。Playストアは言う

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

もちろん、それは私がアプリを開発した電話なので、互換性があるはずです. 他のデバイスを使用している人の中には、互換性があると報告する人もいれば、互換性がないと報告する人もいますが、傾向は見つかりません. (明らかに、私は Android デバイスを持っている人をあまり知りません。)

私は次のことを試しました:

  • この回答res/rawで提案されているように、大きなファイルをディレクトリから移動します。そこにある唯一のファイルは〜700 kBのテキストファイルでしたが、明らかな変更なしに移動しました。assets/

  • 次の 2 つの機能アサーションを追加します。

    <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 ストアの「Device Availability」セクションで、Wildfire S を含むすべての HTC デバイスが、「G1 (マス)」と「Touch Viva (オパール)」を除いてサポートされていることを確認できます。実際、「Wildfire S (marvel)」と「Wildfire S A515c (marvelc)」の両方がサポート対象としてリストされていますが、私の「Wildfire S A510b」は特に言及されていません。この種のサブモデル識別子はそれほど重要ですか? 他のいくつかのアプリを Google Play から携帯電話に問題なくダウンロードできました。

この時点で私が行っていない唯一のことは、(このコメントのように) 最新バージョンをアップロードしてから 4 ~ 6 時間待って、まだ私の電話と互換性がないと言われているかどうかを確認することです. ただし、現在 Play ストア ページには、私がアップロードした最新の 1.0.2 が表示されています。

4

15 に答える 15

86

答えは、アプリケーションのサイズのみに関連しているようです。マニフェスト ファイルに特別なものは何もないシンプルな "hello world" アプリを作成し、それを Play ストアにアップロードしたところ、私のデバイスと互換性があると報告されました。

res/drawableこのアプリでは、ディレクトリにコンテンツを追加する以外は何も変更していません。サイズが約 32 MB に達したとき、.apkPlay ストアは私のアプリが私の電話と互換性がないことを報告し始めました。

Google デベロッパー サポートに連絡して、この制限の理由について説明を求めます。

更新: これに対する Google 開発者サポートの回答は次のとおりです。

ご指摘ありがとうございます。現在、Google Play にアップロードするアプリのファイル サイズの上限は約 50 MB です。

ただし、デバイスによってはキャッシュ パーティションが 50 MB 未満で、ユーザーがアプリをダウンロードできない場合があります。たとえば、一部の HTC Wildfire デバイスは、35 ~ 40 MB のキャッシュ パーティションを持つことが知られています。Google Play が、アプリを保存するのに十分な大きさのキャッシュを持たないデバイスを識別できる場合、そのアプリがユーザーに表示されないようにフィルター処理することがあります。

すべてのPNGファイルをJPGに変換することで問題を解決しましたが、品質が少し低下しました。.apkファイルは現在 28 MB で、Google Play が私の携帯電話に適用しているしきい値を下回っています。

私もすべてのものを削除しました<uses-feature>が、今はこれだけです:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
于 2012-05-09T22:05:43.760 に答える
17

私もこれに遭遇しました-Lenovo IdeaTab A2107A-Fですべての開発を行い、開発ビルドを実行し、署名付きAPK(でインストールadb install)を問題なくリリースすることさえできました. アルファ テスト モードで公開され、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の短所: オートフォーカス カメラがありません)。私がその機能を使用しているかどうかに関係なく、Google Play はノーと言った。それが削除されたら、APK を再構築し、Google Play にアップロードしました。そして、IdeaTab が互換性のあるデバイス リストに含まれるようになりました。

<uses-feature>そのため、Web チェックからコピー アンド ペーストを行っている場合は、すべて再確認してください。使用していない機能をリクエストした可能性があります。

于 2013-11-12T01:50:17.513 に答える
12

私も、アプリケーションからビデオをオフラインで利用できるようにしたい顧客向けのアプリケーションを開発しているときに、この問題を経験しました。私が何ヶ月も取り組んできたアプリが私のデバイスの Play ストアに表示されない理由についてブログ投稿を書きました (投稿はここにあります)。@Greg Hewgill が見つけたものと同じものを見つけました:一部のデバイスでのキャッシュ パーティションの制限

旅はそこで止まりませんでした。顧客は、これらのビデオをアプリケーションに入れたいと考えており、ビデオの品質が低下することを望んでいませんでした。いくつかの調査の結果、拡張ファイルを使用することが私たちの問題に対する完璧な解決策であることがわかりました.

私の知識を Android コミュニティと共有するために、droidconNL 2012で拡張ファイルに関する講演を行いました。拡張ファイルの使用をいかに簡単に開始できるかを説明するために、プレゼンテーションとサンプル コードを作成しました。拡張ファイルを使用してこの問題を解決したい方は、プレゼンテーションとサンプル コードを含む投稿を自由にチェックしてください。

于 2012-11-27T17:21:45.563 に答える
8

supports-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 との互換性を維持していることを確認できます (使用する必要があります)。

于 2012-05-08T12:03:55.360 に答える
7

Finlay さん、アプリケーションで同じ問題に直面しました。android:minSdkVersion="7" & android:targetSdkVersion="18"Androidプラットフォームの最新バージョンであるPhone Gapアプリを開発し ました。

Google ドキュメントを使用して問題を見つけました

問題になる可能性があるのは、アルファベットと数字のみを検証するために機能するJS関数を作成したことですが、KEY-CODEキーボードにはコンピューターキーボードとモバイルキーボード専用の異なるキーコードがあります。それが私の問題でした。

私の答えが正しいかどうかはわかりませんが、上記の答えに微笑んでいる可能性があるかもしれませんが、アプリを作成する際に注意すべき点をいくつかリストアップしてみます.このような問題を解決します。

  • 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 がアプリをアップロードする前にコードを検証できるツールを公開し、特定の理由により一部のデバイスでアプリを実行することを許可されていないため、簡単に解決できると述べてくれることを願っています。

于 2013-10-25T07:23:52.877 に答える
7

機能要件を暗示する権限

たとえば、android.hardware.bluetooth 機能は Android 2.2 (API レベル 8) で追加されましたが、それが参照する bluetooth API は Android 2.0 (API レベル 5) で追加されました。このため、一部のアプリは、システムを介して API が必要であることを宣言する前に、API を使用できました。

これらのアプリが意図せずに利用可能になるのを防ぐために、Google Play は、特定のハードウェア関連のアクセス許可が、基礎となるハードウェア機能がデフォルトで必要であることを示していると想定しています。たとえば、Bluetooth を使用するアプリケーションは、要素で BLUETOOTH パーミッションを要求する必要があります。従来のアプリの場合、Google Play はパーミッション宣言が、基礎となる android.hardware.bluetooth 機能がアプリケーションに必要であることを意味すると想定し、その機能に基づいてフィルタリングをセットアップします。 .

次の表は、要素で宣言されているものと同等の機能要件を意味する権限を示しています。宣言された android:required 属性を含む宣言は、以下の権限によって暗示される機能よりも常に優先されることに注意してください。

以下の権限のいずれについても、要素内で android:required="false" 属性を使用して暗黙の機能を明示的に宣言することにより、暗黙の機能に基づくフィルタリングを無効にすることができます。たとえば、CAMERA パーミッションに基づくフィルタリングを無効にするには、次の宣言をマニフェスト ファイルに追加します。

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


<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:name="android.hardware.wifi" android:required="false" />

http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions

于 2015-11-03T13:49:46.943 に答える
6

いくつかの提案があります。

  1. まず、API 4 をターゲットとして使用しているようです。私の知る限り、常に最新の 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+であるため、機能するかどうかを確認するために削除してみてはどうでしょうか? faketouchまたは、API 4 では使用できない機能 ( ) と属性を使用しようとしているため、いずれにせよすべて関連してrequiredいる可能性があります。この場合、最新の API に対してコンパイルする必要があります。

私は最初にそれを試し、要件を削除するのはfaketouch最後の手段です (もちろん) --- 開発時に機能するため、コンパイルされたアプリが機能を認識していないだけの問題だと思います (SDK 要件のため)。 、したがって、予期しないフィルタリングの問題が Play に残ります。

この推測があなたの質問に答えていない場合は申し訳ありませんが、実際にテストせずにこの種の問題を診断し、解決策を特定することは非常に困難です. または、少なくとも、Play がアプリを実際にどのようにフィルタリングするかについての適切な知識がまったくない私にとっては。

幸運を。

于 2012-05-07T03:41:33.077 に答える
6

上記の「このアプリはあなたの ... と互換性がありません」の問題に対する追加の解決策を提供するために、別の問題の原因に対する私の解決策を共有させてください。ローエンドの Samsung Galaxy Y (GT-S6350) デバイスにアプリをインストールしようとしたところ、Play ストアからこのエラーが表示されました。さまざまな AndroidManifest 構成をテストするために、アカウントを作成し、https://stackoverflow.com/a/5449397/372838で説明されているルーチンに従って、デバイスがサポート対象のデバイス リストに表示されるまで続けました。

カメラのアクセス許可を使用すると、多くのデバイスが互換性を失うことが判明しました。

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

その特定の許可を削除すると、アプリケーションは 870 ではなく 1180 のデバイスで利用できるようになりました。

于 2012-06-28T11:29:14.460 に答える
3

典型的なことですが、この質問を絶望的に投稿した直後に見つかりました。私が探していたツールは次のとおりです。

$ aapt dump badging <my_apk.apk>
于 2013-04-22T11:29:01.347 に答える
2

この問題が発生する別の方法を見つけました。
私の LG 電話の元の OS は Froyo (Android 2.2) で、ICS (Android 4.0.4) に更新されました。しかし、Google Play Developers' Console は、私の電話を Froyo デバイスとして検出していることを示しています。(Google Play は、誤った「非互換性」のためにアプリのダウンロードを許可しませんでしたが、何らかの形でインストールを検出します。)

「ソフトウェア」の電話機の設定は、ICS V4.0.4 を示しています。携帯電話の Google Play サーバー情報が、デバイスの ICS 更新を反映するように更新されていないようです。アプリ マニフェストの minSDK は Honeycomb (3.0) に設定されているため、もちろん Google Play はアプリを除外します。

さらに興味深い
点: アプリはアプリ内課金 V3 を使用します。初めて IabHelper を使用すると、アプリは Google Play サービスを通じて購入できるようになります。しかし、購入が行われた後、購入はインベントリに入れられず、IabHelper はアイテムが所有されていないと報告します。Google Play ウィンドウで「購入が成功しました」と通知されても、デバッグ メッセージには購入の結果が「購入に失敗しました」と表示されます。

于 2013-07-17T13:53:55.147 に答える
0

私も同じ問題を抱えていました。これは、マニフェストと gradle ビルド スクリプトのバージョン コードと番号が異なることが原因でした。マニフェストからバージョン コードとバージョン番号を削除し、gradle に任せることで解決しました。

于 2014-06-16T18:46:42.953 に答える
0

私も同じ問題を抱えていました。React Native 59 で作成したアプリをテスト モードで公開しました。特定のテスターと互換性がありませんでした。アプリが特定の国でのみ利用できるように制限していることがわかった後、アプリが互換性がない理由についてのメッセージは明確ではありませんでした。それが問題でしたが、私が言ったように、メッセージは明確ではありませんでした。Play ストア WebApp では、「このアプリはお使いのデバイスと互換性がありません」というメッセージが表示されます。モバイルアプリで「このアプリはあなたの国では利用できません」というメッセージ

于 2019-12-03T13:10:02.600 に答える
0

Android では、一部のパーミッションがアプリに対する要件を<uses-permission>意味します。<uses-feature>

たとえば<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-feature android:name="android.hardware.bluetooth"/>

ここでリスト全体を確認できますhttps://developer.android.com/guide/topics/manifest/uses-feature-element#permissions

于 2020-12-09T16:12:14.300 に答える