如何使用Ubuntu主仓库及宇宙源提供的自由许可Android SDK编译Flutter Android应用
如何使用Ubuntu主仓库及宇宙源提供的自由许可Android SDK编译Flutter Android应用
我完全懂你想用Ubuntu仓库里的自由许可Android SDK构建Flutter应用的想法——毕竟谁也不想碰那些带限制性EULA的组件对吧?结合你遇到的问题,我来一步步帮你搞定:
1. 补全缺失的SDK命令行工具
你看到flutter doctor提示缺少cmdline-tools组件,Ubuntu仓库里其实有对应的包可以安装,直接运行:
sudo apt install android-sdk-cmdline-tools
安装完成后,Flutter就能识别到必要的命令行工具了。
2. 跳过Google SDK许可证检查
咱们用的是Ubuntu编译的自由SDK,根本不存在Google那些专有许可证,所以flutter doctor --android-licenses肯定跑不通。这时候可以通过设置环境变量让Flutter跳过这一步检查:
# 临时生效,仅当前终端会话 export ANDROID_SDK_ROOT=/usr/lib/android-sdk export FLUTTER_ANDROID_LICENSES_ALREADY_ACCEPTED=1
如果想让设置永久生效,把上面两行加到你的~/.bashrc(或者~/.zshrc,取决于你用的shell)文件末尾,然后运行source ~/.bashrc刷新配置。
3. 修改Flutter项目配置,强制使用已安装的自由SDK版本
Flutter默认会尝试拉取高版本的SDK组件(比如你遇到的android-33、build-tools-30.0.3),但这些可能不是自由许可的。咱们得手动指定用你已经安装的SDK版本:
- 打开项目根目录下的
android/build.gradle,找到ext代码块,修改成你已安装的版本(比如你装了android-sdk-platform-28就用28;如果是23就改成23):ext { compileSdkVersion = 28 targetSdkVersion = 28 buildToolsVersion = "28.0.3" # 对应你安装的android-sdk-build-tools版本 } - 再打开
android/app/build.gradle,确保defaultConfig里的minSdkVersion不高于你的SDK版本(比如设为21就很稳妥):defaultConfig { // ... 其他配置 minSdkVersion 21 // ... 其他配置 }
4. 清理缓存并重新构建
先清理之前构建留下的缓存,避免冲突:
flutter clean
然后尝试构建debug版本(先验证没问题再打release):
flutter build apk --debug
至于你提到的F-Droid的Flutter应用,他们其实也是用类似的思路:自己维护自由编译的Flutter工具链和Android SDK,并且强制项目使用这些自由组件,跳过不必要的专有许可证检查,这样就能合规地构建出自由软件性质的Flutter应用了。
备注:内容来源于stack exchange,提问作者andrew-e
相关产品推荐
相关产品推荐

