Android市场:“此项不兼容您的设备。”

8

这真的让我恼火。我尝试了很多方法来让我的应用在一些更奇特的平板电脑上运行!

现在,我发布了一个测试应用程序(只是一个带有空内容的 Eclipse Android 项目),以尝试不同的清单设置。但是我无法在我的市场Android平板电脑上使我的应用程序正常工作。它可以在设备上直接进行调试。

我已经测试过: Android 2.2 Android 2.3

添加了这个:

<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" />

尝试了这个:

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

然后是所有这些的组合。在这个测试应用程序中,我没有使用权限。

奇怪的是,有些应用程序可以正常工作,而我却找不到它们为什么能够工作而其他一些应用程序不能。我有不同的设备,并且我使用网站兼容性检查,有些应用程序可以正常工作,有些则不行。

我想知道的是,为什么某个应用程序对于特定设备不兼容Android市场。有没有办法获取这些信息?我猜应该有地方可以找到这些信息,因为有时它能够正常工作,有时则不能。

请帮我找出解决方法。

(我不是在寻找设备的变通方法/Root,已经在一些设备上完成了此操作以使应用程序正常工作。我想知道原因)

----编辑---- 现在我找到并运行了我的测试应用程序的此命令: ./aapt dump badging testapp.apk

然后我看到了这个: supports-any-density: 'true' densities: '120' '160' '240' 在我的设备上运行screeninfo会显示其密度为200。所以我想这就是问题所在。 那么现在的问题是,如何将200添加到该列表中。我不想更改设备的密度。


这是我的清单:

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

从上面可以看到,这是一个测试案例,我没有实际内容。然而,它仍然无法正常工作!这是从aapt dump 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'

是的,我知道我拼错了,“dirty demo”;-)。

我从一个可以找到并安装的应用程序中提取了一个apk文件,唯一真正的区别在于语言环境:

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'

这可能会导致应用无法下载吗?


以下是设备的build.prop文件:

# 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

http://www.theouterhaven.net/2011/09/15/this-item-is-not-compatible-with-your-device/http://geekprison.com/4430-android-market-solution-this-item-is-not-compatible-with-your-device/这是两篇关于Android设备不兼容问题的文章链接。 - Samir Mangroliya
Marvino:我以这个作为例子,英格尼 Android 2.3 电容触控屏(8GB)。Android 市场将其标识为:Telechips V8。 - Ludvigj
Ankit:我猜更多的人有同样的问题 :-( - Ludvigj
Wesley:<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" /> 已经尝试过8了。 - Ludvigj
1
为什么你的清单中没有提到“xlarge”屏幕?这些通常是10英寸的平板电脑。 - Michell Bak
显示剩余3条评论
3个回答

2
为了支持10英寸的平板电脑(以及可能更大的设备),您需要在supports-screens标签中添加android:xlargeScreens="true"到您的清单文件中。
关于此问题的另一个讨论: Application doesn't appear in Android Market for a certain device (Android Market Filters) xlargeScreens是在API级别9中引入的,因此您可能需要调整IDE中编译使用的Android JAR文件,但您仍然可以将minSDKVersion设置为低于9。

0
请尝试这个:
<supports-screens
    android:resizeable="true"
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"
    android:xlargeScreens="true"
    android:anyDensity="true"/>

0

来自Android市场和基于特征的过滤文档:

Android市场会过滤对用户可见的应用程序,以便用户只能看到和下载与其设备兼容的应用程序。市场过滤应用程序的一种方式是通过特征兼容性。

为了确定应用程序与给定用户设备的特征兼容性,Android市场服务会比较以下内容:

  • 应用程序所需的特征 - 应用程序在其清单文件中使用<uses-feature>元素声明特征...
  • 设备上可用的特征,包括硬件或软件 - 设备将其支持的特征报告为只读系统属性。

这意味着你的应用程序之所以与某些设备不兼容(根据Android市场),是因为你明确声明了该设备上不可用的特征。

例如,通过使用android.hardware.telephony,您实际上排除了当前大多数平板电脑,因为它们不是传统电话。因此,Android市场将指出您的应用程序与这些设备不兼容
同样的逻辑也适用于android.hardware.microphoneandroid.hardware.camera等。 编辑:@ManfredMoser正确指出,您将所有布尔元素设置为false,并且由于您没有发布完整的AndroidManifest.xml,请查看隐式功能要求,并查看您请求的任何权限是否对测试设备上不可用的硬件相应。

@ManfredMoser 感谢您指出这一点,我在阅读问题时完全忽略了它 :) 我已经编辑了我的答案以反映这一点。 - Marvin Pinto
Manfre/Marvin:没错,我已经测试过它们了。 - Ludvigj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接