在GitHub下载了一个Android Studio计算器项目,打开项目后出现一系列问题,本文简单记录出现的问题及解决方法。
1、Gradle安装目录的路径出现错误
问题描述:The specified Gradle installation directory 'G:\Android\Android Studio\gradle\gradle-2.14.1' does not exist.
解决方法:按照以下步骤更改Gradle安装目录的路径
打开您的Android Studio项目
点击File -> Settings -> Build, Execution, Deployment -> Gradle
在"Gradle home"字段中更改Gradle安装目录的路径,确保指向正确的目录。比如,如果Gradle的实际安装目录是"G:\Android\gradle\gradle-2.14.1",则需要更改路径为该目录。
点击"Apply"和"OK"按钮以保存更改。
在Android Studio项目中点击"Sync Project with Gradle Files"按钮以同步更改。
注:可按照以下步骤查找本地Gradle的实际安装目录
打开Android Studio
点击"File" -> "Settings" -> "Build, Execution, Deployment" -> "Gradle"。
在Gradle设置中,查看"Gradle home"字段中的路径。这是您当前Android Studio使用的Gradle版本的安装目录。
如果您已经安装了多个版本的Gradle,可以根据需要在Gradle设置中切换版本并查看每个版本的安装目录。在Windows操作系统中,Gradle的默认安装目录通常位于C:\Users\用户名.gradle\wrapper\dists目录中。
2、同步Gradle(点击"Sync Project with Gradle Files"按钮)后,出现连接超时错误。
问题描述:Cause: connect timed out。
在Android Studio中单击"Sync Project with Gradle Files"按钮时,Gradle将尝试下载所需的依赖项和插件。如果遇到“connect timed out”错误,则可能是Gradle无法连接到远程存储库或下载依赖项的连接超时。造成连接超时的原因可能有多种,一般是由于项目中使用的镜像源无法正常访问所引发的Gradle同步失败。
解决方法:更改项目中的镜像源,下面将镜像源更改为阿里的镜像源。
1.打开项目中的build.gradle文件,如下图
2.将build.gradle文件中的两个repositories{ }语句块内的内容更改为:
maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' } google()3.更改完Ctrl+S保存,再进行同步Gradle就可以连接成功了。
注:使用VPN(也就是科学上网)也会引发连接超时错误,解决这种情况比较麻烦。下面是一种解决方法:
使用VPN连接到互联网,可以在VPN连接的同时配置代理服务器来实现对Gradle的代理设置。
在VPN连接的同时配置代理服务器。在Android Studio中,可以通过打开"File" -> "Settings" -> "Appearance & Behavior" -> "System Settings" -> "HTTP Proxy"来配置Gradle的代理设置,并输入VPN连接的代理服务器地址和端口号。然后,可以按照通常的步骤进行Gradle同步操作。如果使用VPN连接到互联网,代理服务器设置可能会因VPN提供商和网络环境而异。如果您不确定代理服务器设置,请咨询您的VPN提供商或网络管理员。
3、项目使用的Gradle版本与Android Studio 2022.1不兼容。
问题描述:The project uses Gradle 2.14.1 which is incompatible with Android Studio 2022.1
项目使用的Gradle版本2.14.1与我使用的Android Studio版本2022.1不兼容。
关于版本兼容问题,需要考虑JDK、Gradle、Android Studio、gradleplugin(Gradle 插件) 这四者之间是否兼容。具体版本兼容可参考下面这篇文章:
http://t.csdn.cn/TnTiM
解决方法:在这个项目中,Gradle 7.5版本、Gradle 插件 7.4.2版本、Android Studio 2022.1版本、JDK
1.更改项目使用的Gradle版本为 7.5:打开gradle-wrapper.properties文件,将
distributionUrl=https\://services.gradle.org/distributions/gradle-版本号-bin.zip这行代码中的版本号改为7.5
2.更改项目Gradle 插件版本为7.4.2:打开项目中的build.gradle文件,将
classpath 'com.android.tools.build:gradle:版本号'这行代码中的版本号改为7.4.2
3.完成更改后保存,点击点击"Sync Project with Gradle Files"按钮进行同步Gradle,可能会比较缓慢,等待完成即可。
4、项目中使用了过时的Gradle语法 。
问题描述:Build file 'C:\Users\Administrator\Desktop\Calculator-master\app\build.gradle' line: 23 A problem occurred evaluating project ':app'. > Could not find method compile() for arguments [directory 'libs'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
解决方法:更改过时的语法
可以通过将
compile
改为implementation
来解决。在build.gradle
文件中找到出现问题的依赖声明,将其中的compile
改为implementation
即可,例如:// 旧语法
compile fileTree(dir: 'libs', include: ['*.jar'])
// 新语法
implementation fileTree(dir: 'libs', include: ['*.jar'])
5、项目使用了旧版的Android Support库 。
问题描述:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation 'com.android.support:appcompat-v7:24.2.1' testImplementation 'junit:junit:4.12' }Version 28 (intended for Android Pie and below) is the last version of the legacy support library, so we recommend that you migrate to AndroidX libraries when using Android Q and moving forward.
这个信息表明项目使用了旧版的Android Support库,推荐迁移到AndroidX库。AndroidX是Android支持库的重构版本,它提供了更清晰的包结构,更好的命名,更好的性能,同时还修复了许多bug和限制。
解决方法:
要迁移到AndroidX,需要使用Android Studio的迁移工具,具体步骤如下
- 确保你的项目使用了Android Studio 3.2或更高版本。
- 在Android Studio的菜单栏中,选择Refactor > Migrate to AndroidX。
- 确认所有库都是最新版本,然后点击Refactor。
Android Studio将自动修改你的项目文件,包括
build.gradle
、AndroidManifest.xml
和Java代码,以使用AndroidX库。你可能需要手动修改某些代码,因为某些库可能不是AndroidX的一部分。最后,编译并测试你的应用程序以确保它能够正常工作。
6、在合并 Android 清单文件AndroidManifest.xml时发生了冲突。
问题描述:
Manifest merger failed with multiple errors, see logs
"Manifest merger failed with multiple errors, see logs" 错误通常表示在合并 Android 清单文件时发生了冲突。
Task :app:processDebugMainManifest FAILED package="com.jupiter.calculator" found in source AndroidManifest.xml: C:\Users\Administrator\Desktop\Calculator-master\app\src\main\AndroidManifest.xml. Setting the namespace via a source AndroidManifest.xml's package attribute is deprecated. Please instead set the namespace (or testNamespace) in the module's build.gradle file, as described here: https://developer.android.com/studio/build/configure-app-module#set-namespace This migration can be done automatically using the AGP Upgrade Assistant, please refer to https://developer.android.com/studio/build/agp-upgrade-assistant for more information. [androidx.vectordrawable:vectordrawable-animated:1.0.0] C:\Users\Administrator\.gradle\caches\transforms-3\d58132105ab173fe617d3377fd03fd9b\transformed\vectordrawable-animated-1.0.0\AndroidManifest.xml Warning: Namespace 'androidx.vectordrawable' used in: androidx.vectordrawable:vectordrawable-animated:1.0.0, androidx.vectordrawable:vectordrawable:1.0.0. C:\Users\Administrator\Desktop\Calculator-master\app\src\main\AndroidManifest.xml:11:9-17:20 Error: android:exported needs to be explicitly specified for element <activity#com.jupiter.calculator.main_activity>. Apps targeting Android 12 and hig her are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. See https://developer.android.com/r/studio-ui/build/manifest-merger for more information about the manifest merger.
解决方法:
这个错误是由于 AndroidManifest.xml 文件中的问题引起的,其中需要解决以下两个问题:
Deprecated Warning: 包名设置在了 source AndroidManifest.xml 文件中的 package 属性中。需要在 module 的 build.gradle 文件中设置 namespace(或 testNamespace)来代替。建议使用 AGP Upgrade Assistant 自动完成迁移,具体信息可以参考 https://developer.android.com/studio/build/agp-upgrade-assistant 。
Error: 需要在组件定义了 intent filter 的情况下显式地指定 android:exported 属性的值,具体信息可以参考 https://developer.android.com/guide/topics/manifest/activity-element#exported 。针对这个问题,需要在 AndroidManifest.xml 文件中的相关 activity 标签中显式地添加 android:exported="true" 或 android:exported="false" 属性。
因此,你需要更新 AndroidManifest.xml 文件中相关的 activity 标签,并将 android:exported 属性设置为 true 或 false。另外,也需要在 module 的 build.gradle 文件中设置 namespace。最后重新运行 Gradle 任务即可。
上面这一堆做了两件事:
1.打开清单文件AndroidManifest.xml,将相关的 activity 标签的 android:exported 属性设置为 true 或 false。
2.打开module的build.gradle文件,在
applicationId "com.jupiter.calculator" 这行代码下面添加一行 namespace "com.jupiter.calculator"