deployidroid/README_cn.org

11 KiB
Raw Permalink Blame History

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 rootsu 命令可用
  • 为临时目录保留充足的磁盘空间 (默认临时目录是 /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

使用说明

  1. 开启命令补全

    • 针对bash

      source <(deployidroid complete --bash)
    • 针对fish

      source <(deployidroid complete --fish | psub)
  2. 更新F-Droid仓库 index.xml 文件

    deployidroid update
  3. 列出仓库中的应用

    • 列出所有应用, 可以配合使用参数 --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
  4. 下载并安装应用

    • 安装推荐的最新应用版本

      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
  5. 卸载应用

    deployidroid uninstall --user cur org.fdroid.fdroid
  6. 更新应用

    • 列出所有可更新的应用

      deployidroid upgrade --list
    • 更新所有应用

      deployidroid upgrade
  7. 部署和清理

    • 部署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
  8. 备份和还原

    1. 首先确保root权限可以正常工作, 有两种办法来判断:

      1. 可以执行 su 命令

        adb shell su -c "id -u -r"
      2. 可以执行 adb root

        adb root
        adb shell "id -u -r"
    2. 备份应用然后还原

      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
    3. 备份或还原时指定 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
    4. 克隆应用到其他设备或用户, 会尝试创建用户, 但若创建失败需要提前创 建好用户

      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
    5. 备份特定数据, 例如帐号信息和保存的WiFi信息

      deployidroid backup @user.accounts @wifi
    6. 创建备份用的配置文件, 这样的话刷机会更加简单, 刷机后只需要执行一 遍还原操作

      deployidroid new --3rd-app --3rd-data --freq-data --spec-data --profile test.sh
      deployidroid backup --profile test.sh
      deployidroid restore --profile test.sh
    7. 加密用户数据

      1. 使用 --password 参数可以设置压缩包密码, 如果设置为"-", 会让 用户在终端输入密码

        deployidroid backup --password - com.pkg.name
        deployidroid restore --password - com.pkg.name
      2. 使用encfs或类似的工具对文件夹进行全局加密

        encfs .data data
  9. 如果同时连接多个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+