将应用程序打包为F-Droid





tl; dr:包装和运输没有Trojan的应用程序,无需任何Android开发知识即可在F-Droid中控制我的灯。



我有政治立场,在很多方面我都支持Stallman,因此我是FOSS的支持者。通常情况下,这种姿势还伴有轻度妄想症。我尝试摆脱专有应用程序,特别是如果它们通过第三方服务器运行。



我还有小米Yeelight“智能”灯,它们由通过小米服务器运行的应用程序控制。但是它可以打开灯内部局域网内的API为了放心,我一直在Github和Gitlab上寻找该应用程序,现在打算将其推广到F-Droid以支持我们的偏执狂社区。



建立并检查



为了使应用程序进入目录,它必须至少能够构建并以友好的方式工作。我的选择结果是微不足道的,并且在Gitlab上找不到一个应用程序。在可用的应用程序中,我只能收集两个,最后只有一个启动。我距离开发Android尚远,几天之内,我仅使用Gradle掌握了一个简单的程序集,我将对其进行进一步描述。



我们需要:git,Java运行时环境,Android SDK,Android调试桥和新鲜的Gradle。可以从package中安装用于Debian Testing的JRE,ADB和git apt install git adb openjdk-11-jre-headless



Android SDK通常与Android Studio一起安装,但是我使用了sdkmanager控制台实用程序



unzip commandlinetools-linux-6609375_latest.zip
export PATH=$PATH:$PWD/tools/bin/
mkdir android-sdk
export ANDROID_SDK_ROOT=$PWD/android-sdk/


如果您以为我错过了自己安装Android SDK的机会,那么您似乎就没有了。稍后再解释。Debian仓库包含一个烂版的Gradle,该版本不能使用,它也必须从站点安装



wget https://services.gradle.org/distributions/gradle-6.6.1-bin.zip
unzip gradle-6.6.1-bin.zip
export PATH=$PATH:$PWD/gradle-6.6.1/bin/


我将存储库分叉给自己,并清理了自动生成的垃圾。一切都是这样的:



yes | sdkmanager --licenses --sdk_root=$ANDROID_SDK_ROOT
git clone https://github.com/asz/OpenLight.git
cd OpenLight/
gradle wrapper
./gradlew assemble


通过第一个命令,我们批量接受sdkmanager非交互式安装所需的所有许可条款。自动生成包装器(gradle wrapper)时,Gradle将解析并安装所有必需的依赖项。可以通过help下载所需版本的Android SDK,组装工具包和其他特定于Android的依赖项sdkmanager,因此无需手动执行此操作,并且必须事先接受许可。



图片



现在是时候在官方应用程序中启用API了。打开您的智能手机的USB调试,将其连接到计算机并安装生成的调试包:adb install app/build/outputs/apk/debug/app-debug.apk。切记在手机的弹出窗口中从计算机启用调试。如果电话上的应用程序显示有生命迹象,则可以继续。



在F-Droid中准备补丁



F-Droid具有对应用程序进行分类的规则基础非常简单:不应标记非自由构建依赖项,隐私问题以及应用程序本身的任何非自由依赖项我自己没有检查依赖项,因为F-Droid有一个CI和它自己的构建系统,这使您可以简单地通过管道运行提交。



现在,我们去开发F-Droid的GitLab。首先,请确保检查没有人正在处理您的应用程序。这种活动集中在打包请求合并请求中分叉数据存储库,然后从您的个人资料中克隆它。



一个YML文件足以使应用程序出现在F-Droid中。在metadata/存储库的子目录找到任何合适的YML文件,并以相同的格式进行复制applicationId.ymlapplicationId您的应用程序的值可以从build.gradle它自己的某些存储库中获得,在我的情况下,可以从中获得app/build.gradle。我不记得我参考了哪个文件,我只会显示最终文件metadata/grmasa.com.open_light.yml 我很难选择特定的AntiFeature,但是并不需要详细的准确性适用于设备配套应用的类别。密钥描述了从哪个提交/标签构建应用程序。也可以在中找到。如果您不想手动更新应用程序,则可以填写



AntiFeatures:

- NonFreeDep

Categories:

- Connectivity

License: GPL-2.0-or-later

AuthorWebSite: https://github.com/grmasa

SourceCode: https://github.com/grmasa/Open_light

IssueTracker: https://github.com/grmasa/Open_light/issues

Changelog: https://github.com/grmasa/Open_light/tags



AutoName: Open Light

Summary: Control Xiaomi Yeelight WiFi smart bulbs

Description: |-

Control Xiaomi Yeelight smart bulbs within your Local Area Network.

Only fits WiFi controlled bulbs.



This app requires enabled LAN control for bulbs: open the official app, set up

all the bulbs, go to LAN control in the menu, and enable it for every device.



RepoType: git

Repo: https://github.com/grmasa/Open_light.git



Builds:

- versionName: 1.1.2

versionCode: 1

commit: v1.1.2

subdir: app

gradle:

- yes



AutoUpdateMode: Version v%v

UpdateCheckMode: Tags

CurrentVersion: 1.1.2

CurrentVersionCode: 1




NonFreeDepConnectivityBuildversionCodebuild.gradleUpdateCheckModeAutoUpdateModev%v描述标签的格式)。



对于基本文件检查,您需要F-Droid Serverfdroid存储库中的实用程序,其依赖项和变量ANDROID_HOME



git clone https://gitlab.com/fdroid/fdroidserver.git
export PATH=$PATH:$PWD/fdroidserver
apt -y install python3-git python3-pyasn1 python3-pyasn1-modules python3-yaml python3-requests
export ANDROID_HOME=$ANDROID_SDK_ROOT


您可以返回目录fdroiddata并检查元数据是否正常工作:



fdroid readmeta
fdroid lint grmasa.com.open_light
fdroid build -v -l grmasa.com.open_light


前两个命令检查语法,第三个命令构建应用程序。在出口处,你应该看到APK: unsigned/grmasa.com.open_light_1.apk



以防万一,您可以运行它fdroid checkupdates grmasa.com.open_light来检查更新并fdroid rewritemeta grmasa.com.open_light正确地用元数据填充文件,然后重新检查程序集。



快要结束了



现在,您可以提交并签出Gitlab CI管道。我来说一切都结束了



我填写了合并请求,并对其进行检查,并要求将原始应用通知作者。如果作者忽略我超过两个星期,我将简单地将元数据中的链接重写到我的fork,然后它将被接受。



图片



现在,我可以将我的特殊Trojan手机放到一边。我什至有机会以不正当的方式从Internet控制它们甚至禁止与它们一起使用LAN



不幸的是,标题中的插图有些道理。第二步在应用程序发现一个令人不愉快的错误向导:从检测到的灯列表中,通常不会添加我选择的灯。因此,灯具在主要列表中。要解决此问题,我将灯逐个放置在应用程序中。希望有一天我能找出问题所在,或打包另一个应用程序。










All Articles