Android电子市场:"此商品与您的设备不兼容."

Lud*_*igj 8 android android-2.2-froyo android-2.3-gingerbread android-market-filtering google-play

这真让我紧张.我尝试了一切让我的应用程序在一些更奇特的标签上工作!

现在已经发布了一个测试应用程序(只是一个没有别的eclipse安卓项目)来尝试不同的清单设置.但是,我无法让我的应用程序在Android Market的标签页上运行.它可以直接在设备上进行调试.

我测试的内容: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" />
Run Code Online (Sandbox Code Playgroud)

试过这个:

 <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:anyDensity = "true"/>
Run Code Online (Sandbox Code Playgroud)

然后是所有这些的所有组合.我在此测试应用中没有使用权限.

我没有得到的奇怪的事情是一些应用程序工作,我似乎无法找到他们工作的原因,而不是其他一些.我有不同的设备,我使用网站兼容性检查和他们刚刚工作的一些应用程序,有些则没有.

我想知道的是,为什么某个应用与该特定设备的Android电子市场不兼容.有没有办法把这些信息拿出来?我想这应该是找到的地方,因为它有时有效,有时不适用.

请帮我找到解决这个问题的方法.

(我不是在设备上寻找变通方法/ root,已经在某些设备上完成了这个以使应用程序正常工作.我想知道原因)

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

然后我看到这个:支持 - 任何密度:'真'密度:'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>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这是一个测试案例,我真的没有任何内容.它仍然不起作用!这是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'
Run Code Online (Sandbox Code Playgroud)

是的,我知道我拼错了,脏的演示;-).

我从一个我可以找到并且可以安装的应用程序中提取了一个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'
Run Code Online (Sandbox Code Playgroud)

这可以阻止应用程序下载吗?


这是来自设备的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
Run Code Online (Sandbox Code Playgroud)

Mar*_*nto 0

来自Android Market 和基于功能的过滤文档:

\n\n
\n

Android 电子市场会过滤用户可见的应用程序,以便用户只能查看和下载与其设备兼容的应用程序。市场过滤应用程序的方式之一是通过功能兼容性。

\n\n

为了确定应用程序与给定用户设备的功能兼容性,Android Market 服务会比较:

\n\n
    \n
  • 应用程序所需的功能 \xe2\x80\x94 应用程序<uses-feature>在其清单中的元素中声明功能...
  • \n
  • 设备上硬件或软件中可用的功能\xe2\x80\x94 设备将其支持的功能报告为只读系统\n 属性。
  • \n
\n
\n\n

这意味着您的应用与某些设备(根据 Android 市场)不兼容的原因是您明确声明了该设备上不可用的功能。

\n\n

例如,通过使用android.hardware.telephony,您可以有效地排除当前可用的大多数平板电脑,因为它们不是传统手机。因此,Android Market 会指出您的应用与这些设备不兼容。

\n\n

同样的逻辑也适用于android.hardware.microphoneandroid.hardware.camera等。

\n\n

编辑: @ManfredMoser 正确地指出您将所有这些布尔元素设置为 false,并且由于您还没有发布整个AndroidManifest.xml,请查看隐式功能要求并查看您请求的任何权限是否对应于不\在您的测试设备上不可用。

\n