Я не решаюсь задавать этот вопрос, потому что похоже, что у многих людей есть подобная проблема, но я не нашел решения, которое решает мой конкретный случай.
Я разработал приложение для Android ( ссылка на фактическое приложение ) и загрузил его в магазин Play. Магазин Play говорит
"This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."
Конечно, это телефон, на котором я разработал приложение, поэтому оно должно быть совместимым. Некоторые люди с другими устройствами говорят, что он сообщает о совместимости, другие говорят, что он сообщает о несовместимости, но я не могу найти тенденции. (По-видимому, я не очень много знаю людей с устройствами Android.)
Я пробовал следующее:
перемещение большого файла из
res/raw
каталога, как предлагается в этом ответе . Единственным файлом там был текстовый файл размером ~ 700 КБ, но я переместил егоassets/
без видимых изменений.добавление следующих двух утверждений функций:
<uses-feature android:name="android.hardware.faketouch" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
думая, что, возможно, мой телефон не утверждает, что поддерживает обычную
android.hardware.touchscreen
функцию, но опять же, без видимых изменений.
При загрузке APK в Play Store единственным фильтром, который он сообщает как активный, является эта 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 я вижу, что поддерживаются все устройства HTC, включая Wildfire S, за исключением «G1 (форель)» и «Touch Viva (опал)», какими бы они ни были. На самом деле я вижу, что и «Wildfire S (marvel)», и «Wildfire S A515c (marvelc)» указаны как поддерживаемые, но мой «Wildfire S A510b» конкретно не упоминается. Может ли такой идентификатор подмодели иметь такое большое значение? Мне удалось без проблем загрузить на телефон несколько других приложений из Google Play.
Единственное, что я пока не сделал, - это подождать 4-6 часов после загрузки последней версии (как в этом комментарии ), чтобы узнать, по-прежнему ли она несовместима с моим телефоном. Однако на странице магазина Play в настоящее время отображается версия 1.0.2, которая является последней из загруженных мной.
источник
handleSilentException
метод для молчания. По крайней мере, он скажет вам, на каком оборудовании работает приложение.Ответы:
Ответ, похоже, связан исключительно с размером приложения. Я создал простое приложение «hello world» без ничего особенного в файле манифеста, загрузил его в магазин Play, и он был признан совместимым с моим устройством.
Я ничего не изменил в этом приложении, кроме добавления контента в
res/drawable
каталог. Когда.apk
размер достиг 32 МБ, магазин Play начал сообщать, что мое приложение несовместимо с моим телефоном.Я попытаюсь связаться со службой поддержки разработчиков Google и попросить разъяснить причину этого ограничения.
ОБНОВЛЕНИЕ : Вот ответ службы поддержки разработчиков Google на это:
В итоге я решил свою проблему, преобразовав все файлы PNG в JPG с небольшой потерей качества. Размер
.apk
файла теперь составляет 28 МБ, что ниже порога, установленного Google Play для моего телефона.Я также удалил все
<uses-feature>
, и теперь у меня есть только это:<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
источник
Я тоже столкнулся с этим - я выполнял всю свою разработку на 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>
и если вы снова делали копипаст из Интернета. Скорее всего, вы запросили какую-то функцию, которую даже не используете.источник
Я тоже столкнулся с этой проблемой при разработке приложения для клиента, который хотел, чтобы видеоролики были доступны в автономном режиме из своего приложения. Я написал сообщение в блоге о том, почему приложение, над которым я работал в течение нескольких месяцев, не появляется в магазине игр для моего устройства ( сообщение можно найти здесь ). Я нашел то же, что и @Greg Hewgill: ограничения раздела кеша на некоторых устройствах .
Путешествие на этом для меня не закончилось. Заказчик хотел, чтобы эти видео были в приложении, и не хотел, чтобы качество видео снижалось. После некоторого исследования я понял, что использование файлов расширения было идеальным решением нашей проблемы.
Чтобы поделиться своими знаниями с сообществом Android, я провел на droidconNL 2012 доклад о файлах расширения. Я создал презентацию и образец кода, чтобы показать, насколько легко можно начать использовать файлы расширения. Для любого из вас, кто хочет использовать файлы расширения для решения этой проблемы, не стесняйтесь проверить сообщение, содержащее презентацию и образец кода.
источник
Вы можете попробовать установить атрибут supports-screen:
<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" > </supports-screens>
У Wildfire маленький экран, и согласно документации для этого атрибута во всех случаях должно быть установлено значение «true» по умолчанию, но есть известные проблемы с настройками экранов поддержки на разных телефонах, так что я все равно попробую.
Кроме того, как предлагает Дэвид, всегда компилируйте и ориентируйтесь на самую последнюю версию Android API, если у вас нет веских причин не делать этого. Практически каждый SDK до 2.2 имеет серьезную проблему или странное поведение; последний SDK помогает решить или скрыть многие (хотя и не все) из них. Вы можете (и должны) использовать инструмент Lint, чтобы проверить, что ваше приложение остается совместимым с API 4 при подготовке выпуска.
источник
Финли, я столкнулся с той же проблемой в своем приложении. Я разработал приложение Phone Gap, для
android:minSdkVersion="7" & android:targetSdkVersion="18"
которого является последней версией платформы Android.Я обнаружил проблему с помощью Документов 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 опубликует инструмент, который может проверить ваш код перед загрузкой приложения, а также сообщит, что по какой-то конкретной причине мы не разрешаем запускать ваше приложение на каком-либо устройстве, чтобы мы могли легко решить эту проблему.
источник
У меня есть пара предложений:
Во-первых, похоже, что вы используете API 4 в качестве цели. AFAIK, это хорошая практика всегда компилировать с использованием последней версии SDK и соответствующим образом настраивать
android:minSdkVersion
.Имея это в виду, помните, что
android:required
атрибут был добавлен в 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 + , почему бы вам не попробовать удалить его, чтобы посмотреть, работает ли он? Или, возможно, все это так или иначе связано, поскольку вы пытаетесь использовать features (faketouch
) иrequired
атрибут, которые недоступны в API 4. И в этом случае вам следует выполнить компиляцию с использованием последней версии API.Я бы попробовал это сначала и удалил
faketouch
требование только в крайнем случае (конечно) --- поскольку он работает при разработке, я бы сказал, что это просто вопрос скомпилированного приложения, не распознающего эту функцию (из-за требований SDK) , что оставляет неожиданные проблемы с фильтрацией в Google Play.Извините, если это предположение не отвечает на ваш вопрос, но очень сложно диагностировать такие проблемы и определить решение без фактического тестирования. Или, по крайней мере, для меня, не имеющего должных знаний о том, как Play действительно фильтрует приложения.
Удачи.
источник
<uses-feature>
тегов, это была попытка сделать его совместимым с большим количеством устройств, а не с меньшим. Я попробую изменить теги версий SDK, это наиболее вероятный подход. Я должен добавить, что использовал,minSdkVersion="4"
потому что эта версия больше не подразумевала некоторых разрешений (считывание состояния телефона, изменение SD-карты), которые не нужны моему приложению.android:minSdkVersion="5" android:targetSdkVersion="15"
тоже не помогла. Я связался со службой поддержки разработчиков Google Play, и, надеюсь, они мне скажут, почему. Было бы неплохо, если бы причина фильтрации отображалась на странице приложения Play.faketouch
какrequired= false
?<uses-feature>
теги, потому что служба поддержки Google сообщила мне, что причина, по которой он был недоступен для моего устройства, связана с этойandroid.hardware.faketouch
функцией. Это кажется смешным, особенно если учесть, что в одной из моих предыдущих версий тоже не было<uses-feature>
тегов, да что угодно. Я жду их ответа и не хочу запутывать их, загружая еще одну версию. Было бы неплохо, если бы был способ протестировать это без многократной загрузки и публикации новых APK.Чтобы дать дополнительное решение указанной выше проблемы "Это приложение несовместимо с вашим ...", позвольте мне поделиться своим решением для другой причины проблемы. Я попытался установить приложение на младшее устройство Samsung Galaxy Y (GT-S6350) и получил эту ошибку в магазине Play. Чтобы протестировать различные конфигурации AndroidManifest, я создал учетную запись и выполнил процедуру, описанную в https://stackoverflow.com/a/5449397/372838 пока мое устройство не появилось в списке поддерживаемых устройств.
Оказалось, что многие устройства становятся несовместимыми при использовании разрешения камеры:
<uses-permission android:name="android.permission.CAMERA" />
Когда я удалил это разрешение, приложение стало доступно для 1180 устройств вместо 870. Надеюсь, это поможет кому-то
источник
Разрешения, подразумевающие требования к функциям
Например, функция android.hardware.bluetooth была добавлена в Android 2.2 (уровень API 8), но API Bluetooth, к которому она относится, был добавлен в Android 2.0 (уровень API 5). Из-за этого некоторые приложения могли использовать API до того, как у них появилась возможность объявить, что им требуется API через систему.
Чтобы предотвратить непреднамеренный доступ к этим приложениям, Google Play предполагает, что определенные разрешения, связанные с оборудованием, указывают на то, что базовые функции оборудования требуются по умолчанию. Например, приложения, использующие Bluetooth, должны запрашивать разрешение BLUETOOTH в элементе - для устаревших приложений Google Play предполагает, что объявление разрешения означает, что приложению требуется базовая функция android.hardware.bluetooth, и настраивает фильтрацию на основе этой функции. .
В таблице ниже перечислены разрешения, которые подразумевают требования к функциям, эквивалентные тем, которые объявлены в elements. Обратите внимание, что объявления, включая любой объявленный атрибут android: required, всегда имеют приоритет над функциями, подразумеваемыми разрешениями ниже.
Для любого из перечисленных ниже разрешений вы можете отключить фильтрацию на основе подразумеваемой функции, явно объявив подразумеваемую функцию явно в элементе с атрибутом android: required = "false". Например, чтобы отключить любую фильтрацию на основе разрешения КАМЕРА, вы должны добавить это объявление в файл манифеста:
<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.
источник
Типичный, нашел его сразу после публикации этого вопроса в отчаянии; инструмент, который я искал, был:
$ aapt dump badging <my_apk.apk>
источник
Хотя ответов уже довольно много, я подумал, что мой ответ может помочь тем, у кого точно такая же проблема, как и у меня. В моем случае проблема вызвана следующими разрешениями, добавленными по предложению рекламной сети:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Следствием указанных выше разрешений является то, что следующие функции добавляются автоматически:
android.hardware.LOCATION android.hardware.location.GPS android.hardware.location.NETWORK
Причина в том, что «Google Play пытается обнаружить подразумеваемые требования к функциям приложения, исследуя другие элементы, объявленные в файле манифеста, в частности, элементы». Два из моих тестовых устройств не имеют вышеуказанных функций, поэтому приложение стало несовместимым с ними. Удаление этих разрешений сразу решило проблему.
источник
Я нашел еще один способ возникновения этой проблемы:
исходной ОС моего телефона LG была Froyo (Android 2.2) и была обновлена до ICS (Android 4.0.4). Но консоль разработчиков Google Play показывает, что она определяет мой телефон как устройство Froyo. (Google Play не разрешил загрузку приложения из-за ложной «несовместимости», но каким-то образом все равно обнаруживает установку.)
В настройках телефона в разделе «Программное обеспечение» указано ICS V4.0.4. Похоже, что информация о сервере Google Play для телефона не обновляется, чтобы отразить обновление ICS на устройстве. В манифесте приложения minSDK задано значение Honeycomb (3.0), поэтому, конечно, Google Play отфильтровывает приложение.
Также интересно:приложение использует In-app Billing V3. Первый раз через IabHelper позволяет приложению делать покупки через сервис Google Play. Но после совершения покупки покупка НЕ помещается в инвентарь, и IabHelper сообщает, что ни один товар не принадлежит. В сообщениях отладки отображается результат «покупка не удалась», хотя в окне Google Play сообщается, что «покупка успешна».
источник
У меня такая же проблема. Это было вызвано тем, что в моем манифесте и скрипте сборки gradle были разные коды и номера версий. Я решил это, удалив код версии и номер версии из моего манифеста и позволив gradle позаботиться об этом.
источник
У меня тоже была такая же проблема. Я опубликовал приложение в тестовом режиме, созданное с помощью React Native 59. Оно не было совместимо с определенным тестером. В сообщении не было ясно, почему приложение несовместимо, после того как я выяснил, что ограничил доступность приложения только для определенной страны. это была проблема, но, как я уже сказал, сообщение было нечетким. в Play Store WebApp появляется сообщение: «Это приложение несовместимо с вашим устройством». в мобильном приложении появляется сообщение «Это приложение недоступно в вашей стране»
источник
Если вы находитесь здесь в 2020 году и считаете, что устройство, получающее сообщение об ошибке, должно быть совместимо:
[ https://support.getupside.com/hc/en-us/articles/226667067--Device-not-compatible-error-message-in-Google-Play-Store]
Вот ссылка на официальную страницу поддержки Google, на которую вы можете дать своим пользователям ссылку на то, как очистить кеш: https://support.google.com/googleplay/answer/7513003
источник