Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置

【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置

原创
作者头像
卓伊凡
发布于 2025-02-17 15:26:30
发布于 2025-02-17 15:26:30
27100
代码可运行
举报
文章被收录于专栏:java开发java开发
运行总次数:0
代码可运行

【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了

问题背景

很多人 在这步被难倒,这个世界上根本没有那么多程序员,卓伊凡最近救火一个项目找了不下40个“专业程序员”,其中有个大学生比较上进还能写一两个页面,能思考爱学习没问题,然后另外有一位兄弟也有能力(自己说是9年经验),其他的一言难尽,遇到有些连环境都安装3天的,还有配置打包配置一周的,还有很多不一一提了,我都不知道他们是怎么去做外包的,反正大部分人对gradle agp ndkVersion 完全一窍不通,感觉是混的,包括maven和他们的关系完全是昏的,直接开始吧,记录下也为我自己好用,目前救火项目里面6个同事只有2个人环境是好的,不过没关系只要我们爱学习求上进就没问题,给大家说某宝上找人搭建处理环境一般收费都是100-200一次,就下面这个很简单的过程,但是在卓伊凡做开发的过程中发现,这个世界上菜鸟比想象中要多。

打包方法

首先用android studio 打开 flutter 项目中的android目录

这个就是flutter中的android目录

然后打开

我刚拉的代码,进入后点击sync 分析就报错

A problem occurred evaluating settings ‘android’. flutter.sdk not set in local.properties. Expression: (flutterSdkPath != null). Values: flutterSdkPath = null

这个是个简单的额问题,就是flutter sdk的路劲未指定,毕竟每个同事电脑环境不同

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
flutter.sdk=D:\\soft\\flutter
sdk.dir=D\:\\soft\\Android\\sdk

修改 这个 local.properties 文件,

继续restart 运行

A problem occurred evaluating root project ‘android’.

Could not get unknown property ‘ndkVersion’ for object of type org.gradle.internal.extensibility.DefaultExtraPropertiesExtension.

报错

提示没有ndk ,

安装ndk,这里我们需要介绍下知识

ndkVersion 是 Android NDK(Native Development Kit)的版本号。以下是关于 ndkVersion 的详细解释:

  1. 什么是 NDK? NDK 是 Android 提供的一个工具集,用于开发使用 C/C++ 编写的本地代码(Native Code)。 它允许开发者将部分性能关键代码用 C/C++ 实现,并与 Java/Kotlin 代码结合使用。
  2. ndkVersion 的作用 ndkVersion 用于指定项目中使用的 NDK 版本。 在 build.gradle 文件中,通过 ndkVersion 可以明确告诉 Gradle 使用哪个版本的 NDK 进行编译。
  3. 为什么需要 ndkVersion? 如果你的项目使用了 NDK(例如,通过 Flutter 插件或直接使用 C/C++ 代码),则需要指定 NDK 版本。 如果不指定 ndkVersion,Gradle 会使用默认的 NDK 版本,但可能会导致兼容性问题。

进入 SDK Manager: 点击 File > Settings(Windows)或 Android Studio > Preferences(macOS)。 选择 Appearance & Behavior > System Settings > Android SDK。

等待下载安装

查看安装的版本

手动配置版本

在 local.properties 文件中添加 NDK 路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sdk.dir=D\:\\soft\\Android\\sdk
flutter.sdk=D\:\\soft\\flutter
ndk.dir=D\:\\soft\\Android\\sdk\\ndk\\28.0.13004108

然后在 build.gradle 中读取ndk,配置加入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
buildscript {
    def properties = new Properties()
    file("local.properties").withInputStream { properties.load(it) }
    ext {
        agp_version = '7.3.0'
        ndkVersion = properties.getProperty("ndk.dir")?.replace("ndk.dir=", "") // 确保正确获取 NDK 路径
    }
}

安装完成后 重新运行sync,正常 下载各种依赖

不过结果报错

Cannot locate tasks that match ‘:app:testClasses’ as task ‘testClasses’ not found in project ‘:app’.

根据错误信息,问题出在尝试执行 :app:testClasses 任务时,Gradle 找不到该任务。以下是解决步骤:

问题原因 testClasses 任务是 Java 或 Android 项目中用于编译测试类的任务。 如果你的项目中没有配置测试模块(例如 src/test 目录),Gradle 将无法找到该任务。

解决方法 检查项目结构: 确认项目中是否存在 src/test 目录。 如果没有测试模块,Gradle 不会生成 testClasses 任务。 添加测试模块: 如果项目需要测试模块,可以在 app 模块下创建 src/test 目录,并添加测试类。 移除对 testClasses 任务的引用: 如果项目不需要测试模块,可以移除对 testClasses 任务的调用。 检查构建脚本: 确保构建脚本中没有错误地引用 testClasses 任务。

这个明显是其他同事留下的,我们直接移除,然后解决

运行模拟器选择设备,结果这步又报错

Execution failed for task ‘:app:compileFlutterBuildDebug’.

Process ‘command ‘D:\soft\flutter\bin\flutter.bat’’ finished with non-zero exit value 1

据错误信息,flutter build 任务执行失败,通常是由于 Flutter 项目本身的问题或环境配置不正确导致的。

果然 在app 里面的gradle 配置不对, ndkVersion “28.0.13004108” // 确保与 local.properties 中的 NDK 版本一致 这个版本此前不对应,因此改了下如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
android {
    namespace "com.example.ff_flutter"
    ndkVersion "28.0.13004108" // 确保与 local.properties 中的 NDK 版本一致
    compileSdkVersion 34

    defaultConfig {
        applicationId "com.example.ff_flutter"
        minSdk 31
        targetSdk 34
        versionCode 1
        versionName "1.0"
    }
}

再次运行

打开终端

执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
flutter clean
flutter pub get

清空后再次运行,sync 本次没有报错了,不过还有新的报错

这个是flutter版本的问题因此我们运行

flutter doctor

看到版本不对,3.27.3本项目开发版本 是3.19.4

还报错

检查版本设置

检查gradle 版本设置,以及jdk路径设置

然后再运行继续报错

Cause: this and base files have different roots: G:\clone\ff-flutter\build\flutter_plugin_android_lifecycle and C:\Users\Administrator\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_plugin_android_lifecycle-2.0.19\android.

重新清除缓存 再下载依赖,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
flutter clean
 flutter pub get

继续报错

Could not find com.android.tools.build:gradle:7.6.3. Searched in the following locations: https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.6.3/gradle-7.6.3.pom https://repo.maven.apache.org/maven2/com/android/tools/build/gradle/7.6.3/gradle-7.6.3.p

其次我们改gradle版本为创建时候的版本7.6.3 ,执行

./gradlew sync

下载成功后继续运行,然后又报错 Could not find com.android.tools.build:gradle:7.6.3. Searched in the following locations: https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.6.3/gradle-7.6.3.pom https://repo.maven.apache.org/maven2/com/android/tools/build/gradle/7.6.3/gradle-7.6.3.p

卓伊凡怀疑是grdle 目录不对, 明明我在.gradle里面已经有了,这次在设置中改了grale路劲

对应了起来,时间 不够 等下再更新下。

继续报错,这次我们看grale 的 test 任务 这些 部分地方

运行后,并且执行 ./gradlew clean 来清楚gradle缓存尝试

Multiple build operations failed. Could not create task ‘:flutter_plugin_android_lifecycle:generateDebugUnitTestConfig’. Could not create task ‘:image_picker_android:generateDebugUnitTestConfig’. Could not create task ‘:path_provider_android:generateDebugUnitTestConfig’. Could not create task ‘:shared_preferences_android:generateDebugUnitTestConfig’. Could not create task ‘:url_launcher_android:generateDebugUnitTestConfig’. Could not create task ‘:video_player_android:generateDebugUnitTestConfig’. Could not create task ‘:flutter_plugin_android_lifecycle:generateDebugUnitTestConfig’. this and base files have different roots: G:\clone\ff-flutter\build\flutter_plugin_android_lifecycle and C:\Users\Administrator\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_plugin_android_lifecycle-2.0.19\android.

继续报错,尝试更换gradle 版本7.4 然后重新下载

distributionUrl=https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.4-bin.zip

最后成功下载7.4,但是运行 继续报错

  • What went wrong: Could not determine the dependencies of task ‘:flutter_plugin_android_lifecycle:test’.

Could not create task ‘:flutter_plugin_android_lifecycle:testDebugUnitTest’. this and base files have different roots: G:\clone\ff-flutter\build\flutter_plugin_android_lifecycle and C:\Users\Administrator\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_plugin_android_lifecycle-2.0.19\android.

这个意思就是插件flutter_plugin_android_lifecycle 的缓存地址 和实际地址不匹配,那么我们手动修正

,可以尝试手动将 flutter_plugin_android_lifecycle 插件的文件从缓存路径复制到项目本地路径,并在 settings.gradle 中重新配置路径。

把缓存路劲 C:\Users\Administrator\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_plugin_android_lifecycle-2.0.19\android 里面的内容 我复制到,

G:\clone\ff-flutter\build\flutter_plugin_android_lifecycle 本地路劲

修改 settings.gradle 文件 打开 settings.gradle 文件(位于 G:\clone\ff-flutter\android\settings.gradle)。

找到 flutter_plugin_android_lifecycle 插件的引用,通常是类似以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rootProject.name = 'flutter_plugin_android_lifecycle'
include ':flutter_plugin_android_lifecycle'
project(':flutter_plugin_android_lifecycle').projectDir = new File('G:/clone/ff-flutter/build/flutter_plugin_android_lifecycle')

重启,继续报错

Task ‘testClasses’ not found in project ‘:app’.

  • Try:

Run gradle tasks to get a list of available tasks. Run with —stacktrace option to get the stack trace. Run with —info or —debug option to get more log output. Run with —scan to get full insights.

这个报错是提示没有测试类, 手动添加 testClasses 任务 可以在 app 模块的 build.gradle 文件中手动添加 testClasses 任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
task testClasses {
    dependsOn compileTestJava // 或 compileTestKotlin
}

继续重新运行,然后报错

  • Where: Build file ‘G:\clone\ff-flutter\android\app\build.gradle’ line: 59
  • What went wrong: A problem occurred evaluating project ‘:app’.

Could not get unknown property ‘compileTestJava’ for task ‘:app:testClasses’ of type org.gradle.api.DefaultTask.

问题原因 缺少 Java 插件: 你的 build.gradle 文件中没有应用 java 插件,因此 Gradle 不会自动生成 compileTestJava 任务。 Kotlin 项目问题: 你的项目使用了 kotlin-android 插件,但 compileTestJava 是 Java 项目的任务,而不是 Kotlin 项目的任务。 测试任务未正确配置: 如果项目中没有 src/test 目录或测试依赖,Gradle 不会生成相关的测试任务。

本文报错要处理的问题还不够多,还会继续更新再加深理解,因此本篇为【01】篇,再出一个3篇 接着上面的报错。

通过本文可以更多深层的理解,插件之间的依赖关系,运行报错的各种原因,整体提升,对安卓环境搭建会有深刻一步的理解。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
FastCGI的认识与使用[通俗易懂]
通用网关接口(Common Gateway Interface、CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI独立于任何语言的,CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。Unix shell script、Python、Ruby、PHP、 perl、Tcl、 C/C++和 Visual Basic 都可以用来编写 CGI 程序。
全栈程序员站长
2022/09/14
3.2K0
FastCGI的认识与使用[通俗易懂]
Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
由于最近工作的需要,本人学习了一下利用高性能web server - Nginx,来发布C/C++编写的fastCGI程序,详细细节如下。
星哥玩云
2022/06/30
1.6K0
Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
什么是CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。 什么是FastCGI FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟 病的fork-and-execu
wangxl
2018/03/08
2.7K0
LNMP架构介绍、安装PHP(php-fpm)
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。
阿dai学长
2019/04/03
2K0
Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
由于最近工作的需要,本人学习了一下利用高性能web server - Nginx,来发布C/C++编写的fastCGI程序,详细细节如下。
后端技术探索
2018/08/09
2.2K0
CGI & FastCGI
  最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html。事物总是不 断发展,网站也越来越复杂,所以出现动态技术。但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给你,然后我接收你的处 理结果给客户端。那这个约定就是 common gateway interface,简称cgi。这个协议可以用vb,c,php,python 来实现。cgi只是接口协议,根本不是什么语言。下面图可以看到流程
WindWant
2020/09/11
1.6K0
PHP运行模式
PHP运行模式有4钟:http://blog.csdn.net/hguisu/article/detPHP
Java架构师必看
2020/10/26
2.3K0
SSRF漏洞之FastCGI利用篇「建议收藏」
SSRF–(Server-side Request Forge, 服务端请求伪造) 定义:由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务
全栈程序员站长
2022/09/14
2.3K0
SSRF漏洞之FastCGI利用篇「建议收藏」
Gentoo下安装Nginx+php
a 表示绑定的ip地址 p 表示端口号 f 表示fcgi的应用程序,在这里是制定php的cgi版本的程序 C 表示spawn的child的个数
EltonZheng
2021/01/22
4190
FastCGI 介绍
CGI 是Web 服务器运行时外部程序的规范, 按CGI 编写的程序可以扩展服务器功能。
全栈程序员站长
2022/09/08
7940
FastCGI 介绍
详解 Nginx 和 php-fpm 调用方式
PHP 项目使用 Nginx 时,一般通过 php-fpm Nginx+PHP-FPM 形式访问交互,本文将详细解读 Nginx 配置文件、PHP-FPM、PHP-CGI 和 fastCGI 的概念。
Yangsh888
2022/03/28
2.7K0
PHP-FPM && PHP-CGI && FASTCGI
早期的Web服务器,只能响应浏览器发来的HTTP静态资源的请求,并将存储在服务器中的静态资源返回给浏览器。随着Web技术的发展,逐渐出现了动态技术,但是Web服务器并不能够直接运行动态脚本,为了解决Web服务器与外部应用程序(CGI程序)之间数据互通,于是出现了CGI(Common Gateway Interface)通用网关接口。简单理解,可以认为CGI是Web服务器和运行在其上的应用程序进行“交流”的一种约定。
h0cksr
2023/05/17
7020
在Ubuntu安装nginx
(要最新版本下载下来编译吧) 装完应该能正常运行了。如果之前有装APACHE要改下端口。。。或者直接
公爵
2022/09/28
4950
Nginx工作原理、优化及启动监控项
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
菲宇
2019/06/12
9940
Nginx工作原理、优化及启动监控项
当面试官问你:nginx 如何解析php文件?
本来想着发布一篇什么样子技术文章,更有意义。考虑之后想起这么一个事情,上次一个伙伴突然问我 nginx 如何解析php 文件,我瞬间懵逼了~~~或许学艺不精、但是这个是知道的,只是当时就是一下子没有想起来,思考了半天才记起来是 php-fpm 。因此、今日选择nginx如何解析php文件分享给大家。
YP小站
2020/06/04
1.6K0
当面试官问你:nginx 如何解析php文件?
Nginx工作原理和优化总结。
NGINX以高性能的负载均衡器,缓存,和web服务器闻名,驱动了全球超过 40% 最繁忙的网站。在大多数场景下,默认的 NGINX 和 Linux 设置可以很好的工作,但要达到最佳性能,有些时候必须做些调整。首先我们先了解其工作原理。
黄规速
2022/04/14
1.2K0
Nginx工作原理和优化总结。
Nginx工作原理和优化、漏洞。
http://blog.csdn.net/hguisu/article/details/8930668 (排名100多bolg写的很好)
bear_fish
2018/09/20
2.6K0
Nginx工作原理和优化、漏洞。
什么是CGI、FastCGI、PHP-CGI、PHP-FPM
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
lukachen
2023/10/22
3400
PHP运行模式
CGI即通用网关接口(Common Gateway Interface),它是一段程序, 通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。 CGI已经是比较老的模式了,这几年都很少用了。
黄规速
2022/04/14
2K0
理解 Nginx 与 PHP-FPM 通信的工作机制
Browser请求http://xxx.com/aa.html -> Web Server(Nginx/Apache)分发 -> 找到aa.html文件返回给Browser。
NateHuang
2019/05/17
7050
相关推荐
FastCGI的认识与使用[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验