Flutter报错:应用需SDK版本#33,当前为#29,如何解决安装失败?
解决Flutter应用INSTALL_FAILED_OLDER_SDK错误(SDK版本不匹配)
问题场景
我编写了用于读取手机短信的Flutter代码(main.dart):
import 'package:flutter/material.dart'; import 'package:flutter_sms_inbox/flutter_sms_inbox.dart'; import 'package:permission_handler/permission_handler.dart'; void main() { runApp(Main()); SmsQuery query = SmsQuery(); } class Main extends StatefulWidget { const Main({Key? key}) : super(key: key); @override State<Main> createState() => _MainState(); } class _MainState extends State<Main> { final SmsQuery _query = SmsQuery(); List<SmsMessage> _messages = []; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Container( padding: const EdgeInsets.all(10.0), child: ListView.builder( shrinkWrap: true, itemCount: _messages.length, itemBuilder: (BuildContext context, int i) { var message = _messages[i]; return ListTile( title: Text('${message.sender} [${message.date}]'), subtitle: Text('${message.body}'), ); }, ), ), floatingActionButton: FloatingActionButton( onPressed: () async { var permission = await Permission.sms.status; if (permission.isGranted) { final messages = await _query.querySms( kinds: [SmsQueryKind.inbox, SmsQueryKind.sent], // address: '+254712345789', count: 10, ); debugPrint('sms inbox messages: ${messages.length}'); setState(() => _messages = messages); } else { await Permission.sms.request(); } }, child: const Icon(Icons.refresh), ), ), ); } }
运行时控制台出现以下错误:
Launching lib\main.dart on Android SDK built for x86 in debug mode... lib\main.dart:1 Parameter format not correct - √ Built build\app\outputs\flutter-apk\app-debug.apk. Error: ADB exited with exit code 1 Performing Streamed Install adb: failed to install C:\Dosyalar\Yazilim\Flutter\Teen Message\teenmessage\build\app\outputs\flutter-apk\app.apk: Failure [INSTALL_FAILED_OLDER_SDK: Failed parse during installPackageLI: /data/app/vmdl61875986.tmp/base.apk (at Binary XML file line #7): Requires newer sdk version #33 (current version is #29)] Error launching application on Android SDK built for x86. Exited (sigterm)
错误提示应用要求SDK版本33,但当前Android模拟器的SDK版本为29,该如何解决?
解决方案
方法一:升级模拟器的SDK版本到33或更高
- 打开Android Studio的Device Manager(路径:Tools > Device Manager)
- 选中当前使用的模拟器,点击右侧的编辑图标(铅笔形状)
- 在弹出的配置窗口中切换到System Image选项卡,选择API Level 33(对应Android 13)或更高版本的系统镜像,点击Next
- 确认所有设置后点击Finish,等待镜像下载安装完成,重启模拟器后重新运行Flutter应用
方法二:降低项目的targetSdkVersion适配现有模拟器
- 打开项目中的
android/app/build.gradle文件 - 找到
defaultConfig代码块,修改targetSdkVersion为29(与模拟器SDK版本一致),同时将compileSdkVersion也调整为29:defaultConfig { applicationId "com.example.teenmessage" minSdkVersion 21 targetSdkVersion 29 // 修改此处为29 versionCode 1 versionName "1.0" } compileSdkVersion 29 // 同步修改此处为29 - 保存文件后,执行命令
flutter clean清理项目缓存,然后重新运行应用
额外提示
你的main函数中有一行冗余代码SmsQuery query = SmsQuery();,它在runApp(Main());之后且未被使用,可以删除以优化代码。
内容的提问来源于stack exchange,提问作者Emir Bolat
相关产品推荐
相关产品推荐

