今回の背景
Flutterで自作したアプリの Android Gradle Plugin (AGP) を最新のバージョンに更新しようと思い、7.x.x から 8.x.x にアップデートしました。すると、使用しているパッケージのsound_modeにて以下のエラーが発生し、アプリのビルドが通らなくなりました。
Namespace not specified. Specify a namespace in the module's build file:
自分のアプリ内でビルドエラーが発生している場合、通常は build.gradle に namespace を追加することで解決できます。しかし、今回のケースではパッケージ側のソースコードまで遡って修正する必要がありました。
android {
namespace 'com.example.myapplication'
}
sound_modeパッケージは、pub.devで確認したところ8ヶ月以上更新がされておらず、こちらの対応が行われていません。代替できそうなライブラリが無かったこともあり、今回はパッケージ側のソースコードを自分で修正しました。
この記事では、他パッケージでも応用可能な知見として手順をご紹介します。
パッケージ側のソースコードを修正する
まず、修正したいパッケージのGitHubリポジトリに移動し、forkします。1
次に、forkしたリポジトリをローカル環境にclone & 実行し、修正を行います。
(今回の場合は、android/build.gradleにnamespaceを追加しています)
変更をcommit & pushします。また、forkしたリポジトリのURLをコピーしておきます。
最後に、pubspec.yamlを以下のように置き換えます。urlには先ほどコピーしたGitHubのリポジトリのURLを貼り付けます。
- sound_mode: ^3.0.0
sound_mode:
git:
url: https://github.com/sakusaku3939/sound_mode.git
以上の手順により、自分でカスタマイズしたパッケージを使用することができるようになります。urlの下にrefを置くことで、対象のブランチ名やコミットIDを指定することも可能です。
また、forkした後の変更点はそのままプルリクエストとして投げる事が可能なので、余裕があればOSSのコントリビューターとしてぜひ貢献してみましょう。もし開発が放置されていてmergeが行われない場合でも、他のユーザーがプルリクエストのfork先URLをpubspec.yamlに指定して利用できるようになります。
あとがき
書きながら調べていたところ、今回のパッケージ側のnamespace問題はbuild.gradleに以下のコードを追加することで解決できたようです。。下調べが足りない
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group
}
}
}
}
}
-
git cloneをした後に自分のリポジトリに上げることでも同様に可能 ↩



