提交应用到f-droid
f-droid 是一个自由软件商店,最近在给我的开源应用KeepassA上传到f-droid
商店时遇到了不少问题。
一、注册gitlib
f-droid 地址:https://gitlab.com/fdroid/fdroiddata/-/tree/master
二、预编译
主要是用来验证metadata
配置文件是否正确。
Tip:F-Droid 提交应用,只需要将写好的metadata
文件合并到官方的仓库中便可,不需要提供apk包,由服务器根据配置文件编译apk
2.1 安装服务仓库(不推荐)
- brew 安装,该安装方式会缺少一些运行库
brew install fdroidserver
- 手动安装
clone fdroidserver安装需要的python环境git clone https://gitlab.com/fdroid/fdroidserver.git
export PATH="$PATH:$PWD/fdroidserver"然后执行命令pip install GitPython
pip install pyasn1
pip install pyasn1-modules
pip install PyYAML
pip install requests
pip install ruamel.yaml
pip install paramiko
pip install Pillowfdroid
,如果出现下面的帮助提示,表示fdroidserver
安装成功。
给gradlew-fdroid
设置权限
chmod +x gradlew-fdroid |
2.2 clone数据仓库
git clone https://gitlab.com/fdroid/fdroiddata.git |
编辑config.py
,配置一些必要的信息
wget -O https://gitlab.com/fdroid/fdroidserver/-/blob/master/examples/config.py |
配置keystor信息
keystorepass = "xxxx" |
配置sdk\ndk信息
sdk_path = "$ANDROID_HOME" |
进行初始化
chmod 0600 config.py |
2.3 配置metadata
cd fdroiddata |
输入以下内容,并进行配置
# F-Droid metadata template |
配置项说明:
https://f-droid.org/docs/Build_Metadata_Reference/
2.4 构建
fdroid readmeta |
当出现以下内容时,表示构建成功
2.5 提交
a、Fork fdroiddata
仓库
b、将本地的fdroiddata
上传到自己的gitlab的fdroiddata
仓库中
c、打开官方数据仓库,创建合并请求
然后根据类型,升级还是新增app,选择模版
Tip: 申请合并之前先在自己的仓库的CICD中看看能否正常打包,如果能正常编译,一般合并都能通过
三、常见问题
3.1 Build metadata git repo has uncommited changes!
参考地址:https://forum.f-droid.org/t/checkupdate-error-uncommited-changes/7116
解决:
增加--allow-dirty
参数
fdroid checkupdates 包名 --allow-dirty
3.2 VCS error while building app com.lyy.keepassa: Git checkout of ‘v1.1’ failed
解决:
检查{包名}.yml
文件中的commit
字段是否在git commit 中存在,一般填你需要打包的版本的git hash
在github上可直接复制。
3.3 Build Error: gradlew-fdroid no such file
参考地址:https://forum.f-droid.org/t/build-error-gradlew-fdroid-no-such-file/5601
解决:
1、clone git clone https://gitlab.com/fdroid/fdroiddata.git
2、将gradlew-fdroid
创建一个替身,并将提升拷贝到提示文件找不到的目录中
3、将替身的权限设置为
chmod +x gradlew-fdroid |
3.4 sha256sum: command not foun
参考地址:https://unix.stackexchange.com/questions/426837/no-sha256sum-in-macos
解决:
brew install coreutils |
然后添加环境变量
vim ~/.zshrc |
3.5 ERROR: Found unknown maven repo
如:阿里云的maven仓库,将其仓库改为https的
maven { |
这是使用了非公用仓库的问题,f-droid无法验证这些仓库中的软件是否是免费软件
解决:
修改gradle文件,将这些仓库屏蔽了
或修改../fdroidserver/fdroidserver/scanner.py
源码,在allowed_repos
中增加你的仓库地址
3.6 Found usual suspect ‘com.tencent.bugly’
原因是bugly是非自由软件
解决:
a、创建fdroid的渠道
b、使用spi机制将需要使用的非自由软件抽出来,只有非f-droid
渠道才动态加载那些非自由软件的库
c、grade 中使用{渠道}Implementation
的方式动态加载不同的渠道的库,如我这,只有debug
和release
才加载bugly的库,f-droid
渠道不加载这两个库
d、编辑包名.yml
配置文件,指定需要编译的渠道,也就是第一步中创建的渠道fdroid
,然后配置rm
模块,删除非自由软件的module
e、在代码中根据渠道名动态加载不同渠道的库
3.6 Unexpected version/version cod
检查包名.yml
中配置的版本名和版本号是否和app/build.gradle
中的一至。
注意,如果你使用的是渠道,检查渠道配置中是否添加了versionNameSuffix "-fdroid"
渠道后缀,如果有的话,包名.yml
的versionName也需要加上后缀名。
参考地址
https://gitlab.com/fdroid/fdroiddata/-/blob/master/CONTRIBUTING.md
https://f-droid.org/docs/Submitting_to_F-Droid_Quick_Start_Guide/
提交应用到f-droid