Android Studio3.0.1を使用しています。
アプリを実行しようとしているとき
INSTALL_FAILED_USER_RESTRICTED:無効なapk
エラーが発生します。
インスタントランも無効にします。
再びアプリを実行していますが、同じエラーが発生します。
04/04 10:59:08:アプリを起動します
$ adb Push G:\ Android\Fundraiser\BuyForFund\app\build\outputs\apk\debug\app-debug.apk /data/local/tmp/com.Android.buyforfund
$ adb Shell pm install -t -r "/data/local/tmp/com.Android.buyforfund"
失敗[INSTALL_FAILED_USER_RESTRICTED:無効なapk]$ adb Shellpmアンインストールcom.Android.buyforfund
DELETE_FAILED_INTERNAL_ERROR
APKのインストール中にエラーが発生しました
私は同じ問題を抱えています、私は私の電話でグーグルにフィードバックを送りました、それはバグだと言うでしょう。私の場合、最善の解決策は、そのダイアログをキャンセルしてから再実行することです。キャンセル後、2回目の試行で常に機能します。
使用している電話によっては、問題は電話(Google)側にあると思います。一般的なGoogleの問題なのか、特定のハードウェア電話なのかはまだわかりませんが、「XiaomiRedmi5」を使用しています。
私の場合、インスタント実行を無効にすることは実際には機能しましたが、それはその目的ではなく、単なる汚い回避策です。
編集:あなたがのようなものを持っていないことを確認してください
Android:debuggable="false"
マニフェストで。
Mi9電話でXiaomisMIUI 10
を使用した場合、他の回答はどれもうまくいきませんでした。
通常(開発者向けオプションでUSB debugging
とInstall via USB
を有効にするなど)に加えて、他の質問からの回答はMIUI optimization
をオフにすることを提案しました。これでうまくいきましたが、私はそれに満足していませんでした。それで私はいくつかの掘り下げを行い、次の結論に達しました:
説明されているエラーは、アプリを2回目にデプロイしたときにのみ発生し、その後、同じアプリをその電話にデプロイしたときに1回おきに発生し続けます。
これを解決するには、Run
を押すか、Shift + F10
をもう一度押すか、その電話のプラグを抜き差しします。これはどれも実行可能ではないようです。そこで、もう少し掘り下げてみたところ、アプリをビルドするたびにbuild.gradle
ファイルのversionCode
を増やしていると、MIUI 10
は文句を言わず、アプリをインストールできるようになりました。あなたが期待するのと同じように。 Android Studios Instant Run
でも機能します。これを手動で行うのも、同じように面倒です。
そこで、versionCode
を この質問 から自動インクリメントし、build.gradle
(プロジェクト用ではなくモジュール用)を変更するためのアイデアをいくつか取り入れました。次の簡単な手順に従って同じことを行うことができます。
交換
defaultConfig {
applicationId "your.app.id" // leave it at the value you have in your file
minSdkVersion 23 // this as well
targetSdkVersion 28 // and this
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
と
def versionPropsFile = file('version.properties')
def value = 0
Properties versionProps = new Properties()
if (!versionPropsFile.exists()) {
versionProps['VERSION_MAJOR'] = "1"
versionProps['VERSION_MINOR'] = "0"
versionProps['VERSION_PATCH'] = "0"
versionProps['VERSION_BUILD'] = "0"
versionProps.store(versionPropsFile.newWriter(), null)
}
def runTasks = gradle.startParameter.taskNames
if ('assembleRelease' in runTasks) {
value = 1
}
if (versionPropsFile.canRead()) {
versionProps.load(new FileInputStream(versionPropsFile))
versionProps['VERSION_PATCH'] = (versionProps['VERSION_PATCH'].toInteger() + value).toString()
versionProps['VERSION_BUILD'] = (versionProps['VERSION_BUILD'].toInteger() + 1).toString()
versionProps.store(versionPropsFile.newWriter(), null)
// change major and minor version here
def mVersionName = "${versionProps['VERSION_MAJOR']}.${versionProps['VERSION_MINOR']}.${versionProps['VERSION_PATCH']}"
defaultConfig {
applicationId "your.app.id" // leave it at the value you have in your file
minSdkVersion 23 // this as well
targetSdkVersion 28 // and this
versionCode versionProps['VERSION_BUILD'].toInteger()
versionName "${mVersionName} Build: ${versionProps['VERSION_BUILD']}"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
else {
throw new GradleException("Could not read version.properties!")
}
これで、Run
またはInstant Run
を押してアプリをビルドするたびに、versionCode
/VERSION_BUILD
が増加します。リリースをビルドすると、VERSION_PATCH
が増加し、versionName
がx.y.z
からx.y.z+1
に変更されます(つまり、1.2.3
は1.2.4
に変わります)。 VERSION_MAJOR
(x
)とVERSION_MINOR
(y
)を変更するには、モジュールフォルダにあるversion.properties
ファイルを編集します。モジュール名を変更しなかった場合はapp
と呼ばれるため、このファイルはapp/version.properties
にあります。
次のオプションが有効になっていることを確認してください。
設定>追加設定>開発者向けオプション
Android 'P'をターゲットにしている場合、build.gradleファイルは次のようになります。
Android {
compileSdkVersion 'Android-P'
defaultConfig {
applicationId "xyz.com"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
Android 'P'より下でアプリを実行するにはtargetSdkVersionが27である必要があります。そうでない場合、アプリは 'P'以上でのみ実行できます。