特定のデバイスで非常に奇妙な状況に直面しています(Nexus 5xとAndroid 7)):データをクリーンアップしてアンインストールしてからStudioでインストールすると、アプリは統合されませんが、アプリのデータを使用します1月24日!タブレットで同じ手順を試しましたが、アプリにデータがありません。
私はこの手順を何度も繰り返し、プロジェクトをクリーンアップして複数回再構築しましたが、常に1月24日のデータ(データベースと共有設定の両方)から始まります。
私はadb Shellを試し、データをクリーンアップするために実行しました:
bullhead:/data/data/lelisoft.com.lelimath.debug $ ls -l databases/
total 232
-rw-rw---- 1 u0_a259 u0_a259 98304 2017-02-05 11:03 lelimath.sqlite
-rw------- 1 u0_a259 u0_a259 16928 2017-02-05 11:03 lelimath.sqlite-journal
それらを削除したところ、アプリは空っぽに見えた-削除して再インストールするまで-1月24日が戻ってきた。
これはそれがどのように始まるかのログです:
$ adb Shell am start -n "lelisoft.com.lelimath.debug/lelisoft.com.lelimath.activities.DashboardActivity" -a Android.intent.action.MAIN -c Android.intent.category.LAUNCHER -D
Waiting for application to come online: lelisoft.com.lelimath.debug | lelisoft.com.lelimath.debug.test
I/InstantRun: Instant Run Runtime started. Android package is lelisoft.com.lelimath.debug, real application class is lelisoft.com.lelimath.helpers.LeliMathApp.
D/l.c.l.h.LeliMathApp: onCreate()
D/l.c.l.h.BalanceHelper: Current points balance: 234
これは、デバッガーから取得したデータベースの場所です。
/data/user/0/lelisoft.com.lelimath.debug/databases/lelimath.sqlite
Gradle:
Android {
signingConfigs {
}
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "lelisoft.com.lelimath"
resValue 'string', 'app_name', 'LeliMath'
minSdkVersion 16
targetSdkVersion 24
versionCode 300
versionName '3.0.0'
resValue "string", "app_build_number", getDate();
resValue "string", "app_version", versionName;
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
debug {
applicationIdSuffix ".debug"
resValue 'string', 'app_name', 'LeliMath DEV'
}
}
マニフェスト部分:
<application
Android:name=".helpers.LeliMathApp"
Android:allowBackup="true"
Android:fullBackupContent="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
このデータを削除するために電話を出荷時設定にリセットしたくありません。このデータが私のビルドにあるとは思いません。追加していません。タブレットのアプリはインストール時に空でした。
Android 6.0(v 23)以降、Androidは アプリの自動バックアップ という新しい機能を導入しました。これは、アプリケーションの特定のファイルをユーザーのGoogleドライブにバックアップします。更新されるファイルのリストには、次のものが含まれます:
getFilesDir()
によって返されるディレクトリ内のファイルgetDatabasePath(String)
によって返されるディレクトリ内のファイルgetDir(String, int)
で作成されたディレクトリ内のファイルgetExternalFilesDir(String)
によって返されるディレクトリ内の外部ストレージ上のファイルこれで、manifest.xml
のこの行が原因になります。
Android:allowBackup="true"
バックアップを無効にする場合は、値をfalse
に設定する必要があります。
さらに、バックアップされたデータは24時間間隔であり、Androidは JobScheduler APIをこの目的で使用するため、ユーザーはプロセスを制御できません。転送中のデータ。
また、自動バックアップのスペースは25
MBに制限されており、ユーザーのスペースクォータにはカウントされません。
また、アップロードする特定のタイプのデータを<include>
および<exclude>
に設定できます。たとえば、ユーザーの機密データを保存する必要がない場合があるため、そのための柔軟性もあります。で利用可能です アプリのAndroid自動バックアップ(Google Devの100日間)
単に変える
Android:allowBackup="true"
に
Android:allowBackup="false"
そして、依存関係を使用している場合、このプロパティをオーバーライドするには
tools:replace="Android:allowBackup"
Android:allowBackup="false"
これと同じ問題があり、Googleがアプリバックアップ機能の微妙な変更を強調していないため、本当に頭を悩ませる必要がありました。APIレベル23以降、すべてのアプリデータがGoogleドライブに自動的にバックアップされます。このデータは、アプリが再インストールされると復元されます。そのため、アプリをアンインストールしてもデータは消えません。
ほとんどの場合、アプリマニフェストには次のようなエントリがあります-
Android:allowBackup="true"
値をfalse
に変更するか、以下のリンクに従って、xmlを構成し、バックアップサービスに何をバックアップし、何をバックアップしないかを知らせます。
https://developer.Android.com/guide/topics/data/autobackup.html
<application ...
Android:allowBackup="false"
Android:fullBackupContent="false"
tools:replace="Android:allowBackup"
</application>
私はこれが完璧な解決策ではないことを知っていますが、それは私にとってはうまくいきました。
特定のアプリをアンインストールした後、デバイスをオフにしてデバイスをオンにすると、デバイスOSがクラウドからバックアップチェックを呼び出さない