8

Questo mi sta davvero facendo innervosire. Ho provato tutto per far funzionare la mia App su alcune schede più esotiche!Android Market: "Questo articolo non è compatibile con il tuo dispositivo."

Ora ha pubblicato un'applicazione di test (solo un progetto Android di eclissi con nient'altro) per provare diverse impostazioni manifest. Tuttavia, non riesco a far funzionare la mia app sulla mia scheda con Android Market. Funziona direttamente sul dispositivo con il debug.

Quello che ho provato: Android 2.2 Android 2.3

aggiunte questo:

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

provato questo:

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

E poi tutte le combinazioni di tutto questo. Non ho autorizzazioni di utilizzo in questa app di test.

La cosa strana che non capisco è che alcune app funzionano e non riesco a trovare il motivo per cui funzionano e non altre. Ho diversi dispositivi e uso il controllo di compatibilità del sito web e alcune app funzionano e altre no.

Quello che mi piacerebbe sapere è perché un'app non è compatibile con Android Market per quel dispositivo specifico. C'è un modo per ottenere queste informazioni? Immagino che questo dovrebbe essere da qualche parte per trovare dal momento che funziona a volte e talvolta no.

Per favore aiutami a trovare un modo per capirlo.

(Im non in cerca di una soluzione/root sul dispositivo, hanno già fatto su alcuni dispositivi per ottenere l'applicazione di lavoro. Voglio sapere perché)

---- ---- EDIT io ora trovato e corsi questo comando per la mia prova di app: discarica ./aapt badging testapp.apk

ho poi vedo questo: supporta-qualsiasi-densità: 'true' densità: '120' '160' ' 240 ' L'esecuzione di screeninfo sul mio dispositivo dice che ha densità 200. Quindi immagino che questo sia il problema. Quindi ora la domanda è, come posso aggiungere 200 a quella lista. Non voglio cambiare la densità sul dispositivo.


Questo è il mio manifesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="se.whatnapp.mainfesttester" 
    android:versionCode="8" 
    android:versionName="1.9" > 

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

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".MainfestTesterActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Come si può vedere si tratta di un banco di prova e non ho niente in esso realmente. E ancora non funziona! Questo è il risultato dalla discarica aapt badgin:

package: name='se.whatnapp.mainfesttester' versionCode='8' versionName='1.9' 
sdkVersion:'10' 
targetSdkVersion:'10' 
application-label:'Mainfest Tester' 
application-icon-120:'res/drawable-ldpi/ic_launcher.png' 
application-icon-160:'res/drawable-mdpi/ic_launcher.png' 
application-icon-240:'res/drawable-hdpi/ic_launcher.png' 
application: label='Mainfest Tester' icon='res/drawable-mdpi/ic_launcher.png' 
launchable-activity: name='se.whatnapp.mainfesttester.MainfestTesterActivity' label='Mainfest Tester' icon='' 
uses-feature:'android.hardware.touchscreen' 
main 
supports-screens: 'small' 'normal' 'large' 'xlarge' 
supports-any-density: 'true' 
locales: '--_--' 
densities: '120' '160' '240' 

E sì so che scritto male, demo sporchi ;-).

ho estratto un apk da un'applicazione che ho potuto trovare e potuto installare e l'unica vera differenza è nel locale:

supports-screens: 'small' 'normal' 'large' 'xlarge' 
supports-any-density: 'true' 
locales: '--_--' 'ja' 'nb' 'de' 'he' 'th' 'zh' 'nl' 'po' 'ar' 'fr' 'tr' 'es' 'it' 'ru' 'zh_TW' 
densities: '120' '160' '240' 

Può essere questa fermare l'applicazione dall'essere scaricare?


E questo è il build.prop dal dispositivo:

# begin build properties 
# autogenerated by buildinfo.sh 
ro.build.id=GRI40 
ro.build.display.id=11A4-D1-H1-H01-1233 
ro.build.version.incremental=20110908.151019 
ro.build.version.sdk=10 
ro.build.version.codename=REL 
ro.build.version.release=2.3.3 
ro.build.date=Thu Sep 8 15:26:28 CST 2011 
ro.build.date.utc=1315466788 
ro.build.type=eng 
ro.build.user=paco 
ro.build.host=inet 
ro.build.tags=test-keys 
ro.product.model=V8 
ro.product.brand=telechips 
ro.product.name=full_m801 
ro.product.device=m801 
ro.product.board=m801_evm 
ro.product.cpu.abi=armeabi-v7a 
ro.product.cpu.abi2=armeabi 
ro.product.manufacturer=telechips 
ro.product.locale.language=en 
ro.product.locale.region=US 
ro.wifi.channels= 
ro.board.platform=tcc88xx 
# ro.build.product is obsolete; use ro.product.device 
ro.build.product=m801 
# Do not try to parse ro.build.description or .fingerprint 
ro.build.description=full_m801-eng 2.3.3 GRI40 20110908.151019 test-keys 
ro.build.fingerprint=telechips/full_m801/m801:2.3.3/GRI40/20110908.151019:eng/test-keys 
# end build properties 
# 
# system.prop for TCC88xx 
# 

# The OpenGL ES API level that is natively supported by this device. 
# This is a 16.16 fixed point number 
ro.opengles.version = 131072 

# This is a high density device with more memory, so larger vm heaps for it. 
dalvik.vm.heapsize=24m 

# density in DPI of the LCD of this board. This is used to scale the UI 
# appropriately. If this property is not defined, the default value is 160 dpi. 
ro.sf.lcd_density = 200 

# SSG, to enable WMA, WMV and ASF file recognizing routine 
ro.media.dec.aud.wma.enabled = 1 
ro.media.dec.vid.wmv.enabled = 1 

# SSG, to enable RA, RM and RMVB file recognizing routine 
ro.media.dec.aud.ra.enabled = 1 
ro.media.dec.vid.rv.enabled = 1 

# SSG, if changing audio play rate is supported, set this property to 1 
ro.media.aud.rate.changeable = 0 

#Ä£¿éÉ豸µÄÈ«³Æ£¬ÐèÒªÓëATÖ¸Áî+CGMM·µ»ØµÄÉ豸ȫ³ÆÍêÈ«Ò»Ö£¬¸÷¸öÉ豸ȫ³ÆÓöººÅ¸ô¿ª 
#ÒòΪAndroidµÄÊôÐÔÖµ³¤¶ÈΪ92¸ö×Ö·û£¬¿ÉÒÔ°´ÕÕÕâ¸öģʽ×ÔÓÉÌí¼Óɾ³ýÖ§³ÖµÄÉ豸 
rild.device.list0 =EM660C 
rild.device.list1 =EM660 
rild.device.list2 =EM770 
rild.device.list3 =E1750 
rild.device.list4 =EC122 
rild.device.list5 =EC169C 
rild.device.list6 =E1752 
rild.device.list7 =K80 
rild.device.list8 =K3765 
rild.device.list9 =MU509 
rild.device.list10 =EM560 
rild.device.list11 =29 
rild.device.list12 =E1550 
rild.device.list13 =E1552 


#Ä£¿éµÄril¶¯Ì¬¼ÓÔØ¿âÎļþÃû³ÆÁбí 
rild.libpath.list0 =/system/lib/libtcc89xx-evdo-em660-ril.so 
rild.libpath.list1 =/system/lib/libtcc89xx-evdo-em660-ril.so 
rild.libpath.list2 =/system/lib/libtcc89xx-wcdma-em770-ril.so 
rild.libpath.list3 =/system/lib/libtcc89xx-wcdma-em770-ril.so 
rild.libpath.list4 =/system/lib/libtcc89xx-evdo-em660-ril.so 
rild.libpath.list5 =/system/lib/libtcc89xx-evdo-em660-ril.so 
rild.libpath.list6 =/system/lib/libtcc89xx-wcdma-em770-ril.so 
rild.libpath.list7 =/system/lib/libtcc89xx-wcdma-titan-ril.so 
rild.libpath.list8 =/system/lib/libtcc89xx-wcdma-em770-ril.so 
rild.libpath.list9 =/system/lib/libtcc89xx-wcdma-em770-ril.so 
rild.libpath.list10 =/system/lib/libtcc89xx-tdscdma-ril.so 
rild.libpath.list11 =/system/lib/libtcc89xx-wcdma-em770-ril.so 
rild.libpath.list12 =/system/lib/libtcc89xx-wcdma-em770-ril.so 
rild.libpath.list13 =/system/lib/libtcc89xx-wcdma-em770-ril.so 

#²»Í¬Ä£¿é¶ÔÓ¦µÄÆô¶¯²ÎÊý£¬Èç¹ûΪauto£¬Ôò±íʾ×Ô¶¯¼ì²âÆô¶¯²ÎÊý 
#Èç¹û²»Îªauto£¬ÄÇôÆäÖµ½«×÷Ϊ¸½´øµÄ²ÎÊý£¬Óë×Ô¶¯¼ì²âµÄÆô¶¯²ÎÊýÒ»Æð×éºÏ³É¸´ºÏ²ÎÊý×é 
#È磺rild.libargs.list6 =-x /dev/ttyUSB1£¬Èç¹û×Ô¶¯¼ì²âµ½µÄÆô¶¯²ÎÊýΪ/dev/ttyUSB0£¬ 
#ÄÇô×îÖյIJÎÊý½«Îª:-d /dev/ttyUSB0 -x /dev/ttyUSB1 
rild.libargs.list0 =auto 
rild.libargs.list1 =auto 
rild.libargs.list2 =auto 
rild.libargs.list3 =auto 
rild.libargs.list4 =auto 
rild.libargs.list5 =auto 
rild.libargs.list6 =auto 
rild.libargs.list7 =-x /dev/ttyUSB1 
rild.libargs.list8 =auto 
rild.libargs.list9 =auto 
rild.libargs.list10 =fixed:-d /dev/ttyACM2 
rild.libargs.list11 =auto 
rild.libargs.list12 =auto 
rild.libargs.list13 =auto 

#ÆäËûһЩ²ÎÊý 
rild.gprs.status=unknow 
rild.device=unknow0 
# 
# ADDITIONAL_BUILD_PROPERTIES 
# 
keyguard.no_require_sim=true 
ro.com.android.dateformat=MM-dd-yyyy 
ro.com.android.dataroaming=true 
ro.ril.hsxpa=1 
ro.ril.gprsclass=10 
ro.config.notification_sound=OnTheHunt.ogg 
ro.config.alarm_alert=Alarm_Classic.ogg 
ro.media.dec.jpeg.memcap=20000000 
ro.media.dec.vid.max_width=1920 
ro.media.dec.vid.max_height=1088 
ro.system.hdmi_max_resolution=fullhd 
ro.system.hdmi_active=true 
ro.system.composite_active=false 
ro.system.component_active=false 
ro.system.hdmi_portable=true 
tcc.output.support.camera=0 
tcc.hdmi.720p.fixed=0 
ro.kernel.android.checkjni=1 
ro.setupwizard.mode=OPTIONAL 
net.bt.name=Android 
dalvik.vm.stack-trace-file=/data/anr/traces.txt 
+0

Puoi darci un esempio di un 'dispositivo specifico' su cui questo non funziona? –

+0

http://www.theouterhaven.net/2011/09/15/this-item-is-not-compatible-with-your-device/ http://geekprison.com/4430-android-market-solution-questo -item-is-not-compatible-with-your-device/ –

+0

Quale livello API stai scegliendo come target? –

risposta

0

Dalla documentazione Android Market and Feature-Based Filtering: filtra

Android Market le applicazioni che sono visibili agli utenti, in modo che gli utenti possono vedere e scaricare solo quelle applicazioni che sono compatibili con i loro dispositivi . Uno dei modi in cui il mercato filtra le applicazioni dipende dalla compatibilità delle funzionalità.

Per determinare la compatibilità funzionalità di un'applicazione con dispositivo di un determinato dell'utente, il servizio di Android Market a confronto:

  • caratteristiche richieste dall'applicazione - un'applicazione dichiara caratteristiche in <uses-feature> elementi nella sua manifesta con ...
  • Funzioni disponibili sul dispositivo, in hardware o software: un dispositivo segnala le funzionalità supportate come proprietà del sistema di sola lettura .

Ciò significa che la ragione la vostra applicazione non è compatibile con alcuni dispositivi (come da Android Market) è perché avete esplicitamente caratteristiche dichiarate che non sono disponibili su quel dispositivo.

Ad esempio, utilizzando android.hardware.telephony, si sta effettivamente escludendo più compresse attualmente disponibile come non lo sono i telefoni tradizionali. In quanto tale, Android Market dichiarerà che la tua app è non compatibile con questi dispositivi.

La stessa logica vale per android.hardware.microphone, android.hardware.camera, ecc

Edit: @ManfredMoser ha giustamente osservato che si imposta tutti quegli elementi booleani per falso e dal momento che non avete pubblicato il vostro intero AndroidManifest.xml, dai uno sguardo allo implicit feature requirements e verifica se le autorizzazioni richieste corrispondono all'hardware non disponibile sui dispositivi di test.

+2

Con il menzionato required = "false" questo NON dovrebbe essere il caso .. –

+0

@ManfredMoser Grazie per averlo sottolineato, ho completamente perso il fatto che durante la lettura della domanda :) Ho modificato la mia risposta per riflettere questo. –

+0

Manfre/Marvin: Esattamente, li ho testati tutti. – Ludvigj

1

Per supportare tablet da 10 pollici (e probabilmente più grandi) è necessario aggiungere android:xlargeScreens="true" al manifest, nel tag supports-screens.

Un'altra discussione su questo problema: Application doesn't appear in Android Market for a certain device (Android Market Filters)

xlargeScreens è stato introdotto nel livello di API 9, quindi potrebbe essere necessario regolare quale file JAR Android si compila con nel vostro IDE, ma è ancora possibile impostare il minSDKVersion al di sotto 9.