我知道类似的问题已发布here。 我将应用程序上传到Google Play商店,但它与所有设备不兼容。 该应用实际上是一个基于SignalR的聊天应用程序。 看看这个图像
我正在附加AndroidManifest.xml文件。非常感谢。
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="19"
android:maxSdkVersion="21" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
我正在使用signalr库。我正在使用这个库来安装android中的聊天应用程序。 我首先开发了基于eclipse的项目并使用jar文件。应用程序运行正常。
但是当我尝试将应用上传到Google Play时,它会向我显示一条消息,表明您的应用不支持任何设备。 我甚至尝试上传没有库的应用程序,然后上传支持超过6K的Android设备。
由于这个库已更新为gradle for android.So我只是将其转换为android studio的gradle项目。工作完美但仍然不会支持任何设备。
这些是我在eclipse和android studio中使用的jar文件
答案 0 :(得分:10)
上周我遇到了同样的情况。
我发现主要问题是“signalr-client-sdk.jar”包装不正确的安卓。
“signalr-client-sdk.jar”中的文件夹
signalr-client-sdk.jar
|
|-lib
| |
| |-getLibs.ps1
| |-getLibs.sh
| |-gson-2.2.2.jar
这三个文件将被打包到apk“lib”文件夹中。 当您的应用程序使用armeabi,x86,x86_64本机supprot库(* .so)时它会正常工作,但没有错误。并使谷歌开发者控制台网站过滤限定符支持设备错误。
使用此代码来解决问题
packagingOptions {
exclude 'lib/getLibs.ps1'
exclude 'lib/getLibs.sh'
exclude 'lib/gson-2.2.2.jar'
}
希望这有帮助
答案 1 :(得分:9)
我通过修复冲突的jar文件解决了这个问题。我把它们发布在github上。 https://github.com/eak65/FixedSignalRJar
答案 2 :(得分:5)
最后我解决了这个问题。这里已经发布了两个解决方案。
解决方案1:使用aar文件
第1步
首先我将我的eclipse项目转换为Gradle。
第2步
从此link下载最新的SignalR。生成aar文件。 将这些文件添加为依赖项。
第3步
更新了我的清单文件。我错过了一些位置支持权限。 现在这是新的AndroidManifest.xml
<uses-feature
android:glEsVersion="0x00020000"
android:required="false"/>
<uses-feature
android:name="android.permission.INTERNET"
android:required="false" />
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="19"
android:maxSdkVersion="21" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true" />
<compatible-screens>
<!-- small size screens -->
<screen android:screenSize="small" android:screenDensity="ldpi" />
<screen android:screenSize="small" android:screenDensity="mdpi" />
<screen android:screenSize="small" android:screenDensity="hdpi" />
<screen android:screenSize="small" android:screenDensity="xhdpi" />
<!--Only hdpi and xhdpi for normal size screens -->
<screen android:screenSize="normal" android:screenDensity="ldpi" />
<screen android:screenSize="normal" android:screenDensity="mdpi" />
<screen android:screenSize="normal" android:screenDensity="hdpi" />
<screen android:screenSize="normal" android:screenDensity="xhdpi" />
<!-- all large size screens -->
<screen android:screenSize="large" android:screenDensity="ldpi" />
<screen android:screenSize="large" android:screenDensity="mdpi" />
<screen android:screenSize="large" android:screenDensity="hdpi" />
<screen android:screenSize="large" android:screenDensity="xhdpi" />
<!-- all xlarge size screens -->
<screen android:screenSize="xlarge" android:screenDensity="ldpi" />
<screen android:screenSize="xlarge" android:screenDensity="mdpi" />
<screen android:screenSize="xlarge" android:screenDensity="hdpi" />
<screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
<!-- Special case for Nexus 7 -->
<screen android:screenSize="large" android:screenDensity="213" />
</compatible-screens>
<permission android:name="com.test.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<uses-permission android:name="com.test.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
当然它也有应用标签和活动。
解决方案2:使用jar文件
第1步
在主包中创建一个名为“libs”的目录并粘贴所有jar文件。您可以从此link下载jar文件
第2步
在主程序包/ app的build.gradle中添加依赖项
第3步
现在这是我的项目的主build.gradle的样子。
第4步
这就是我的settings.gradle的样子
第5步
完成所有这些步骤后,您仍然会导致导入错误。使缓存无效并重新启动
Google Play上的最终输出
现在它支持超过7K的设备
干杯:)
答案 3 :(得分:0)
我们取得了一些成功,并且能够将SignalR成功集成到我们的Android应用程序中,并拥有可在多个设备上正常运行的APK。但是,每当我们尝试将我们的APK上传到Play商店时,它总会报告0支持设备。
如果我们删除SignalR Java / Android Cient .JAR文件,则此数字将再次返回。
通过与Google Play支持的讨论,我们获得了以下洞察力:
感谢您的耐心等待。我的工具已确认问题是 由以下声明为本机平台引起的: getLibs.ps1,getLibs.sh,gson-2.2.2.jar
虽然我们能够确定权限或功能 导致兼容性冲突,我们无法提供技术 发展支持解释冲突发生的原因或方式 解决冲突。对不起,我们无法提供具体的信息 分辨率。
问题肯定是因为将库用作本机 平台。
只是部分答案,但只想分享其他遇到此问题的人
一旦我们使用.AAR文件,我们就能够生成APK,但是SignalR Connection不再有效。请注意@Jhonny如何设法使其工作,但我们只能生成一个.AAR文件(对于android),但一般的java模块不能编译成.AAR。
答案 4 :(得分:0)
默认情况下,任何Android功能都有android:required =&#34; true&#34;。因此,当您将apk上传到Google Play时,机器人会看到android:required =&#34; true&#34;。除非该功能可用,否则它会假定您的应用无法正常工作。因此,您可以获得这个&#34; 0设备&#34;。
简单地制作android:required =&#34; false&#34;解决了这个问题。