Почему в магазине Google Play говорится, что мое приложение Android несовместимо с моим собственным устройством?

Я не решаюсь задать этот вопрос, потому что кажется, чтоу многих людей есть похожая проблема и все же я не нашел решения, которое решает мой конкретный случай.

Я разработал приложение для Android (ссылка на актуальное приложение) и загрузили его в магазин Play. Магазин Play говорит

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

Конечно, это телефон, на котором я разработал приложение, так чтоought быть совместимым. Некоторые люди с другими устройствами говорят, что он сообщает о совместимости, другие говорят, что он сообщает о несовместимости, но я не могу найти никакой тенденции. (Очевидно, я не знаю очень многих людей с устройствами Android.)

Я пробовал следующее:

moving a large-ish file out of the res/raw directory as suggested by this answer. The only file in there was a ~700 kB text file, but I moved it to assets/ with no apparent change.

adding the following two feature assertions:

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

thinking that maybe my phone doesn't claim to support the usual android.hardware.touchscreen feature, but again, with no apparent change.

При загрузке APK в магазин Play единственным фильтром, который он сообщает как активный, являетсяandroid.hardware.faketouch особенность.

Ниже приводится выводaapt dump badging bin/NZSLDict-release.apk:

<code>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'
</code>

и для полноты, мой файл манифеста:

<code><?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> 
</code>

В разделе «Доступность устройства» В разделе Play store я вижу, что поддерживаются все устройства HTC, включая Wildfire S, за исключением «G1 (форель)». и "Touch Viva (опал)", независимо от того, что это такое. На самом деле я вижу, что оба "Wildfire S (чудо)" и «Wildfire S A515c (marvelc)»; перечислены как поддерживаемые, но мой & quot; Wildfire S A510b & quot; специально не упоминается. Может ли такой вид идентификатора подмодели иметь такое большое значение? Я смог загрузить несколько других приложений из Google Play на свой телефон без проблем.

Единственное, что яhaven't на этом этапе нужно подождать 4-6 часов после загрузки последней версии (как вэтот комментарий), чтобы узнать, несовместимо ли это с моим телефоном. Тем не менее, на странице Play store в настоящее время отображается версия 1.0.2, которая является последней из загруженных мной.

 SAndroidD07 янв. 2016 г., 11:56
проверить это решение, оно работает для меня Stackoverflow.com / а / 14020303/3392323
 Gavin Miller07 мая 2012 г., 05:32
Может быть, я неправильно понял ваш комментарий: «Некоторые люди с другими устройствами говорят, что он сообщает о совместимости, другие говорят, что он сообщает о несовместимости, но я не могу найти никакой тенденции». Если многие люди, которых вы не знаете, могут загрузить и установить приложение, вы можете собрать большой объем данных об оборудовании, чтобы попытаться сформировать тренд. Таким образом, облегчение «Я не знаю очень многих людей с устройствами Android». вопрос.
 Greg Hewgill07 мая 2012 г., 05:35
@ GavinMiller: Однако, это скажет мне только то, какие устройства Google Play верит в это.може будет установлен и не даст никакой информации о том, на каких устройствах Google Play верит в это Не может быть установленным на. Кроме того, даже знание с уверенностью, какие устройства были в порядке, а какие - нет, не помогло бы мне решить эту проблему.
 Gavin Miller07 мая 2012 г., 04:23
Что-то, что помогло мне в решении проблем с телефоном, - это настройка ACRA: Code.google.com / р / ACRA Я запускаю его при первом запуске приложения, чтобы раскрыть все характеристики телефона, и используюhandleSilentException способ сообщить молча. По крайней мере, он скажет вам, на каком оборудовании работает приложение.
 Greg Hewgill07 мая 2012 г., 04:26
@ GavinMiller: Спасибо, но я не уверен, что это поможет, когда магазин Play вообще откажется от приложения.

Ответы на вопрос(12)

я подумал, что мой ответ может помочь тем, у кого точно такая же проблема, как и у меня. В моем случае проблема вызвана следующими разрешениями, добавленными в соответствии с предложением рекламной сети:

<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 пытается определить подразумеваемые требования к функциям приложения, изучая другие элементы, объявленные в файле манифеста, в частности, элементы». Два моих тестирующих устройства не имеют вышеуказанных функций, поэтому приложение стало несовместимым с ними. Удаление этих разрешений решило проблему немедленно.

Решение Вопроса

по-видимому, связан исключительно с размером приложения. Я создал простое приложение «hello world», в котором не было ничего особенного в файле манифеста, загрузил его в магазин Play и сообщил, что оно совместимо с моим устройство

Я ничего не изменил в этом приложении, кроме добавления контента вres/drawable каталог. Когда.apkри размере около 32 МБ магазин Play начал сообщать, что мое приложение несовместимо с моим телефоном.

Я попытаюсь связаться со службой поддержки разработчиков Google и попросить разъяснить причину такого ограничения.

ОБНОВИТ: Вот ответ поддержки разработчиков Google на это:

Спасибо за твою заметку. В настоящее время максимальный размер файла для загрузки приложения в Google Play составляет примерно 50 МБ.

Однако некоторые устройства могут иметь кэш-память размером менее 50 МБ, что делает приложение недоступным для загрузки пользователями. Например, некоторые из устройств HTC Wildfire известны наличием разделов кэша 35-40 МБ. Если Google Play может идентифицировать такое устройство, которое не имеет достаточно большого кеша для хранения приложения, оно может отфильтровать его от появления у пользователя.

Я решил свою проблему, конвертировав все файлы PNG в JPG с небольшой потерей качества..apk Файл теперь составляет 28 МБ, что ниже любого порогового значения, которое Google Play применяет для моего телефона.

Я также удалил все<uses-feature> вещи, и теперь есть только это:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
 Gerry21 июн. 2016 г., 19:43
Это безумие, что Google не перечисляет причину несовместимости в магазине Play. Я всегда предполагал, что, по крайней мере, разработчики приложений получили бы эту информацию и сознательно решили не поддерживать мое устройство. Как ситуация так долго оставалась?
 Michael A.10 мая 2012 г., 11:41
Очень интересная и ценная информация. И так раздражает, что это нигде не задокументировано.
 Greg Hewgill10 мая 2012 г., 11:48
На самом деле, я бы никогда не узнал о проблеме, если бы у меня не было телефона Wildfire.
 iseeall20 дек. 2013 г., 22:01
У меня есть 3 игры: 32 МБ, 35 МБ и 44 МБ. Мой собственный HTC Bravo видит первые две игры и не видит третью в магазине. HTC desire S моего друга видит только первую игру. Таким образом, очевидно, что размер игр должен быть не более 33 МБ, чтобы их можно было увидеть на большинстве (?) Устройств. К сожалению, я видел этот ответ слишком поздно и не знал о проблеме в течение нескольких месяцев ... Я был уверен, что это зависит от типа процессора устройства, поддерживаемой версии OpenGL, ограничений, установленных в манифесте, или чего-то еще. Вздох.
 hemanth kumar15 февр. 2017 г., 14:38
@ GregHewgill Привет, Грег. Я связался со службой поддержки Google по поводу подобного рода проблемы. Поскольку размер моего приложения составлял всего 5 МБ, я искал разные варианты, почему Google Play фильтровал мое приложение на определенном устройстве. Прошло 72 часа с тех пор, как я связался с ними, и они не вернулись с какими-либо объяснениями. Можно ли как-нибудь связаться со службой поддержки Google, кроме обычны

eaTab A2107A-F, мог запускать на нем сборки для разработки и даже выпускать подписанные APK (установленные сadb install) без проблем. Как только он был опубликован в тестовом режиме Alpha и доступен в 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_id761, под минусами: не хватает камеры с автофокусом). Независимо от того, использовал ли я эту функцию, Google Play сказал нет. После того, как это было удалено, я восстановил свой APK, загрузил его в Google Play и, конечно же, мой IdeaTab был теперь в списке совместимых устройств.

Так, перепроверь каждый<uses-feature> и если вы делали несколько копий-вставки из Интернета, проверьте еще раз. Скорее всего, вы запросили какую-то функцию, которую вы даже не используете.

 Anand Savjani12 июн. 2018 г., 17:59
<использует-функция android: name = "android.hardware.camera2" /> делает мое приложение несовместимым, поэтому я не смог найти приложение в playstore. Спаси мою жизнь
 Jack'19 окт. 2016 г., 10:22
Спасибо ! Я использовал другое <использование-функция>: <использование-функция android: name = "android.hardware.camera2" /> И из-за этого у меня были ZERO-совместимые устройства. Я удалил строку и теперь у меня есть 10000.
 DrChandra16 авг. 2017 г., 22:55
Вы можете настроить его так, чтобы он по-прежнему использовался, но не требует его: <used-feature android: name = "android.hardware.camera.autofocus" android: required = "false" />

еров версий в моем манифесте и скрипте сборки Gradle. Я решил это, удалив код версии и номер версии из моего манифеста и позволив gradle позаботиться об этом.

нта, который хотел, чтобы видео офлайн были доступны из их приложения. Я написал пост в блоге о том, почему приложение, над которым я работал в течение нескольких месяцев, не появилось в магазине игр для моего устройства post можно найти здесь). Я нашел то же самое, что @Greg Hewgill нашел: Ограничения раздела кэша на некоторых устройствах.

Для меня путешествие не остановилось. Заказчик хотел, чтобы эти видео были в приложении, и не хотел, чтобы качество видео снижалось. После некоторых исследований я понял, что использование файлов расширения было идеальным решением нашей проблемы.

Чтобы поделиться своими знаниями с сообществом Android, я провел беседу наdroidconNL 2012 о файлах расширения. Я создал презентацию и пример кода, чтобы проиллюстрировать, как легко можно начать использовать файлы расширения. Для любого из вас, кто хочет использовать файлы расширения для решения этой проблемы, не стесняйтесь проверить пост, содержащий презентацию и пример кода

 Rohan Kandwal24 мар. 2015 г., 06:13
Ссылка поддержки Google, упомянутая в вашем сообщении, устарела, новая ссылка Support.google.com / googleplay / Android-разработчик / ответ / .... Надеюсь, вы обновите статью с последней ссылкой и, кстати, хороший пост. !!

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

У Wildfire небольшой экран, и в соответствии с документацией этот атрибут должен по умолчанию иметь значение «true» во всех случаях, но есть известные проблемы с настройками экранов поддержки на разных телефонах, поэтому я все равно попробую.

Также - как предлагает Дэвид - всегда компилируйте и ориентируйтесь на самую последнюю версию API Android, если у вас нет веских причин не делать этого. Почти каждый SDK до 2.2 имеет серьезную проблему или странное поведение; последний SDK помогает решить или скрыть многие (хотя и не все) из них. Вы можете (и должны) использовать инструмент Lint, чтобы убедиться, что ваше приложение остается совместимым с API 4 при подготовке выпуска.

 Michael A.09 мая 2012 г., 01:16
Надеюсь, тебе не придется долго ждать. У них точно нет репутации для быстрых ответов. : -)
 Greg Hewgill08 мая 2012 г., 23:50
Спасибо, я жду ответа от службы поддержки Google на мой последний запрос в службу поддержки. Я попробую это после того, как получу ответ от них (я не хочу их путать, загрузив еще один APK). Дадим вам знать, как это получается.
 Greg Hewgill09 мая 2012 г., 01:21
Я уже пару раз ходил с ними туда и обратно, но мой последний вопрос остался без ответа, потому что я отвечал на 22 часа. Это разочаровывает необходимость ждать, но, по крайней мере, это не имеет решающего значения или что-то в этом роде.
 Greg Hewgill10 мая 2012 г., 02:00
Просто хотел, чтобы вы знали, что я нашел проблему, смотрите мой ответ на этот вопрос. Спасибо за вашу помощь

Прежде всего, вы, похоже, используете API 4 в качестве своей цели. AFAIK, хорошая практика - всегда компилировать с последним SDK и настраивать свойandroid:minSdkVersion соответственно.

Имея это в виду, помните, чтоandroid:required атрибут был добавлен в API 5:

Объявление функции может включать в себяandroid:required=["true" | "false"]трибут @ (если вы компилируете по API уровня 5 или выше), который позволяет указать, является ли приложение (...)

Таким образом, я бы посоветовал вам скомпилировать с SDK 15, установитеtargetSdkVersion до 15, и предоставьте эту функциональность.

Это также показано здесь, на сайте Play, как Несовместимыми с любым моим устройством (совпадение?)Имбирный пряни (Галактика Ас и Галактика Y здесь). Но это показывает как Совместимый с моей Galaxy Tab 10.1 Honeycomb), Nexus S и Galaxy Nexus (оба на ICS).

Это также заставило меня задуматься, а этоочен дикое предположение, но так какandroid.hardware.faketouch is API11 +, почему бы тебе не попробовать удалить его, чтобы посмотреть, работает ли он? Или, может быть, это все равно связано, так как вы пытаетесь использовать функции faketouch) иrequired атрибут, который недоступен в API 4. И в этом случае вы должны скомпилировать в соответствии с последним API.

Я бы попробовал это сначала и удалил быfaketouch Требование только в крайнем случае (конечно) --- поскольку оно работает при разработке, я бы сказал, что это просто вопрос скомпилированного приложения, не распознающего функцию (из-за требований SDK), что оставляет неожиданные проблемы с фильтрацией в Play .

Извините, если это предположение не отвечает на ваш вопрос, но очень трудно диагностировать подобные проблемы и точно определить решение, не выполняя тестирование. Или, по крайней мере, для меня без должного знания того, как Play на самом деле фильтрует приложения.

Удачи

 davidcesarino07 мая 2012 г., 06:11
Пожалуйста. Пожалуйста, сообщите.
 Greg Hewgill08 мая 2012 г., 23:48
Последняя итерация удаляет все<uses-feature> теги, потому что служба поддержки Google сообщила мне, что причина, по которой она была недоступна для моего устройства, была из-заandroid.hardware.faketouch характерная черта. Это кажется смешным, тем более что в одной из моих предыдущих версий не было<uses-feature> теги тоже, но что угодно. Я жду их ответа и не хочу их путать, загружая еще одну версию. Было бы неплохо, если бы был способ проверить это без повторной загрузки и публикации новых APK.
 davidcesarino08 мая 2012 г., 23:45
Да, это было бы отлично. Между тем, вы пытались установитьfaketouch какrequired= false ?
 Greg Hewgill07 мая 2012 г., 05:54
Спасибо, это дает мне некоторые конкретные идеи. Первоначально у меня не было никакого<uses-feature> теги вообще, это была попытка сделать его совместимым с большим количеством устройств, а не с меньшим количеством. Я попытаюсь изменить теги версии SDK, что кажется наиболее вероятным подходом. Я должен добавить, что я использовалminSdkVersion="4" потому что эта версия больше не подразумевает некоторые разрешения (чтение состояния телефона, изменение SD-карты), которые не нужны моему приложению.
 Greg Hewgill07 мая 2012 г., 08:05
Изменение версий SDK наandroid:minSdkVersion="5" android:targetSdkVersion="15" тоже не помогло. Я связался со службой поддержки Google Play, и, надеюсь, они скажут мне, почему. Было бы неплохо, если бы Причина для фильтрации были показаны на странице приложения Play.

я столкнулся с той же проблемой в моем приложении. Я разработал приложение Phone Gap дляandroid:minSdkVersion="7" & android:targetSdkVersion="18" которая является последней версией платформы Android.

Я нашел проблему с помощьюГугл документ

Может быть проблема в том, что я написал некоторую функцию 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 опубликует инструмент, который может проверить ваш код перед загрузкой приложения, а также сообщит, что по какой-то конкретной причине нам не разрешено запускать ваше приложение на каком-либо устройстве, поэтому мы можем легко его решить.

иложение несовместимо с вашей ...», позвольте мне поделиться своим решением для другой причины проблемы. Я попытался установить приложение на бюджетное устройство Samsung Galaxy Y (GT-S6350) и получил эту ошибку в магазине Play. Чтобы протестировать различные конфигурации AndroidManifest, я создал учетную запись и выполнил процедуру, описанную вhttps: //stackoverflow.com/a/5449397/37283 пока мое устройство не появится в списке поддерживаемых устройств.

Оказалось, что многие устройства становятся несовместимыми при использовании разрешения «Камера»:

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

Когда я удалил это специальное разрешение, приложение было доступно для 1180 устройств вместо 870. Надеюсь, оно кому-нибудь поможе

 user120541502 окт. 2012 г., 12:41
Может быть, это может помочь: <использует-разрешение android: name = "android.permission.CAMERA" /> <использует-функцию android: name = "android.hardware.camera" android: required = "false" />

инструмент, который я искал, был:

$ aapt dump badging <my_apk.apk>
 Greg Hewgill22 апр. 2013 г., 21:06
Похоже, вы хотели опубликовать этот ответ на / Stackoverflow.com вопросы / 16145927 / ... вместо.


ервоначальной операционной системой телефона @My 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 объявляется «покупка прошла успешно».

example, функция 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, и настраивает фильтрацию на основе этой функции. .

В таблице ниже перечислены разрешения, которые подразумевают требования к функциональным возможностям, эквивалентные тем, которые объявлены в элементах. Обратите внимание, что объявления, включая любой объявленный атрибут 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#permission

 Amagi8204 окт. 2017 г., 19:04
Спасибо! Я понятия не имел, что используется разрешение на использование по умолчанию.

Ваш ответ на вопрос