Android App用户尝试更新时,获取“应用程序未安装”

更新:对于询问用户正在接收哪些错误代码的人:没有错误代码。 它只是打开一个空白的,安装后的页面,说“应用程序没有安装”旁边有一个大的“X”。 有可能不同版本的Android可能有不同的消息。 没有迹象表明在安装过程中出了什么问题。

更新2:有些用户报告,他们尝试从Play商店安装/更新时收到错误代码“-504”,手动尝试安装.apk时收到“应用程序未安装”消息。 我不知道这个错误与用户无法安装有什么关系,但是关于这个主题的唯一两个问题的解决scheme并没有解决我的问题。 我已经包含了更新的清单和构build文件。

更新3:当用户在IAB成功安装之后,在版本中报告这个问题,这进一步使这个问题由于引入IAB而引起的概念变得不合法。

更新4:看起来问题是老用户试图更新到新版本,而不是新用户。 考虑到这一点,这个问题很可能是INSTALL_FAILED_UID_CHANGED的结果。 仔细观察版本历史logging,我在有问题的版本中做出的重大更改(用户无法更新)将删除我不再使用的drawable。

要求用户通过程序来解决这个问题是不合理的。 如果有一个解决scheme,我可以执行,这将修复它的错误用户,美妙…如果没有,至less我可以做在这一点是损害控制,并确保这不会发生在未来。

注意:下面是原来的post推测,这个问题是将IAB引入到应用程序的结果。 从那以后,这个事业就变得越来越不可能了。 无论如何,这个职位还有相关的信息。

------------------------------------------------------------------------------------------

原始标题:Android应用程序用户在介绍IAB后获取“应用程序未安装”

我最近在我的应用程序中引入了IAB,这是在Google Play上发布的。 过了一段时间,我开始从一些用户那里得到一些报告,他们在安装或更新它时遇到了“安装不成功”的错误。 是什么让我觉得是因为引入IAB而导致的呢是一个特定的长期用户给我发电子邮件,当他试图用IAB更新版本时,安装程​​序提到引入了新的权限并需要用户的许可。 一旦被授予,它说,该应用程序未能安装。

我做了一些谷歌search,从他们的最终似乎是一个问题,一个用户甚至试图手动安装一个.apk与删除所述权限没有任何成功。 我不能确定这不是我做错的事情,而是我必须接受一些用户的必然性。

请注意,绝大多数安装应用程序没有问题,直到IAB推出之后我才收到任何报告。 这对于less量的用户来说并不会感到困扰,但问题是,这些用户伤害了我的应用的评分。 用户也提到,他们可以安装应用程序,不包括我自己的,非常好。

我不排除在IAB推出之前用户可能已经得到这些错误的可能性,而这种联系可能是错误的。

这是我的清单:

 <?xml version="1.0" encoding="utf-8"?> <manifest package = "com.jjsoftware.fullscientificcalculator" xmlns:android = "http://schemas.android.com/apk/res/android"> <uses-permission android:name = "android.permission.VIBRATE"/> <uses-permission android:name = "com.android.vending.BILLING"/> <application android:allowBackup = "true" android:fullBackupContent = "true" android:icon = "@drawable/logo" android:label = "@string/app_name"> <activity android:name = ".MainActivity" android:hardwareAccelerated = "false" android:label = "@string/app_name" android:screenOrientation = "portrait" android:theme="@style/AppTheme"> <intent-filter> <action android:name = "android.intent.action.MAIN"/> <category android:name = "android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name = ".SettingsActivity" android:theme = "@style/PreferencesTheme"> <intent-filter> <action android:name = ".SettingsActivity"/> <category android:name = "android.intent.category.PREFERENCE"/> </intent-filter> </activity> </application> 

这是Gradle文件:

 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.jjsoftware.fullscientificcalculator" minSdkVersion 14 targetSdkVersion 23 versionCode 102 versionName "1.679" } sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } } } dependencies { compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.google.android.gms:play-services-ads:8.4.0' compile 'com.android.support:gridlayout-v7:23.2.1' compile files('libs/exp4j-0.4.5.jar') compile files('libs/EJML-core-0.28.jar') compile files('libs/EJML-dense64-0.28.jar') compile files('libs/Jama-1.0.3.jar') compile files('libs/EJML-simple-0.28.jar') } 

而且,如果需要,顶层构build:

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } 

android:largeHeap="true">>清单文件中有一个错字。 xml行以>>结尾。 这可能会导致错误。

Google Play服务的版本可能会低于您在APK中定义的最低版本。

如果是这样的话,没有什么可以做的,除了用户升级他们的谷歌服务( https://play.google.com/store/apps/details?id=com.google.android.gms&hl= EN )或者你减less你的版本。

您也可能需要将以下内容添加到您的清单。 (我认为这是用来比较手机中安装的版本与apk所需的版本)

 <application ...> <!-- This meta-data tag is required to use Google Play Services. --> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> 

请记住,Android(棉花糖版本)的最新版本已经改变了权限,给用户更多的访问权限。 因此,仅仅在清单中定义权限是不够的。

通过代码,您需要确保用户在使用应用程序时启用了结算权限。 最简单的方法是将目标SDK设置为v-22。 这应该暂时解决您的问题。

然而,真正的解决scheme是处理棉花糖引入的新权限。 这里是如何做到这一点:

 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch(requestCode) { case BILLING_REQUEST: if (canAccessBilling()) { callBillingPerms(); } break; } } private void callBillingPerms() { Toast.makeText(this, "We need your permission to access Billing", Toast.LENGTH_SHORT).show(); } private boolean canAccessSMS() { return(hasPermission(Manifest.vending.BILLING)); } @TargetApi(Build.VERSION_CODES.M) private boolean hasPermission(String perm) { return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm)); } 

希望这可以帮助 :)

也许错误是在用户身上。

本文陈述如下:

Google Play – 错误504

问题

应用程序由于错误而无法下载。

首先解决scheme

通常,请:进入设置>应用程序>所有> Google Play商店和清除caching并清除数据。 同时清除Google服务框架的caching和清除数据。

第二种scheme

尝试删除您的GMail帐户

这个Stack Exchange的答案讨论了类似的想法。

根据维基百科的状态代码列表 ,504错误意味着以下内容:

504网关超时
服务器充当网关或代理,没有收到来自上游服务器的及时响应。

询问您的用户是否可以解决他们的问题。

我在我的Android设备上安装了一个新的APK的应用程序,我正在开发这个错误。

我检查了设备上的debugging日志(使用“adb -d logcat> log.txt”),发现一个条目说“PackageManager:Downgrade detected:Update version code 2 is now than now 10000”。 很明显,版本控制出了问题。

我卸载了软件包,然后能够安装APK没有问题。