web-dev-qa-db-ja.com

Androidアプリの自動バックアップを防ぐ方法は?

特定のデバイスで非常に奇妙な状況に直面しています(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">

このデータを削除するために電話を出荷時設定にリセットしたくありません。このデータが私のビルドにあるとは思いません。追加していません。タブレットのアプリはインストール時に空でした。

16
Leos Literak

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をこの目的で使用するため、ユーザーはプロセスを制御できません。転送中のデータ。

また、自動バックアップのスペースは25MBに制限されており、ユーザーのスペースクォータにはカウントされません。

また、アップロードする特定のタイプのデータを<include>および<exclude>に設定できます。たとえば、ユーザーの機密データを保存する必要がない場合があるため、そのための柔軟性もあります。で利用可能です アプリのAndroid自動バックアップ(Google Devの100日間)

28
OBX

単に変える

Android:allowBackup="true"

Android:allowBackup="false"

そして、依存関係を使用している場合、このプロパティをオーバーライドするには

tools:replace="Android:allowBackup"
Android:allowBackup="false"
1

これと同じ問題があり、Googleがアプリバックアップ機能の微妙な変更を強調していないため、本当に頭を悩ませる必要がありました。APIレベル23以降、すべてのアプリデータがGoogleドライブに自動的にバックアップされます。このデータは、アプリが再インストールされると復元されます。そのため、アプリをアンインストールしてもデータは消えません。

ほとんどの場合、アプリマニフェストには次のようなエントリがあります-

Android:allowBackup="true"

値をfalseに変更するか、以下のリンクに従って、xmlを構成し、バックアップサービスに何をバックアップし、何をバックアップしないかを知らせます。

https://developer.Android.com/guide/topics/data/autobackup.html

1
Dibzmania
<application ...
    Android:allowBackup="false"
    Android:fullBackupContent="false"
    tools:replace="Android:allowBackup"
</application>
1
Ashwin Khadgi

私はこれが完璧な解決策ではないことを知っていますが、それは私にとってはうまくいきました。

特定のアプリをアンインストールした後、デバイスをオフにしてデバイスをオンにすると、デバイスOSがクラウドからバックアップチェックを呼び出さない

0
Mohd Qasim