我从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的要求)
答案 0 :(得分:0)
最适合我的解决方案是:
使用 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,而无需进行任何配置。缺点是我不确定更新过程如何进行,我宁愿使用软件包管理器,但这是我发现的最简单的方法。