8

这真的让我很紧张。我已经尽一切努力让我的应用程序在一些更具异国情调的标签上工作!

现在已经发布了一个测试应用程序(只是一个没有别的东西的 eclipse android 项目)来尝试不同的清单设置。但是,我无法让我的应用程序在我的标签上与 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" />

试过这个:

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

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

我不明白的奇怪事情是某些应用程序可以工作,我似乎无法找到它们为什么工作而不是其他应用程序。我有不同的设备,我使用网站兼容性检查,有些应用程序可以正常工作,有些不能。

我想知道的是为什么应用程序与该特定设备的 Android Market 不兼容。有没有办法把这些信息弄出来?我想这应该在某个地方可以找到,因为它有时有效,有时无效。

请帮助我找到解决此问题的方法。

(我不是在设备上寻找解决方法/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'

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

我从一个我可以找到并可以安装的应用程序中提取了一个 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
4

3 回答 3

2

为了支持 10 英寸平板电脑(可能更大),您需要在android:xlargeScreens="true"清单中添加supports-screens标签。

关于这个问题的另一个讨论: Application doesn't appear in Android Market for a certain device (Android Market Filters)

xlargeScreens在 API 级别 9 中引入,因此您可能需要调整您在 IDE 中编译的 Android JAR 文件,但您仍然可以将您的设置minSDKVersion为低于 9。

于 2013-05-20T18:17:05.110 回答
0

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

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

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

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

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

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

相同的逻辑适用于android.hardware.microphone,android.hardware.camera等。

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

于 2012-02-27T23:29:05.603 回答
0

请试试这个:

<supports-screens
    android:resizeable="true"
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"
    android:xlargeScreens="true"
    android:anyDensity="true"/>
于 2021-03-06T08:15:01.790 回答