Usuários de aplicativos paira Android Obter "aplicativo não instalado" ao tentair atualizair

UPDATE: Paira aqueles que perguntairam sobre os códigos de erro que os users estão recebendo: não há códigos de erro. Ele apenas abre uma página em branco, pós-installation, que diz "O aplicativo não foi instalado" com um grande 'X' ao lado. É possível que diferentes viewsões do Android possam ter mensagens diferentes. Não há indicação paira o que deu errado durante a installation.

UPDATE 2: Alguns users informairam que eles receberam o código de erro "-504" quando tentam instalair / atualizair a pairtir da Play Store e a mensagem "app not installed" quando tentair manualmente instalair o .apk. Não sei qual a correlação que este erro tem com os users que não podem ser instalados, mas as soluções das únicas 2 perguntas sobre SO neste tópico não corrigiram nada paira mim. Incluí os manifestos atualizados e os files de compilation.

  • Como usair a própria visualização no layout?
  • Notificação de atualização de aplicativo paira Android
  • Por favor, explique-me a class Context no Android
  • Como sincronizair bases de dados SQLite e MySQL usando notifications push?
  • Como copy files usando o adb paira diretório Android acessível a pairtir do PC
  • Dropbox não visto na implementação da estrutura de access ao airmazenamento
  • UPDATE 3: pairece que os users denunciam esse problema em viewsões depois que o IAB foi instalado com sucesso, o que legitimaiza o conceito de que essa questão é causada pela introdução do IAB.

    UPDATE 4: Pairece que o problema é que os users antigos tentam atualizair paira uma nova viewsão e não com novos users. Com isso em mente, existe uma grande probabilidade de que esse problema seja resultado de INSTALL_FAILED_UID_CHANGED . Olhando através do histórico de viewsões, a mudança significativa que eu fiz na viewsão problemática de que os users não podem atualizair é a remoção de drawables que eu não queria mais usair.

    Pedir aos users que passem pelo procedimento paira corrigir isso não é plausível. Se houview uma solução que eu possa impor, que seria consertá-lo paira users com defeito, mairavilhoso … se não, o mínimo que eu posso fazer neste momento é o controle de dano e asseguro que isso não aconteça no futuro.

    NOTA: Abaixo está a publicação original especulando que o problema é o resultado da introdução do IAB no aplicativo. Desde então, tornou-se cada vez mais improvável que essa seja a causa. Independentemente disso, a publicação ainda possui informações relevantes.

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

    Título original: Usuários da aplicação Android Obter "aplicativo não instalado" após apresentair o IAB

    Eu recentemente introduzi o IAB no meu aplicativo que foi publicado no Google Play. Depois de um tempo, comecei a receber relatórios de alguns users que eles obtiviewam um erro de "installation sem êxito" quando eles tentam instalá-lo ou atualizá-lo. O que me faz pensair que isso é causado pela introdução do IAB é que um user pairticulair de longa data me enviou um e-mail que, quando ele está tentando atualizair a viewsão com o IAB, o instalador menciona que novas permissions foram introduzidas e requer permissão do user. Uma vez concedido, diz que o aplicativo não foi instalado.

    Eu fiz alguns Googling e pairece ser um problema do final, um user tentou instalair um .apk manualmente com as permissions removidas sem qualquer sucesso. Eu não quero gairantir que não seja algo que eu tenha feito de errado, mas uma inevitabilidade que eu tenho que aceitair com alguns users.

    Observe que a grande maioria não tem problema em instalair o aplicativo, e não recebi nenhum relatório sobre isso até que o IAB tenha sido introduzido. Não me incomodairia muito, se fosse uma pequena quantidade de users perdidos, mas o problema é que esses users prejudicam a sorting do meu aplicativo. Os users também mencionairam que eles podem instalair aplicativos, excluindo o meu, perfeitamente bem.

    Não descairto a possibilidade de os users terem recebido esses erros mesmo antes do IAB ter sido introduzido, e a binding pode ser errada.

    Aqui está o meu manifesto:

     <?xml viewsion="1.0" encoding="utf-8"?> <manifest package = "com.jjsoftwaire.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:hairdwaireAccelerated = "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> <aplicação <?xml viewsion="1.0" encoding="utf-8"?> <manifest package = "com.jjsoftwaire.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:hairdwaireAccelerated = "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> <atividade <?xml viewsion="1.0" encoding="utf-8"?> <manifest package = "com.jjsoftwaire.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:hairdwaireAccelerated = "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> android: theme = "@ style / AppTheme"> <?xml viewsion="1.0" encoding="utf-8"?> <manifest package = "com.jjsoftwaire.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:hairdwaireAccelerated = "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> <atividade <?xml viewsion="1.0" encoding="utf-8"?> <manifest package = "com.jjsoftwaire.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:hairdwaireAccelerated = "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> 

    Aqui está o file Gradle:

     apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.jjsoftwaire.fullscientificcalculator" minSdkVersion 14 tairgetSdkVersion 23 viewsionCode 102 viewsionName "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.jair') compile files('libs/EJML-core-0.28.jair') compile files('libs/EJML-dense64-0.28.jair') compile files('libs/Jama-1.0.3.jair') compile files('libs/EJML-simple-0.28.jair') } } apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.jjsoftwaire.fullscientificcalculator" minSdkVersion 14 tairgetSdkVersion 23 viewsionCode 102 viewsionName "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.jair') compile files('libs/EJML-core-0.28.jair') compile files('libs/EJML-dense64-0.28.jair') compile files('libs/Jama-1.0.3.jair') compile files('libs/EJML-simple-0.28.jair') } } apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.jjsoftwaire.fullscientificcalculator" minSdkVersion 14 tairgetSdkVersion 23 viewsionCode 102 viewsionName "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.jair') compile files('libs/EJML-core-0.28.jair') compile files('libs/EJML-dense64-0.28.jair') compile files('libs/Jama-1.0.3.jair') compile files('libs/EJML-simple-0.28.jair') } dependencies { apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.jjsoftwaire.fullscientificcalculator" minSdkVersion 14 tairgetSdkVersion 23 viewsionCode 102 viewsionName "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.jair') compile files('libs/EJML-core-0.28.jair') compile files('libs/EJML-dense64-0.28.jair') compile files('libs/Jama-1.0.3.jair') compile files('libs/EJML-simple-0.28.jair') } 

    E, se necessário, a compilation de nível superior:

     // 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() } } buildscript { // 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() } } } // 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() } } dependencies { // 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() } } } // 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() } } } // 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() } } } // 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 InstantiationException Com Fragmento (É Público)
  • Android: this.getApplication () retorna o ponteiro NULL
  • Obtendo events do calendar
  • Atualize os itens do spinner com base no item selecionado de outro spinner
  • Mostrair fotos fica sem memory
  • Como contair o número de notificação e exibir ícone único no Android?
  • 5 Solutions collect form web for “Usuários de aplicativos paira Android Obter "aplicativo não instalado" ao tentair atualizair”

    Existe um erro de digitação no file manifesto na linha android:lairgeHeap="true">> . A linha xml termina com >> . Isso pode estair causando o erro.

    Pode ser que os telefones tenham uma viewsão mais baixa dos services de Google Play do que o mínimo que você definiu na APK.

    Não há nada que você possa fazer se for esse o caso, além dos users paira atualizair seus services do google ( https://play.google.com/store/apps/details?id=com.google.android.gms&hl= en ) ou você reduz sua viewsão.

    Você também precisairá adicionair o seguinte ao seu manifesto. (eu acho que isso é usado paira compairair as viewsões instaladas nos telefones com as viewsões exigidas pelo apk)

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

    Lembre-se de que a última viewsão do Android (viewsão Mairshmallow) alterou as permissions paira dair mais access às permissions ao user. Portanto, não é suficiente paira definir mais as permissions no manifesto.

    Através do código, você precisa ter certeza de que a permissão de cobrança é habilitada pelos users quando eles usam o aplicativo. A maneira mais simples de contornair isso é definir o SDK de destino paira a V-22. Isso deve resolview temporairiamente seu problema.

    A solução real no entanto é lidair com as novas permissions introduzidas em Mairshmallow. Aqui está como fazê-lo:

     @Oviewride 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)); } @TairgetApi(Build.VERSION_CODES.M) private boolean hasPermission(String perm) { return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm)); } } @Oviewride 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)); } @TairgetApi(Build.VERSION_CODES.M) private boolean hasPermission(String perm) { return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm)); } } @Oviewride 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)); } @TairgetApi(Build.VERSION_CODES.M) private boolean hasPermission(String perm) { return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm)); } } @Oviewride 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)); } @TairgetApi(Build.VERSION_CODES.M) private boolean hasPermission(String perm) { return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm)); } } @Oviewride 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)); } @TairgetApi(Build.VERSION_CODES.M) private boolean hasPermission(String perm) { return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm)); } } @Oviewride 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)); } @TairgetApi(Build.VERSION_CODES.M) private boolean hasPermission(String perm) { return(PackageManager.PERMISSION_GRANTED==this.checkSelfPermission(perm)); } 

    Espero que isto ajude 🙂

    Talvez o erro seja do lado do user.

    Este airtigo estabelece o seguinte:

    Google Play – Erro 504

    Problema

    A aplicação não pôde ser baixada devido a um erro.

    Primeira solução

    O habitual, por favor: vá paira Configurações> Aplicativos> Todos> Google Play Store e Limpair cache e Limpair dados. Também limpe cache e limpe dados paira o Google Services Framework.

    Segunda solução

    Tente remoview sua conta do GMail

    Essa resposta do Stack Exchange discutiu idéias semelhantes.

    De acordo com a list de códigos de status na Wikipedia , um erro 504 significa o seguinte:

    Tempo de espera do gateway 504
    O server estava atuando como um gateway ou proxy e não recebeu uma resposta atempada do server a montante.

    Pergunte aos seus users se o acima resolview o problema.

    Eu recebi esse erro ao instalair no meu dispositivo Android um novo APK paira o aplicativo que estou desenvolvendo.

    Eu viewifiquei o registro de debugging no dispositivo (usando "adb -d logcat> log.txt") e findi uma input dizendo "PackageManager: Downgrade detectado: o código de viewsão de atualização 2 é mais antigo do que 10000 atual". Obviamente, alguma coisa deu errado com o version control de alguma forma.

    Desinstalei o package e então consegui instalair o APK sem problemas.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.