在学习有关在 Android Studio 中使用约束布局的教程时遇到问题。
在教程中使用了 android.support.constraint.ConstraintLayout 但现已弃用。 按照建议,我正在尝试过渡到 AndroidX。
这是项目级别的build.gradle.kts:
buildscript {
repositories {
google()
mavenCentral()
}
}
plugins {
// alias(libs.plugins.android.application) apply false
id("com.android.application") version "8.4.0" apply false
id("com.chaquo.python") version "15.0.1" apply false
id("com.android.library") version "7.3.1" apply false
}
这是模块级别的build.gradle.kts:
// alias(libs.plugins.android.application)
id("com.android.application")
id("com.chaquo.python")
}
android {
namespace = "com.example.pythontestwithjavafix"
defaultConfig {
applicationId = "com.example.pythontestwithjavafix"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
compileSdk = 34
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
ndk{
abiFilters += listOf("arm64-v8a","x86_64")
}
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding = true
}
}
chaquopy{
defaultConfig{
version = "3.10"
pip{
install("scipy")
install("requests==2.24.0")
}
}
}
dependencies {
implementation(libs.appcompat)
implementation(libs.material)
implementation(libs.constraintlayout)
implementation(libs.navigation.fragment)
implementation(libs.navigation.ui)
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
// implementation("com.android.support.constraint:constraint-layout:2.0.4")
implementation(libs.constraint.layout)
}
这是activity_main.xml:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#8E9CED"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:id="@+id/text"
android:textColor="#F8E115"
android:textSize="50dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
在我第一次构建尝试时发生此错误:
Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.13.0] AndroidManifest.xml:28:18-86
is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-25:19 to override
于是我执行了上面的建议,然后出现了新的错误:
/Users/me/AndroidStudioProjects/PythonTestWithJavaFix/app/src/main/AndroidManifest.xml:5:5-26:19 Error:
tools:replace specified at line:5 for attribute tools:android.appComponentFactory, but no new value specified
/Users/me/AndroidStudioProjects/PythonTestWithJavaFix/app/src/main/AndroidManifest.xml Error:
Validation failed, exiting
除了建议放弃教程中使用的 android.support.* 并转向我在 Activity_main.xml 中所做的 androidx 之外,搜索几乎没有发现什么。 有趣的是,我检查了项目树,仍然在 gradle/libs.versions.toml 中看到对 android.support.constraint.* 的引用,如下所示:
[libraries]
constraint-layout = { module = "com.android.support.constraint:constraint-layout", version.ref = "constraintLayoutVersion" }
这可能是问题所在吗? 如果是这样,请告诉我如何解决。 我没有看到很多关于 *.toml 文件的讨论,但我可能错过了它。 请指教。 TIA。 所以我不知道如何继续。