问题标签 [android-backup-service]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 当 backupAgent 尝试启动时,我怎么会得到 ClassNotFoundException
我使用BackupAgentHelper
来备份SharedPreferences
我的 Android 应用程序。我已经在模拟器(Android 1.6 和 2.2)和我自己的手机(Android 2.3.3)上对其进行了测试,一切正常。但是,今天我在开发者控制台中收到了如下所示的崩溃报告:
backupAgent 在 Manifest 的 application 标记中声明为:
显然,这个类MyBackupAgent
是存在的,因为我可以构建它.apk
并且它在几个设备上运行得很好。那么这里怎么找不到类呢?我在上面的消息中注意到的一件事是,该应用程序似乎安装在一个路径中,该路径具有我的包名称和末尾附加的“-2”。这会导致类加载器看不到我的包中的类,因为我在 中指定了完整的包名和类android:backupAgent
,还是那部分无关?任何人都可以理解找不到该课程的原因是什么?
值得一提的是,我的应用程序可以安装在 SD 卡上。
请原谅我在上面的消息中用 com.xxx.yyy 替换了我的真实包名。
android - 确定是否以编程方式启用系统范围的备份
我想知道是否可以确定用户是否启用了从我的 android 应用程序中将应用程序数据备份到云的选项。
我可以从命令行确定这一点,从 adb shell 调用:
android 是否从代码中提供了一个 API 来做到这一点?
android - Android系统使用BackupAgent时出现神秘的ClassNotFoundException
从 Android 系统决定使用 BackupAgent 备份到 Google 云时,我的应用程序收到了几 (4) 个错误报告。我正在使用 SharedPreferencesBackupHelper。堆栈跟踪如下所示(我的真实包名在下面替换为 com.xxx.yyy):
我什至在我自己的运行 Android 2.3.3 的手机上遇到了程序崩溃。这个程序崩溃让我感到困惑的是,我肯定知道包中存在“MyBackupAgent”类。我也肯定知道备份到云的工作是在我曾经遇到崩溃的同一部手机上工作的。
我在网上搜索了很多解决方案来解决这个问题的原因。我在类似问题上发现的所有案例,即从 PathClassLoader 抛出 ClassNotFoundException 即使该类存在于 apk 中,也有一个共同点。它们都有一个尾随“-1”或“-2”以及安装 apk 的包名目录的结尾。
在我的错误报告中,这些是 dalvik.system.PathClassLoader 搜索我的备份类的不同名称:
/mnt/asec/com.xxx.yyy-1/pkg.apk
/data/app/com.xxx.yyy-1.apk
/mnt/asec/com.xxx.yyy-2/pkg.apk
也许我在这里钓鱼错了湖,但是包名目录末尾附加的“-1”和“-2”是什么意思,问题可能与此有关吗?我怀疑问题出在我的代码中,因为只需告诉系统安排我的共享首选项的备份即可。然后,Android 系统会在未来的合适时间执行备份操作——这就是崩溃发生的地方。查看堆栈跟踪,甚至没有提到我的代码。最终在apk中搜索我的备份类并且由于某种未知原因找不到它的是所有系统例程。
我没有在 Manifest 的应用程序标签中设置 android:name 属性,我读到的可能会导致类似的错误。
有没有人知道可能导致这种情况的原因?或者更好的是,如何避免这种情况发生。
android - 无法在android中调用onbackup方法
我想实现备份和恢复,但它不执行onBackup()
方法。我在清单文件中的代码是
当Activity
我添加或更新我想要备份的任何项目时,我的代码是
在MyBackupAgent
我写的文件中
但是在onBackup()
方法中它不打印任何东西,所以我怎样才能确定它是否进入了 onbackup 方法?
android - Android BackupManager 和多个设备链接到同一个帐户
我总是想知道当同一个启用的应用程序安装在与同一个 Google 帐户链接的多个设备(例如智能手机和平板电脑)上时, Android将如何运作。BackupManager
似乎我不是唯一一个,但我找不到任何关于此的规范。BackupManager
您对这种情况有什么经验?有没有描述这种情况的官方资源?
android - 没有为我的自定义 BackupAgent 调用 onRestore
我的 Android 应用程序中有一些数据要备份和恢复。为此,我创建了一个自定义实现BackupAgent
。
在我的清单中包含了备份代理,如下所示
我已经包含了备份服务 api 密钥,虽然我正在使用模拟器 (Android 2.2) 进行测试,但这不是必需的,因为它使用本地备份传输。
为了测试备份和恢复,我做了以下工作:
- 在安装了我的应用程序的情况下启动模拟器。
启用备份
adb shell bmgr 启用 true
调用我的部分代码是调用 BackupManager 类中的 dataChanged 方法。
手动启动备份操作
adb shell bmgr 运行
在日志中检查了我的自定义 BackupAgent 的 onBackup 方法被调用。
- 卸载应用程序
- 重新安装应用程序
- 如果调用了 onRestore 方法,请检查日志。
问题是似乎没有调用 onRestore 方法,我不知道为什么。重新安装应用程序或使用 adb 手动触发还原后,我在控制台中看到以下内容。
还有这个在日志中
但我没有看到实际上调用了 onRestore (我在它的开头有一些日志语句?
这曾经发生在你身上吗?是否有任何原因导致 onRestore 方法没有被调用,即使在onBackup
被调用的情况下?
android - Android BackupManager 和我的应用程序数据库:最佳方法
我想用BackupManager
来支持我的应用程序的数据库。该文档讨论了BackupAgent
and BackupAgentHelper
,并且它指出BackupAgent
如果您有数据库,则要使用它。
另一方面,它BackupAgentHelper
有一个整洁FileBackupHelper
的东西,让事情变得很容易。
我的问题:
1) 是否可以FileBackupHelper
用来备份 /data/data/<myapp>/databases 中的 .sqlite 文件?
2)如果没有,是否可以使用SQLiteOpenHelper
内部的方法onBackup()
和onRestore()
(onCreate/onUpgrade 来备份/恢复)?
android - BackupAgent 每台设备有一个云备份?
我有一个连接了许多设备的 Google 帐户(查看市场网站的设置)。当我用另一台设备备份我的应用程序BackupAgent
并擦除其他设备时,擦除的设备不会恢复任何内容。如果我在一台设备上保存文本“Nexus S”,在另一台设备上保存“Nexus One”,它们会恢复“Nexus S”和“Nexus One”。
这是正常行为吗?我们可以使用BackupAgent
iCloud 允许的唯一备份吗?
android - Android BackupRestore 示例不适用于 Android 2.3 Nexus One
我已经使用BackupRestore
. 我去 Android Backup Service 注册了一个密钥。我得到以下信息:
您的密钥是:AEdPqrEAAAAIW4p30C1GTNjzBOqWrb0clI7_OCWxm3ddIgkKhw 此密钥适用于具有包名称的应用程序:
com.example.android.backuprestore 在您的 AndroidManifest.xml 文件中提供此键,并在 <application> 元素中添加以下元素:
<元数据 android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIW4p30C1GTNjzBOqWrb0clI7_OCWxm3ddIgkKhw" />
当我启动应用程序并选择“培根”+“番茄”时,我可以看到使用dumpsys backup
. 所以我强制运行它(bgmr run
=> 待处理消失)并卸载应用程序。
当我恢复它时,logcat 告诉我“没有可用的恢复数据”,当然,设置没有显示正确的信息。
有什么想法我可能做错了吗?
android - 在 android 中有什么方法可以在卸载后保留 SharedPreferences
我将一些应用程序元数据保存在SharedPreferences
. 每当我卸载应用程序并重新安装它时,它们都会SharedPreferences
被删除。
有没有办法让它保留下来,这样如果用户卸载并重新安装,他们可以恢复他们的旧数据?