[英]How to add transitive dependencies in Android Studio
背景
我的旧机器上有一个运行Android Studio 2.2.2和Gradle 2.1.4的项目。 我现在有一台装有最新或更高版本android studio(3.2)和gradle 4.3的新机器。
我最初的项目是使用compilesdkVersion 23并集成了GCM。 现在,我有一台新计算机,并希望将我的IDE和依赖项更新到最新版本,以便我可以集成FireBase并使用运行时权限。 我决定在一台新机器上进行所有这些操作,因为我的软件正在8000个设备上生产,并且不想破坏我的生产版本。
问题
我的新项目使用compileSdkVersion 28和buildToolsVersion '28 .0.0',但是出现以下构建错误:
Could not find com.android.support:mediarouter:28.0.0.
Searched in the following locations:
file:/C:/Users/MatthewW/AppData/Local/Android/Sdk/extras/m2repository/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.pom
file:/C:/Users/MatthewW/AppData/Local/Android/Sdk/extras/m2repository/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.jar
file:/C:/Users/MatthewW/AppData/Local/Android/Sdk/extras/google/m2repository/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.pom
file:/C:/Users/MatthewW/AppData/Local/Android/Sdk/extras/google/m2repository/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.jar
file:/C:/Users/MatthewW/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.pom
file:/C:/Users/MatthewW/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.jar
https://repo1.maven.org/maven2/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.pom
https://repo1.maven.org/maven2/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.jar
https://jcenter.bintray.com/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.pom
https://jcenter.bintray.com/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.jar
https://dl.google.com/dl/android/maven2/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/mediarouter/28.0.0/mediarouter-28.0.0.jar
Required by:
project :app
Please install the Android Support Repository from the Android SDK Manager.
Open Android SDK Manager
我已经安装了Android支持存储库
另外,在我的build.gradle文件中的依存关系中,appCompat 28.0.0用红色下划线标出。 当我将鼠标悬停在它上面时,它指出所有Android支持库必须使用完全相同的版本规范。 我已指定28.0.0,但已找到传递依赖项24.0.0(mediarouter),我确定还会有其他依赖项。
为了找到所有传递依赖,我在此帖子之后输入了cricket_007:
我无法发布输出,因为它超过了StackOverflow上的30000个字符限制,但是下面是一个例外,它显示mediarouter是v24。
Executing tasks: [androidDependencies]
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
The CompileOptions.bootClasspath property has been deprecated and is scheduled to be removed in Gradle 5.0. Please use the CompileOptions.bootstrapClasspath property instead.
:app:androidDependencies
debug
debugCompileClasspath - Dependencies for compilation
+--- C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\libs\activation.jar
+--- C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\libs\additionnal.jar
+--- C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\libs\core.jar
+--- C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\libs\mail.jar
+--- C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\libs\ndeftools-1.2.3.jar
+--- C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\libs\gcm.jar
+--- com.android.support:design:28.0.0@aar
+--- com.google.android.gms:play-services:9.8.0@aar
+--- com.google.android.gms:play-services-cast-framework:9.8.0@aar
+--- com.google.android.gms:play-services-cast:9.8.0@aar
+--- com.android.support:mediarouter-v7:24.0.0@aar
+--- com.android.support:appcompat-v7:28.0.0@aar
当我清理项目时,我得到以下信息(我不得不将屏幕一分为二,因为它们很小):
在上面的屏幕截图中,它指出:
org.gradle.tooling.BuildException: Failed to execute aapt
我读过,这可能与资源和长名称或名称中的特殊字符有关。
有谁对我如何能毫无错误地建立这个项目有任何想法?
[编辑1]这是我的build.gradle
> apply plugin: 'com.android.application'
>
> android {
> compileSdkVersion 28
> buildToolsVersion '28.0.0'
>
>
> useLibrary 'org.apache.http.legacy'
>
> lintOptions {
> checkReleaseBuilds false
> // Or, if you prefer, you can continue to check for errors in release builds,
> // but continue the build even when errors are found:
> abortOnError false
> }
>
> defaultConfig {
> applicationId "com.xxxx"
> minSdkVersion 16
> targetSdkVersion 28
> versionName "5.1"
> setProperty("archivesBaseName", "RR4v$versionName")
> }
>
> buildTypes {
> release {
> minifyEnabled true
> proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
> }
> } }
>
> dependencies {
> compile files('libs/activation.jar')
> compile files('libs/additionnal.jar')
> compile files('libs/core.jar')
> compile files('libs/mail.jar')
> compile files('libs/ndeftools-1.2.3.jar')
> compile files('libs/gcm.jar')
> compile 'com.android.support:appcompat-v7:28.0.0'
> compile 'com.google.android.gms:play-services:9.8.0'
> compile 'joda-time:joda-time:2.1'
> compile 'net.zetetic:android-database-sqlcipher:3.5.6@aar'
> compile 'com.android.support:support-v4:28.0.0'
> compile 'org.apache.directory.studio:org.apache.commons.io:2.4'
> compile 'com.android.support:design:28.0.0'
>
>
> }
[EDIT2]
dependencies {
compile files('libs/activation.jar')
compile files('libs/additionnal.jar')
compile files('libs/core.jar')
compile files('libs/mail.jar')
compile files('libs/ndeftools-1.2.3.jar')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.google.android.gms:play-services:9.8.0'
implementation 'joda-time:joda-time:2.1'
implementation 'net.zetetic:android-database-sqlcipher:3.5.6@aar'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'org.apache.directory.studio:org.apache.commons.io:2.4'
implementation 'com.android.support:design:28.0.0'
[EDIT3]
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3>gradlew clean :app:processDebugResources
> Configure project :app
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
The CompileOptions.bootClasspath property has been deprecated and is scheduled to be removed in Gradle 5.0. Please use the CompileOptions.bootstrapClasspath property instead.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\drop_down_list_row.xml:7: AAPT: error: '@+DropDownList/checkbox' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\drop_down_list_row.xml:12: AAPT: error: '@+DropDownList/SelectOption' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\messagerecipientlayout.xml:15: AAPT: error: '@+DropDownList/SelectBox' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\messagerecipientlayout.xml:25: AAPT: error: '@+DropDownList/create' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\pop_up_window.xml:9: AAPT: error: '@+DropDownList/dropDownList' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\drop_down_list_row.xml:7: error: '@+DropDownList/checkbox' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\drop_down_list_row.xml:12: error: '@+DropDownList/SelectOption' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\messagerecipientlayout.xml:15: error: '@+DropDownList/SelectBox' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\messagerecipientlayout.xml:25: error: '@+DropDownList/create' is incompatible with attribute id (attr) reference.
C:\Users\MatthewW\AndroidStudioProjects\nfcscanner3\app\src\main\res\layout\pop_up_window.xml:9: error: '@+DropDownList/dropDownList' is incompatible with attribute id (attr) reference.
error: failed linking file resources.
> Task :app:processDebugResources FAILED
获得最新版本是很好的。 只是有些担心。 在你的情况,红线意味着com.android.support:animated-vector-drawable和com.android.support:mediarouter-v7库都包含在com.android.support:appcompat-v7:28.0.0和您正在使用的某些第三方(使用不同版本)。 您需要排除旧的。 问题是如何确定要排除的库。 不难
我将以com.android.support:customtabs模块发生冲突的情况为例进行说明。
首先,我们需要使用命令列出依赖项:
./gradlew app:dependencies
您将看到如下图:
+--- io.reactivex:rxandroid:1.2.1
| \--- io.reactivex:rxjava:1.1.6
+--- io.reactivex:rxjava:1.1.0 -> 1.1.6
+--- com.github.mmin18:flexlayout:1.2.6
+--- com.android.support:customtabs:27.1.1
| +--- com.android.support:support-compat:27.1.1 (*)
| +--- com.android.support:support-annotations:27.1.1
| \--- com.android.support:support-core-ui:27.1.1 (*)
+--- com.microsoft.identity.client:msal:0.1.3
| +--- com.android.support:customtabs:25.3.1 -> 27.1.1 (*)
| \--- com.google.code.gson:gson:2.8.1
在此示例中,红线带有冲突的模块com.android.support:customtabs,因为com.android.support和com.microsoft.identity.client:msal:0.1.3都包含该模块。 因此,我们需要将其从Microsoft模块中排除。 只需在gradle中使用此配置:
implementation('com.microsoft.identity.client:msal:0.1.3') {
exclude group: 'com.android.support', module: 'customtabs'
}
然后,只需重建gradle即可解决与模块com.android.support:customtabs的冲突。 您可以对其他模块应用相同的步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.