如何解决Flutter Doctor无法识别我的ANDROID_SDK环境变量
我从ubuntu的存储库中安装了android-sdk,但它不包含sdkmanager
可执行文件,并且当前版本不足以与flutter兼容,因此我从包含它的snapd中安装了包装器。根据{{3}},我必须更改我的ANDROID_SDK_ROOT
环境。变量,使其可以使用它。我还读到我需要将ANDROID_HOME
设置到目录(我认为它已被弃用,但以防万一),所以我将其放在我的.profile
中:
export ANDROID_SDK_ROOT=/snap/androidsdk/current/
export ANDROID_HOME=/snap/androidsdk/current/
然后我运行source .profile
并重新启动了机器,但是颤抖的医生不断给我这个错误:
[!] Android toolchain - develop for Android devices (Android SDK version 27.0.1)
✗ Flutter requires Android SDK 29 and the Android BuildTools 28.0.3
To update the Android SDK visit https://flutter.dev/docs/get-started/install/linux#android-setup for detailed instructions.
我知道它使用了错误的路径,因为当我运行flutter doctor --android-licenses
时会收到此错误:
Android sdkmanager tool not found (/usr/lib/android-sdk/tools/bin/sdkmanager).
这指向我使用apt安装的SDK的路径。我已经尝试过flutter config --android-sdk $PATH_TO_SDK
,但仍然没有任何改变。是否有包含sdk管理器的ppa,这样我就不必尝试配置flutter以使用捕捉的androidsdk,还是我缺少/做错了什么?
操作系统:Ubuntu 20.04
androidsdk(snapd)版本:30(我不希望使用此版本)
android-sdk(apt)版本:25.0.0(也低于flutter的要求)
解决方法
最适合我的解决方案是:
-
使用
function print(button) { lastChild = lastIndex(expression); //This makes the default change only if length is 1 if((expression[lastChild] === def || expression[lastChild] === def) && this.obj.innerHTML != oper.a && this.obj.innerHTML != oper.s && this.obj.innerHTML != oper.m && this.obj.innerHTML != oper.d && this.obj.id != 'decimal') { //Doesnt accept 0 at first number if(this.obj.innerHTML == def) { return; } expression[lastChild] = this.obj.innerHTML; history.innerHTML = this.obj.innerHTML; } //This makes the operator so that to avoid spamming operators else if((expression[lastChild] === oper.a || expression[lastChild] === oper.s || expression[lastChild] === oper.m || expression[lastChild] === oper.d) && button === 'oper') { expression[lastChild] = this.obj.innerHTML; history.innerHTML = expression.join(''); } //Default else{ //replaces the previous expression to 'Ans' if(isAns) { expression = []; expression.push('Ans'); history.innerHTML = 'Ans'; isAns = false; } if(button === 'num') { //handles error if(expression[lastChild] === undefined || expression[lastChild] === null || expression[lastChild] === 'Ans') { return; } let even_odd = expression.length % 2; let value = 0; //even means to add value if(even_odd === 1) { expression[lastChild] += this.obj.innerHTML; value = parseFloat(expression[lastChild].split(',').join('')); value = value.formattedNumber(); expression[lastChild] = value; history.innerHTML = expression.join(''); } //odd means to append another value on array else if(even_odd === 0) { expression.push(this.obj.innerHTML); history.innerHTML += this.obj.innerHTML; } }else if(button === 'oper') { if(expression[lastChild] === oper.a || expression[lastChild] === oper.s || expression[lastChild] === oper.m || expression[lastChild] === oper.d){ expression[lastchild] = this.obj.innerHTML; history.innerHTML = this.obj.innerHTML; }else{ expression.push(this.obj.innerHTML); history.innerHTML += this.obj.innerHTML; } } } } //more codes....
安装android-studio, -
在我的主目录中创建一个
snap install android-studio --classic
文件夹,然后使用android studio将所有需要的组件安装到该文件夹中,然后卸载android-studio。 -
运行
Android
,这会将flutter配置为使用主目录中新安装的Android-sdk。
这样做的好处是我能够安装仿真器和sdk,而无需进行任何配置。缺点是我不确定更新过程如何进行,我宁愿使用软件包管理器,但这是我发现的最简单的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。