UPDATE:ユーザーが受け取っているエラーコードについて質問した人へ:エラーコードはありません。 「アプリはインストールされていません」という空白のインストール後のページが開き、横に大きな「X」が表示されます。 Androidのバージョンが異なると、メッセージが異なる可能性があります。インストール中に何が問題になったのかはわかりません。
UPDATE 2:一部のユーザーは、Playストアからインストール/更新しようとすると、エラーコード「-504」が表示され、「アプリは.apkを手動でインストールしようとすると、「インストール済み」というメッセージが表示されます。このエラーとユーザーがインストールできないこととの相関関係はわかりませんが、このトピックに関するSO)の2つの質問の解決策では、何も修正されませんでした。更新されたマニフェストとビルドファイル。
UPDATE 3:IABが正常にインストールされた後のバージョンでユーザーがこの問題を報告すると表示されます。これにより、この問題の原因であるという概念がさらに非合法化されます。 IABの紹介。
UPDATE 4:問題は、新しいユーザーではなく、新しいバージョンに更新しようとしている古いユーザーにあるようです。そのことを念頭に置いて、この問題は INSTALL_FAILED_UID_CHANGED の結果である可能性が高いです。バージョン履歴を見ると、ユーザーが更新できない問題のあるバージョンに加えた重要な変更は、使用するつもりがなくなったドローアブルを削除することです。
これを修正するための手順を実行するようにユーザーに求めることは、もっともらしいことではありません。障害のあるユーザーのためにそれを修正するために私が実施できる解決策がある場合、素晴らしい...そうでない場合、現時点で私ができることは、損傷を制御し、これが将来起こらないようにすることです。
注:以下は、問題がアプリにIABを導入した結果であると推測している元の投稿です。それ以来、それが原因である可能性はますます低くなっています。とにかく、投稿にはまだ関連情報があります。
------------------------------------------------------------------------------------------
元のタイトル:AndroidアプリユーザーはIABの導入後に「アプリがインストールされていません」と表示されます
最近、GooglePlayで公開されたアプリにIABを導入しました。しばらくして、一部のユーザーから、インストールまたは更新しようとすると「インストールに失敗しました」というエラーが表示されるというレポートが届き始めました。 IABの導入が原因だと思われるのは、ある特定の長年のユーザーから、IABを使用してバージョンを更新しようとすると、インストーラーが新しいアクセス許可が導入されたと述べ、ユーザーのアクセス許可が必要であるとメールを送ったことです。付与されると、アプリのインストールに失敗したことが示されます。
私はいくつかのグーグルを実行しましたが、それは彼らの側から問題のようです。あるユーザーは、上記の権限を削除して.apkを手動でインストールしようとしても成功しませんでした。それが私が間違ったことではなく、一部のユーザーに受け入れなければならない必然性であることを確認したくありません。
大多数はアプリのインストールに問題はなく、IABが導入されるまでこの報告は受けていません。少しでもユーザーを失ってもそれほど気になりませんが、問題は、それらのユーザーが私のアプリの評価を傷つけていることです。ユーザーはまた、私自身を除いて、アプリを完全にうまくインストールできると述べています。
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')
}
そして、必要に応じて、トップレベルのビルド:
// 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行は>>
で終わります。これがエラーの原因である可能性があります。
スマートフォンのGooglePlay開発者サービスのバージョンがAPKで定義した最小値よりも低い可能性があります。
その場合、ユーザーがGoogleサービスをアップグレードする以外にできることは何もありません( https://play.google.com/store/apps/details?id=com.google。 Android.gms&hl = en )または、バージョンを減らします。
また、マニフェストに以下を追加する必要がある場合もあります。 (これは、電話にインストールされているバージョンと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デバイスに、開発中のアプリの新しいAPKをインストールしているときに、このエラーが発生しました。
デバイスのデバッグログを確認し(「adb-d logcat> log.txt」を使用)、「PackageManager:ダウングレードが検出されました:更新バージョンコード2が現在の10000より古い」というエントリが見つかりました。明らかに、バージョン管理で問題が発生しました。
パッケージをアンインストールしたところ、問題なくAPKをインストールできました。
Android(Marshmallowバージョン))の最新の記事では、ユーザーにアクセス許可へのアクセスを許可するようにアクセス許可が変更されているため、マニフェストでアクセス許可を定義するだけでは不十分です。
コードを使用して、ユーザーがアプリを使用するときに請求許可が有効になっていることを確認する必要があります。これを回避する最も簡単な方法は、ターゲットSDKをv-22に設定することです。これで一時的に問題が解決するはずです。
ただし、実際の解決策は、マシュマロで導入された新しい権限を処理することです。これを行う方法は次のとおりです。
@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));
}
お役に立てれば :)