You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:56:06