使用rsync通过USB自动复制备份

我一直在使用复制品三星SIII I9300两年多了。我以前写过使用rsync备份电话但最近我按如下所述自动化了我的设置。这项工作是由我的手机屏幕意外导致的,我注意到我没有进行定期备份。这次我没有丢失任何数据,因为通常我在设备上创建的所有内容都会立即同步到我的云。照片由ownCloud应用程序SMS备份+将短信和通话记录保存到IMAP服务器,我使用DAV阵列用于将联系人、日历和任务列表与我的实例同步ownCloud公司。尽管如此,我仍然坚信应该定期备份所有内容,所以现在是时候实现自动化了。

就我而言,只要我把手机连接到笔记本电脑上,就可以备份手机。我通常至少每隔一天把它连接到笔记本电脑上充电。我的笔记本电脑都在运行Debian公司,但这应该适用于大多数现代GNU/Linux系统。虽然您需要一个root电话,但这不是特定于复制副本的。我原以为自动化很简单,但我还是学会了systemd和udev在这个过程中,这花了一个晚上的大部分时间。

我开始添加一个udev规则和一个小脚本,以为可以从udev规律调用备份过程。然而,rsync在运行几秒钟后就会神奇地死亡。经过一段令人尴尬的长时间调试会话,最后我发现有人有类似的问题这让我对这个话题写了一篇很好的文章在udev事件上运行长时间运行的服务。我创建了一个文件/etc/udev/rules.d/99-android备份规则包含以下内容:

ACTION==“add”,SUBSYSTEMS==“usb”,ENV{ID_SERIAL_SHORT}==“323048a5ae82918b”,TAG+=“systemd”,ENV{systemd_WANTS}+=“android-backup@$ENV{ID_SERIAL_SHORTneneneep.service”ACTION==“add”,SUBSYSTEMS==“usb”,ENV{ID_SERIAL_SHORT}==“4df9e09c25e75f63”,TAG+=“systemd”,ENV{systemd_WANTS}+=“android-backup@$ENV{ID_SERIAL_SHORT{.service”

序列号对应于我要备份的两个设备的设备序列号。这个adb设备命令将为您打印它们,您需要用手机中的值替换我的值。接下来,我创建了一个systemd服务来描述一个oneshot服务。文件/etc/systemd/system等/android备份@.service具有以下内容:

【服务】类型=一次性ExecStart=/usr/local/sbin/android-backup%I

服务文件名中的at-sign(“@”)表示这是一个接受参数的服务。我还不够一个udev/systemd的人用适当的术语解释这两个文件,但至少你可以进行模式匹配并遵循它们的基本思想:udev规则匹配我感兴趣的设备(我不希望这种情况发生在我连接的所有随机安卓设备上,因此匹配已知的序列号),它会启动带有参数的systemd服务。systemd服务文件描述要运行的脚本,并传递参数。

现在是有趣的部分,脚本。我有/usr/local/sbin/android备份包含以下内容。

#!/垃圾桶/垃圾桶DIRBASE=/var/backups/androidexport ANDROID_SERIAL=“$1”exec 2>&1|记录器如果!test-d“$DIRBASE-$ANDROID_SERIAL”;然后echo“找不到目录:$DIRBASE-$ANDROID_SERIAL”出口1fi(菲涅耳)集合-xadb等待设备adb根adb等待设备adb shell printf“address 127.0.0.1\nuid=root\ngid=root\n[root]\n\tpath=/\n”\>/mnt/secure/rsyncd.confadb shell rsync--守护程序--no-detach--config=/mnt/secure/rsyncd.conf&adb转发tcp:6010 tcp:873睡眠2rsync-av--删除--排除/dev--排除/acct--排除/sys--排除/procrsync://localhost:6010/root/$DIRBASE-$ANDROID_系列/:rc$?adb转发--删除tcp:6010adb外壳rm-f/mnt/secure/rsyncd.conf

这个脚本需要更详细的解释。备份放在下面,例如。,/var/backups/android-323048a5ae82918b/用于以后的非现场备份(您确实会备份您的笔记本电脑,对吗?)。您必须手动创建此目录,这是一个安全措施,可以避免将数据大量rsync到不存在的目录中。该脚本使用syslog记录所有内容,因此运行tail-F/var/log/syslog&设置时。如果愿意,您可能希望减少rsync的冗长程度(替换rsync-自动同步具有rsync-a). 脚本运行adb等待设备你猜对了,它会等待设备稳定下来。下一步adb根调用以获取设备上的root用户(从系统读取所有文件自然需要root用户)。切换需要一些时间,因此需要另一个等待设备调用。接下来,在中创建一个小的rsyncd配置文件/mnt/secure/rsyncd.conf在电话里。该文件告诉rsync do listen on localhost,以root身份运行,并使用/作为路径。默认情况下,rsyncd是只读的,因此主机将无法通过rsync上传任何数据,只能读取数据。下一个rsync在电话上启动。这个adb转发command将笔记本电脑上的端口6010转发到手机上的端口873(873是默认的rsyncd端口)。不幸的是,设置TCP转发似乎需要一些时间,并且adb等待设备不会等待它完成,因此是一个丑陋的睡眠2此时。接下来是rsync调用本身,它只提取从电话到笔记本电脑的所有内容,不包括一些常见的疑点。有点神秘:rc$?只需将rsync进程的退出代码记录到syslog中。最后,我们清理TCP转发并删除临时创建的rsyncd.conf文件。

这个设置对我来说似乎很稳定。我可以插入手机,然后进行备份。我甚至可以同时插入两个设备,它们将同时运行。如果我拔下设备,脚本或rsync将出错,systemd将进行清理。

如果有人知道如何避免丑陋的临时性rsyncd.conf文件还是丑陋的睡眠2,我很感兴趣。如果不必执行“adb root”舞蹈,而是让手机在以某种方式连接到我的笔记本电脑时启动rsync守护进程,那也会很好。TCP转发在多用户系统上可能会很麻烦,但我的笔记本电脑不会。在电话上关闭rsync可能也是一个好主意。如果您有关于如何解决任何此问题、其他反馈或问题的想法,请告诉我!

I9300上的复制品4.2 0003

这个复制品项目释放版本4.2 0003最近。我一直在使用三星SIII(I9300)上的复制品大约14个月了。由于我之前在博客上提到了NFC和Wifi的问题,所以我想在升级到0003后更新状态。我很高兴报告我的NFC问题已在0003中解决(按照我建议的方式;恢复补丁)。我的Wifi的问题已在0003中进行了改进,我的合并请求已被接受。下面是对什么有效,什么无效的独立解释,作为我之前博客文章中讨论的类似内容的超集。

现成的功能:音频、电话、短信、数据(GSM/3G)、后置摄像头、NFC。2D Graphics与普通ROM相比有点慢,但我每天都在使用它,可以忍受,所以它不太麻烦。稳定性很好,与我习惯的其他Android设备类似。视频播放不起作用(由于非免费媒体解码器?),这对我来说不是一个严重的问题,但仍然可能是除自由问题外最大的悬而未决的问题。3D图形显然不起作用,我认为这是Firefox无法正常工作的原因(它崩溃了)。我在电话方面有一个恼人但奇怪的问题:当我打电话给一个人时,大约75%的时间我都会听到杂音。我仍然能听到对方在说什么,但几乎什么也听不懂。这只发生在3G上,所以我给对方打电话时的变通方法是先切换到2G,然后再切换回2G。我和很多其他人交谈过,从来没有和其他人有过这个问题,而且除了我之外,她和其他人交谈时也从来没有发生过。如果有人对如何调试这个问题有任何建议,我洗耳恭听。

我日常生活中需要用到的重要应用程序包括K9Mail(电子邮件)、DAVDroid(用于ownCloud CalDav/CardDAV)、CalDav同步适配器(用于Google日历)、对话(XMPP/Jabber聊天)、FDroid(适用于应用程序)、ownCloud(自动上传我的照片)、SMS Backup+、Xaber(不同的XMPP/Jabber帐户)、Yubico Authenticator、MuPDF和oandbackup。我发现其他几个有用的应用程序有AdAway(删除网络广告)、AndStatus、Calendar Widget、NewsBlur和ownCloud News Reader(RSS阅读器)、Facebook的Tinfoil、Twidere(我发现它的UI比AndStatus的好一些)和c:geo。

许多事情都需要非自由组件。正如我所讨论的在我开始使用复制品的第一次写作中我不喜欢这样,但我暂时接受了。可以通过添加非免费组件修复的问题列表包括前置摄像头、蓝牙、GPS和Wifi。刷新我构建的复制ROM映像后(使用精细构建指令),我正在使用以下脚本添加Cyanogenmod中丢失的非免费文件。

#下载Cyanogenmod 10.1.3(基于Android 4.2)二进制文件:#wget公司http://download.cyanogenmod.org/get/jenkins/42508/cm-10.1.3-i9300.zip#echo“073a464a9f5129c490502c77374495c38a25ba790c10e27f51b43845baeba6bf cm-10.1.3-i9300.zip”|sha256sum-c#解压缩cm-10.1.3-i9300.zipadb根重新挂载文件系统adb shell mkdir/system/供应商/固件adb外壳chmod 755/系统/供应商/固件#前置摄像头adb推送cm-10.1.3-i9300/system/vendor/firmware/fimc_is_fw.bin/system/svendor/firmware/fimac_is_fw.binadb推送cm-10.1.3-i9300/system/vendor/firmware/setfile.bin/system/fendor/firmware/setfile.binadb shell chmod 644/system/svendor/firmware/fimc_is_fw.bin/system/svendor/firmware/setfile.bin#蓝牙adb推送cm-10.1.3-i9300/system/bin/bcm4334.hcd/system/svendor/firmware/adb shell chmod 644/system/vendor/firmware/bcm4334*.hcd#全球定位系统adb推送cm-10.1.3-i9300/system/bin/gpsd/system-bin/gpsdadb外壳chmod 755/system/bin/gpsdadb推送cm-10.1.3-i9300/system/lib/hw/gps.exynos4.so/system-lib/hw.gps.exyons4.soadb推送cm-10.1.3-i9300/system/lib/libsecril-client.so/system/lib/libsecril-client.soadb shell chmod 644/system/lib/hw/gps.exynos4.so/system/lib/libsecril-client.so#无线网络adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdapsta.bin_b1/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdapsta.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdh_mfg.bin_b0/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdh_mfg.bin_b1/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdh_mfg.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdp2p.bin_b0/system/vendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdp2p.bin_b1/system/vendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdp2p.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhd_sta.bin_b0/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhd_sta.bin_b1/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhd_sta.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_mfg.txt/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_mfg.txt_murata/system/vendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_mfg.txt_murata_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_mfg.txt_semcosh/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_net.txt/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_net.txt_murata/system/vendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_net.txt_murata_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_net.txt_semcosh/system/svendor/firmware/

我希望这能帮助其他人切换到更好的手机环境!

S3上的Wifi和复制

我在用复制品在我的主手机上。正如我之前所写的,我没有使用Wifi前几天,#replicant中的leth指向一个CyanogenMod讨论关于类似问题。该修复确实有效,并允许我连接到wifi网络并设置手机以进行Internet共享。每次启动后,您需要运行以下命令,禁用/启用wifi,然后它就会正常工作。

echo murata>/data/.cid.infochown系统/data/.cid.infochgrp wifi/data/.cid.infochmod 0660/data/.cid.info

深入挖掘,我发现CM Jira关于它的问题,最终代码提交问题似乎是,最近的S3配备了Murata Wifi芯片组,该芯片组使用了Android 4.2(CM-10.1.3和Replicant-4.2)时代未知的MAC地址。引入macloader.cpp的最新补丁为我解决了这个问题,不需要使用上面的解决方法。我仍然需要加载从CM-10.1.3获得的非免费固件映像。我已经创建了一个拉请求,修复了Replicant 4.2的macloader.cpp如果其他人对细节感到好奇。你必须用补丁重新构建你的操作系统才能正常工作(如果你不想,使用/数据/.cid.info工作正常),并安装一些固件blob,如下所示。

adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdapsta.bin_b1/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdapsta.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdh_mfg.bin_b0/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdh_mfg.bin_b1/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdh_mfg.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdp2p.bin_b0/system/vendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdp2p.bin_b1/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhdp2p.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhd_sta.bin_b0/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhd_sta.bin_b1/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/bcmdhd_sta.bin_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_mfg.txt/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_mfg.txt_murata/system/vendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_mfg.txt_murata_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wii/nvram_mfg.txt_semcosh/system/vender/firmware/adb推送cm-10.1.3-i9300/system/etc/wii/nvram_net.txt/system/vender/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_net.txt_murata/system/vendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_net.txt_murata_b2/system/svendor/firmware/adb推送cm-10.1.3-i9300/system/etc/wifi/nvram_net.txt_semcosh/system/svendor/firmware/

复制品4.2 0002和I9300上的NFC

我在用复制品在我的三星SIII(i9300)手机上(请参阅我的早期的 帖子). 在我的假期里复制品项目释放版本4.2-0002作为他们最初4.2版本的一个小更新。我没有预料到任何重大差异,所以我遵循安装说明但不是“擦除数据/出厂重置”我选择了“擦除缓存分区”并重新启动。一切似乎都很好,但我很快发现NFC不起作用。使用亚行日志我可能会收到一些错误消息:

E/NFC-HCI(7022):HCI超时-引发异常-强制重新启动NFC服务F/libc(7022):0xdeadbaad(代码=1)处的致命信号11(SIGSEGV),线程7046(消息)I/DEBUG(1900):*********************************I/DEBUG(1900):构建指纹:“samsung/m0xx/m0:4.1.1/JRO03C/I9300XXDLIB:user/release-keys”I/DEBUG(1900):版本:“12”I/DEBUG(1900):pid:7022,tid:7046,名称:message>>>com.android.nfc<<<

手机会循环尝试启动NFC,并让NFC子系统一次又一次死亡。谈到#replicant频道,paulk很快意识到修复了错误。我必须重建映像才能正常工作,所以我花时间创建了一个基于Debian 7.5的新虚拟机,用于在其上构建副本。作为补充说明复制副本生成依赖项文档是因为我需要Debianxml林包来避免构建失败和Debianxsltproc程序包以避免在每次生成开始时打印错误消息。很快,我有了自己的新图像并安装了它们,在安装了非免费图像后,NFC又开始工作了利比亚镑544_法郎文件。

在此期间,我注意到有多个libpn544_fw.so代码到处都是文件。我有以下文件:

版本字符串 来源
libpn544_fw_C3_1_26_SP.so文件 互联网
libpn544_fw_C3_1_34_SP.so文件 2013年和2014年在瑞典购买的S3库存ROM(两部手机)
libpn544_fw_C3_1_39_SP.so文件 互联网

(供参考,这些文件的md5sum分别为682e50666effa919d557688c276edc48、b9364ba59de1947d4588f588229bae20和18b4e634d357849edbe139b04c939593。)

如果您没有这些文件中的任何一个可用作/vvendor/ffirmware/libpn544_fw.,则会收到以下错误消息:

I/NfcService(2488):启用NFCD/NFCJNI(2488):开始初始化E/NFC-HCI(2488):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soE/NFCJNI(2488):phLibNfc_Mgt_Initialize()返回0x00ff[NFCSTATUS_FAILED]E/NFC-HCI(2488):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFCJNI(2488):固件更新失败E/NFC-HCI(2488):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFCJNI(2488):固件更新失败E/NFC-HCI(2488):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFCJNI(2488):固件更新失败E/NFCJNI(2488):无法更新固件,放弃D/NFCJNI(2488):phLibNfc_Mgt_UnConfigureDriver()返回0x0000[NFCSTATUS_SUCCESS]D/NFCJNI(2488):正在终止客户端线程。。。W/NfcService(2488):启用NFC时出错

使用第一个(26)文件或最后一个(39)文件时,我的手机似乎无法正常工作,我收到以下错误消息。请注意,以“NFC功能”开头的行中有“Rev=34”,可能表示我需要版本34文件。

I/NfcService(5735):启用NFCD/NFCJNI(5735):开始初始化D/NFCJNI(5735):NFC能力:HAL=8150100,FW=b10122,HW=620003,型号=12,HCI=1,Full_FW=1,版本=34,FW更新信息=8D/NFCJNI(5735):下载新固件W/NFCJNI(5735):固件更新失败D/NFCJNI(5735):下载新固件W/NFCJNI(5735):固件更新失败D/NFCJNI(5735):下载新固件W/NFCJNI(5735):固件更新失败E/NFCJNI(5735):无法更新固件,放弃D/NFCJNI(5735):phLibNfc_Mgt_UnConfigureDriver()返回0x0000[NFCSTATUS_SUCCCESS]D/NFCJNI(5735):正在终止客户端线程。。。W/NfcService(5735):启用NFC时出错

装载34个工作正常。

I/NfcService(2501):启用NFCD/NFCJNI(2501):开始初始化D/NFCJNI(2501):NFC能力:HAL=8150100,FW=b10122,HW=620003,型号=12,HCI=1,Full_FW=1,版本=34,FW更新信息=0D/NFCJNI(2501):phLibNfc_SE_GetSecureElementList()D/NFCJNI(2501):D/NFCJNI(2501):>安全元件数量:1D/NFCJNI(2501):phLibNfc_SE_GetSecureElementList():检测到SMX,句柄=0xabcdefD/NFCJNI(2501):phLibNfc_SE_SetMode()返回0x000d[NFCSATUS_PPENDING]I/NFCJNI(2501):NFC已初始化D/NdefPushServer(2501):启动,线程=空D/NdefPushServer(2501):启动新的服务器线程D/NdefPushServer(2501):关于创建LLCP服务套接字D/NdefPushServer(2501):创建LLCP服务套接字D/NdefPushServer(2501):即将接受D/NfcService(2501):NFC-EE关闭D/NFC服务(2501):NFC-C开启

有趣的是,我的另一个运行CyanogenMod的S3没有libpn544_fw.so文件,但NFC仍然可以工作。这些消息包括:

I/NfcService(2619):启用NFCD/NFCJNI(2619):开始初始化E/NFC-HCI(2619):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFC(2619):固件映像不可用:此设备可能正在运行旧的NFC固件!D/NFCJNI(2619):NFC能力:HAL=8150100,FW=b10122,HW=620003,型号=12,HCI=1,Full_FW=1,版本=34,FW更新信息=0D/NFCJNI(2619):phLibNfc_SE_GetSecureElementList()D/NFCJNI(2619):D/NFCJNI(2619):>安全元件数量:1D/NFCJNI(2619):phLibNfc_SE_GetSecureElementList():检测到SMX,句柄=0xabcdefD/NFCJNI(2619):phLibNfc_SE_SetMode()返回0x000d[NFCSTATUS_PENDING]I/NFCJNI(2619):NFC已初始化D/NdefPushServer(2619):启动,线程=空D/NdefPushServer(2619):启动新的服务器线程D/NdefPushServer(2619):关于创建LLCP服务套接字D/NdefPushServer(2619):创建的LLCP服务套接字D/NdefPushServer(2619):即将接受D/NfcService(2619):NFC-EE关闭D/NFC服务(2619):NFC-C开启

复制品之间的两个NFC相关存储库的差异(外部libnfc-nxp软件包_apps_nfc)和氰化Mod(android外部libnfc-nxpandroid软件包_apps_Nfc)我找到了复制副本中的提交这将丢失固件上的软故障更改为硬故障。我在构建树中手动恢复了那个补丁,重新构建并启动了一个新的映像。现在启用NFC会在我的复制手机上打印此内容:

I/NfcService(2508):启用NFCD/NFCJNI(2508):开始初始化E/NFC-HCI(2508):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFC(2508):固件映像不可用:此设备可能正在运行旧的NFC固件!D/NFCJNI(2508):NFC能力:HAL=8150100,FW=b10122,HW=620003,型号=12,HCI=1,Full_FW=1,版本=34,FW更新信息=0D/NFCJNI(2508):phLibNfc_SE_GetSecureElementList()D/NFCJNI(2508):D/NFCJNI(2508):>安全元件数量:1D/NFCJNI(2508):phLibNfc_SE_GetSecureElementList():检测到SMX,句柄=0xabcdefD/NFCJNI(2508):phLibNfc_SE_SetMode()返回0x000d[NFCSTATUS_PENDING]I/NFCJNI(2508):NFC已初始化D/NdefPushServer(2508):启动,线程=空D/NdefPushServer(2508):启动新的服务器线程D/NdefPushServer(2508):关于创建LLCP服务套接字D/NdefPushServer(2508):创建LLCP服务套接字D/NdefPushServer(2508):即将接受D/NfcService(2508):NFC-EE关闭D/NFC服务(2508):NFC-C开启

NFC很管用!至少YubiKey近地天体使用Yubico Authenticator应用程序.在我的手机上少了一个非免费的blob。

我反复检查过,手机的电源循环(甚至暂时卸下电池)不会影响任何事情,所以看起来NFC芯片的固件是从工厂加载的。

问题仍然是为什么添加了该承诺。有必要用其他电话吗?我不知道,除了恢复补丁外,S3所有者将在不添加非免费软件的情况下使用Replicant进行NFC工作。或者,让补丁只适用于需要的平台,甚至适用于所有非S3构建。