tl; dr:Android開発の知識がなくても、F-Droidでランプを制御するためのトロイの木馬のないアプリをパッケージ化して出荷します。
私には政治的立場があり、ストールマンに同意する多くの点でFOSSの支持者です。よくあることですが、この立場は軽度のパラノイアによって補完されます。特にサードパーティのサーバーを介して実行される場合は、独自のアプリケーションを削除しようとしています。
また、Xiaomiサーバーを介して実行されるアプリケーションによって制御されるXiaomiYeelight「スマート」ランプもあります。ただし、ランプ内のLAN内で機能するAPIをオンにする機能があります。安心するために、GithubとGitlabでアプリを探しに行きました。今は、パラノイドコミュニティをサポートするためにF-Droidに宣伝するつもりです。
ビルドして確認する
アプリケーションがカタログに入るには、少なくともビルドし、友好的な方法で機能する必要があります。私の選択は貧弱であることが判明し、Gitlabで単一のアプリケーションが見つかりませんでした。利用可能なアプリケーションのうち、私は2つしか収集できず、最終的には1つだけが開始されました。私はAndroid向けの開発にはほど遠いです。数日で、Gradleを使用した単純なアセンブリのみを習得しました。これについて、さらに詳しく説明します。
必要なもの:git、Javaランタイム環境、Android SDK、Android Debugging Bridge、および新しいGradle。 Debian Testing用のJRE、ADB、およびgitは、パッケージからインストールできます
apt install git adb openjdk-11-jre-headless
。AndroidSDK
は通常AndroidStudioとともにインストールされますが、私は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は必要なすべての依存関係を解析してインストールします。必要なバージョンのAndroidSDK、アセンブリツールキット、およびその他のAndroid固有の依存関係のダウンロードはヘルプsdkmanager
を使用して行われるため、手動で行う必要はなく、事前にライセンスに同意する必要があります。
公式アプリでAPIを有効にする時が来ました。スマートフォンでUSBをデバッグし、コンピューターに接続して、生成されたデバッグパッケージをインストールします
adb install app/build/outputs/apk/debug/app-debug.apk
。お使いの携帯電話のポップアップウィンドウで、お使いのコンピューターからのデバッグを有効にすることを忘れないでください。電話のアプリケーションが生命の兆候を示している場合は、続行できます。
F-Droidでパッチを準備する
F-Droidには、アプリをカタログ化するためのルールがあります。基本は非常に単純です。フリーでないビルドの依存関係、プライバシーの問題、およびアプリケーション自体のフリーでない依存関係にフラグを立てる必要はありません。F-DroidにはCIと独自のビルドシステムがあるため、依存関係を自分で確認しませんでした。これにより、パイプラインを介してコミットを実行するだけで済みます。
それでは、F-Droidが開発されているGitLabに行きましょう。まず、アプリケーションでまだ誰も作業していないことを確認してください。このようなアクティビティは、パッケージ化リクエストとマージリクエストに集中しています。データリポジトリをフォークし、プロファイルからクローンを作成します。
アプリケーションをF-Droidに表示するには、1つのYMLファイルで十分です。
metadata/
リポジトリのサブディレクトリで適切なYMLファイルを見つけて、同じ形式でコピーしますapplicationId.yml
。applicationId
アプリケーションの値は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
NonFreeDep
Connectivity
Build
versionCode
build.gradle
UpdateCheckMode
およびAutoUpdateMode
(v%v
タグの形式を記述します)。
基本的なファイルチェックに
fdroid
は、F-Droid Serverリポジトリのユーティリティ、その依存関係、および変数が必要です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
最初の2つのコマンドは構文をチェックし、3番目のコマンドはアプリケーションをビルドします。出口にAPKが表示されます
unsigned/grmasa.com.open_light_1.apk
。
念のため、これを実行し
fdroid checkupdates grmasa.com.open_light
て更新を確認しfdroid rewritemeta grmasa.com.open_light
、ファイルにメタデータを正しく再入力してから、アセンブリを再確認できます。
ほぼハッピーエンド
これで、GitlabCIパイプラインをコミットしてチェックアウトできます。それは私にとってすべて終わりました!マージリクエスト
に記入して確認し、元のアプリの作成者に通知するように依頼しました。作者が2週間以上私を無視した場合、メタデータ内のリンクをフォークに書き換えるだけで、受け入れられます。 これで、特別なトロイの木馬の電話を邪魔にならないようにすることができます。そして、私は彼らとのLANを禁止することによってさえ、逆の方法でインターネットからそれらを制御する機会さえあります! 悲しいことに、タイトルのイラストにはいくつかの真実があります。2番目のステップでアプリケーションに不快なバグが見つかりました
ウィザード:検出されたランプのリストから、ほとんどの場合、選択したランプは追加されません。このため、ランプはメインリストにあります。この問題を回避するために、私はランプを1つずつアプリケーションに配置しました。うまくいけば、いつか私は問題が何であるかを理解するか、別のアプリケーションをパッケージ化するでしょう。