11 KiB
English | 简体中文
描述: 在电脑端利用F-Droid开放仓库部署和备份Android应用程序.
关键字: shell, android, fdroid, package-manager, deploy, backup, root, titanium-backup
功能
- 支持从F-Droid仓库下载和安装Android应用
- 支持从设备读取应用版本号并升级至最新
- 支持命令行补全
- 支持Android多用户
- 支持备份、还原应用
- 支持备份特定数据,如Android帐号信息、WiFi热点信息
- 支持增量备份,根据数据文件的时间戳来判断
- 支持为不同设备创建不同的配置文件
- 提供多种方式加密用户数据
- 会尝试针对不同Android版本修复兼容性问题
- 支持Android
4.0+
(API level 14+). 更老的版本应该也能运行, 但尚需要 更多测试
依赖
电脑端依赖的命令:
- bash >=4.0
- curl
- xmlstarlet
- sha1sum
- sha256sum
- tar
- gzip
- adb
- openssl (可选, 只有使用
--password
参数时才会用到)
Android设备端依赖的命令和操作:
- sha1sum
- find
- tar
- gzip
- gunzip (如果缺失, 可以安装 busybox)
- 开启调试模式
- 获取root权限, 可以执行
adb root
或su
命令可用 - 为临时目录保留充足的磁盘空间 (默认临时目录是
/data/local/tmp
, 也可 以通过参数--device-tmpdir
手动指定)
简易教程
# 下载deployidroid
wget https://gitea.com/fasheng/deployidroid/raw/branch/master/deployidroid
chmod +x deployidroid
# 为bash启用命令补全
source <(./deployidroid complete --bash)
# 下载F-Droid仓库 index.xml 文件
./deployidroid update
# 安装应用
./deployidroid install org.fdroid.fdroid com.nextcloud.client
# 升级应用
./deployidroid upgrade
# 备份应用
./deployidroid backup org.fdroid.fdroid com.nextcloud.client
# 还原应用
./deployidroid restore org.fdroid.fdroid com.nextcloud.client
# 部署nextcloud
./deployidroid deploy --profile example/deploy-nextcloud.sh
使用说明
-
开启命令补全
-
针对bash
source <(deployidroid complete --bash)
-
针对fish
source <(deployidroid complete --fish | psub)
-
-
更新F-Droid仓库
index.xml
文件deployidroid update
-
列出仓库中的应用
-
列出所有应用, 可以配合使用参数
--cat
,--desc
,--ver
来展现分类, 描述和可用的版本deployidroid list deployidroid list --cat --desc --ver
-
列出匹配关键字的应用, 关键字支持 awk 正则表达式. 并且如 果使用参数
--cat
,--desc
,--ver
, 也会在对应字段内进行搜索deployidroid list fdroid deployidroid list --cat --desc --ver fdroid
-
列出分类为System的应用
deployidroid list --cat System
-
列出指定ID的应用
deployidroid list --appid org.fdroid.fdroid org.fdroid.fdroid.privileged
-
列出指定仓库下的应用
deployidroid list --repo fdroid
-
显示应用的推荐版本号, 连接不同的设备显示结果可能会有所不同
deployidroid list --sug --appid org.fdroid.fdroid com.jereksel.libresubstratum
-
-
下载并安装应用
-
安装推荐的最新应用版本
deployidroid install org.fdroid.fdroid
-
安装推荐的最新应用版本, 包含非稳定版
deployidroid install --allow-unstable org.fdroid.fdroid
-
安装指定的版本
deployidroid install org.fdroid.fdroid=1007051
-
安装到指定用户
deployidroid adb list-users deployidroid install --user 0 --user 10 org.fdroid.fdroid
-
-
卸载应用
deployidroid uninstall --user cur org.fdroid.fdroid
-
更新应用
-
列出所有可更新的应用
deployidroid upgrade --list
-
更新所有应用
deployidroid upgrade
-
-
部署和清理
-
部署microg
deployidroid deploy --profile example/deploy-microg.sh deployidroid cleanup --profile example/deploy-microg.sh
-
部署nextcloud
deployidroid deploy --profile example/deploy-nextcloud.sh deployidroid cleanup --profile example/deploy-nextcloud.sh
-
无配置文件直接部署
deployidroid deploy 'org.fdroid.fdroid' 'user_10:com.nextcloud.client:allow_unstable=1' deployidroid cleanup 'org.fdroid.fdroid' 'user_10:com.nextcloud.client:allow_unstable=1'
-
备份并清理无用的三星服务
deployidroid backup --profile ./example/cleanup-samsung.sh deployidroid cleanup --profile ./example/cleanup-samsung.sh
-
-
备份和还原
-
首先确保root权限可以正常工作, 有两种办法来判断:
-
可以执行
su
命令adb shell su -c "id -u -r"
-
可以执行
adb root
adb root adb shell "id -u -r"
-
-
备份应用然后还原
deployidroid backup user_0:com.pkg1.name user_0:com.pkg2.name deployidroid restore --user cur user_0:com.pkg1.name user_0:com.pkg2.name
-
备份或还原时指定
appinfo.sh
文件deployidroid backup --options 'type=app+data' ./data/default/user_0/com.pkg.name/appinfo.sh deployidroid restore --options 'type=app+data' ./data/default/user_0/com.pkg.name/appinfo.sh
-
克隆应用到其他设备或用户, 会尝试创建用户, 但若创建失败需要提前创 建好用户
deployidroid backup user_cur:com.pkg.name deployidroid restore --user 10 --user 11 ./data/default/user_0/com.pkg.name/appinfo.sh deployidroid restore --user 10 --user 11 user_0:com.pkg.name
-
备份特定数据, 例如帐号信息和保存的WiFi信息
deployidroid backup @user.accounts @wifi
-
创建备份用的配置文件, 这样的话刷机会更加简单, 刷机后只需要执行一 遍还原操作
deployidroid new --3rd-app --3rd-data --freq-data --spec-data --profile test.sh deployidroid backup --profile test.sh deployidroid restore --profile test.sh
-
加密用户数据
-
使用
--password
参数可以设置压缩包密码, 如果设置为"-", 会让 用户在终端输入密码deployidroid backup --password - com.pkg.name deployidroid restore --password - com.pkg.name
-
使用encfs或类似的工具对文件夹进行全局加密
encfs .data data
-
-
-
如果同时连接多个Android设备, 可以使用环境变量
ANDROID_SERIAL
或--serial
参数来指定设备env ANDROID_SERIAL=xxxx deployidroid <commands> deployidroid --serial xxxx <commands>
deployidroid配置文件
可以通过编辑 ~/.config/deployidroid/config.sh
配置文件来自定义F-Droid
仓库源和其他的一些变量, 例如:
fdroid_opt_cache_dir="${HOME}/.cache/deployidroid"
fdroid_opt_download_cmd="wget -c '%s'"
adb_opt_device_tmpdir='/data/local/tmp'
repos=(
["fdroid"]="https://f-droid.org/repo"
["izzy"]="https://apt.izzysoft.de/fdroid/repo"
["retroarch"]="https://fdroid.libretro.com/repo"
["microg"]="https://microg.org/fdroid/repo"
["nethunter"]="https://store.nethunter.com/repo"
)
备份文件夹目录结构
├── profile.sh ├── app │ ├── com.pkg.name-1.0-10.apk └── data └── profile-name └── user_0 │ ├── com.pkg.name │ │ ├── com.pkg.name.tar.gz │ │ └── appinfo.sh │ └── @user.wallpaper │ ├── appinfo.sh │ └── @user.wallpaper.tar.gz └── user_system ├── @bluetooth │ ├── @bluetooth.tar.gz │ └── appinfo.sh └── @wifi ├── appinfo.sh └── @wifi.tar.gz
备份和还原用到的 profile.sh
文件示例
version='0.9.5'
# 配置名称
name='test'
# backup命令用到的一些变量
appdir='./app'
datadir='./data/test'
android_version='6.0.1'
android_api_level=23
users=(system 0)
system_apps=(
# spec system data
'@datausage' # 流量使用数据
'@bluetooth' # 蓝牙配对信息
'@wifi' # wifi连接信息
# system apps
'com.google.android.gms:type=app' # microG Services Core
)
user_apps=(
# spec user data
'@user.accounts' # 帐号
'@user.wallpaper' # 壁纸
# system apps data
'com.google.android.gms:type=data' # microG Services Core
# 3rd apps
'org.fdroid.fdroid:type=app+data' # F-Droid
)
部署和清理用到的 profile.sh
文件示例
version='0.9.5'
# 配置名称
name='test'
fdroid_repos=(
["fdroid"]="https://f-droid.org/repo"
["microg"]="https://microg.org/fdroid/repo"
)
fdroid_opt_allow_unstable=
users=(system 0)
system_apps=(
'com.google.android.gms:type=app;repo=microg;version_code=19420020;install_path=/system/priv-app' # microG Services Core
)
user_apps=(
'org.fdroid.fdroid:type=app+data;allow_unstable=1' # F-Droid
)
appinfo.sh
文件示例
id='org.fdroid.fdroid'
version_name='1.6'
version_code='1006050'
android_api_level='23' # android 6.0.1
is_system=''
is_encrypted=''
install_path='/vendor/app'
data_timestamp='1552435308'
执行测试
安装 bats 并执行:
make test
许可协议
GNU General Public License, Version 3.0+