添加Material Design库后Android项目无法启动,求助排查
问题描述
我想给EditText添加显示密码按钮,于是引入依赖 implementation 'com.google.android.material:material:1.13.0-alpha03',项目同步无报错,但在任何设备或模拟器上都无法加载应用。移除该依赖及activity_main.xml中的TextInputLayout代码后,项目可正常运行。我试过切换不同版本的Material依赖,排查错误并查阅相关问题,均未解决。
项目build.gradle代码
plugins { alias(libs.plugins.android.application) alias(libs.plugins.jetbrains.kotlin.android) } android { namespace 'com.hafee.learningproject' compileSdk 34 defaultConfig { applicationId "com.hafee.learningproject" minSdk 24 targetSdk 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion '1.5.1' } packaging { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } } dependencies { implementation 'com.google.android.material:material:1.13.0-alpha03' implementation libs.androidx.core.ktx implementation libs.androidx.lifecycle.runtime.ktx implementation libs.androidx.activity.compose implementation platform(libs.androidx.compose.bom) implementation libs.androidx.ui implementation libs.androidx.ui.graphics implementation libs.androidx.ui.tooling.preview implementation libs.androidx.material3 implementation libs.androidx.appcompat implementation libs.androidx.constraintlayout testImplementation libs.junit androidTestImplementation libs.androidx.junit androidTestImplementation libs.androidx.espresso.core androidTestImplementation platform(libs.androidx.compose.bom) androidTestImplementation libs.androidx.ui.test.junit4 debugImplementation libs.androidx.ui.tooling debugImplementation libs.androidx.ui.test.manifest }
activity_main.xml中的TextInputLayout代码
<!-- Password Edittext --> <com.google.android.material.textfield.TextInputLayout android:id="@+id/password_text" android:layout_width="0dp" android:layout_height="wrap_content" android:textColorHint="@color/white" android:layout_marginTop="8dp" android:background="@drawable/border_password" android:hint="Password" android:inputType="textVisiblePassword|textNoSuggestions" android:padding="7dp" app:layout_constraintStart_toStartOf="@+id/username_text" app:layout_constraintEnd_toEndOf="@+id/username_text" app:layout_constraintTop_toBottomOf="@+id/username_text" android:scrollbarSize="25dp"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="match_parent" android:textColor="@color/white" android:inputType="textPassword" android:background="@drawable/border_password" /> </com.google.android.material.textfield.TextInputLayout>
排查与解决步骤
1. 解决Material库与Compose的依赖冲突
你的项目同时混用了View系统(TextInputLayout)和Jetpack Compose,当前引入的com.google.android.material:material(alpha版)与已有的libs.androidx.material3存在版本冲突:
- 若坚持使用View系统的TextInputLayout,移除alpha版依赖,改用稳定版,比如
implementation 'com.google.android.material:material:1.12.0',同时确保该版本与libs.androidx.compose.bom的版本兼容(可在gradle/libs.versions.toml中查看BOM对应版本)。 - 若偏向Compose生态,可直接使用Material3的Compose组件实现密码输入框,无需额外引入View版Material库。
2. 修复布局代码的错误
布局存在3个核心问题,可能导致加载失败:
- 重复设置背景:TextInputLayout和内部的TextInputEditText都设置了
android:background,会引发绘制冲突,需移除TextInputEditText的background属性。 - inputType矛盾:TextInputLayout的
textVisiblePassword与内部EditText的textPassword冲突,仅保留EditText的android:inputType="textPassword"即可。 - 缺少密码切换按钮属性:要显示密码切换图标,需在TextInputLayout中添加
app:endIconMode="password_toggle",同时确保根布局已引入xmlns:app="http://schemas.android.com/apk/res-auto"命名空间。
修复后的布局代码:
<!-- 确保根布局添加命名空间:xmlns:app="http://schemas.android.com/apk/res-auto" --> <!-- Password Edittext --> <com.google.android.material.textfield.TextInputLayout android:id="@+id/password_text" android:layout_width="0dp" android:layout_height="wrap_content" android:textColorHint="@color/white" android:layout_marginTop="8dp" android:background="@drawable/border_password" android:hint="Password" android:padding="7dp" android:scrollbarSize="25dp" app:endIconMode="password_toggle" app:layout_constraintStart_toStartOf="@+id/username_text" app:layout_constraintEnd_toEndOf="@+id/username_text" app:layout_constraintTop_toBottomOf="@+id/username_text"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="match_parent" android:textColor="@color/white" android:inputType="textPassword" /> </com.google.android.material.textfield.TextInputLayout>
3. 清理项目缓存
- 执行
File > Invalidate Caches... > Invalidate and Restart,清除Android Studio缓存。 - 手动删除项目根目录的
.gradle和build文件夹,重新同步项目。
4. 统一依赖版本
打开gradle/libs.versions.toml文件,确保所有AndroidX依赖(如androidx.core.ktx、androidx.appcompat)的版本与Material库版本匹配,避免跨版本依赖冲突。
内容的提问来源于stack exchange,提问作者Hafee Imran
相关产品推荐
相关产品推荐

