在 Android Studio 中共享模块之间的外部依赖关系
Share external dependencies between modules in Android Studio
我正在尝试在 Android Studio 中的 2 个模块之间共享 2 个外部依赖项。
这两个依赖项是 Twitter Core 和 Twitter4j(我正在试验的 Twitter 库扩展)。
项目结构如下:
Root project 'cineios-test'
+--- Project ':app'
\--- Project ':cineio-broadcast-android-sdk'
我在我的应用 build.gradle 文件中设置了依赖项:
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
repositories {
maven { url 'https://maven.fabric.io/public' }
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.lgorse.cineios_test"
minSdkVersion 18
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions{
exclude 'META-INF/LICENSE.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile project(':cineio-broadcast-android-sdk')
//compile project(':cineio-broadcast-android')
//compile 'io.cine:cineio-broadcast-android-sdk:0.0.9'
compile ('org.twitter4j:twitter4j-stream:4.0.2'){
transitive = true;
}
compile('com.twitter.sdk.android:twitter:1.1.1@aar') {
transitive = true;
}
}
这是模块的 build.gradle 文件,即 cineios-android-sdk:
apply plugin: 'android-library'
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
// applicationId 'io.cine.android'
minSdkVersion 18
targetSdkVersion 19
versionCode 11
versionName '0.0.11'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile 'com.google.guava:guava:16.0'
compile 'com.loopj.android:android-async-http:1.4.5'
compile 'com.android.support:appcompat-v7:20.0.0'
compile 'com.android.support:support-v4:20.0.0'
}
最后是settings.gradle:
include ':app', ':cineio-broadcast-android-sdk'
project(':cineio-broadcast-android-sdk').projectDir = new File('cineio-broadcast-android/cineio-broadcast-android-sdk')
我知道 SO 上有答案,但他们提到将本地库添加为模块 - 但由于这些依赖项是远程的,我不确定如何使提示适应这种情况。
我确实尝试将依赖项添加到另一个模块 (cineios-android),但是 a) 像那样将它们加倍似乎很荒谬 b) 这意味着在 Twitter API,这可能会导致错误。
在您的 build.gradle 中添加依赖项,如下所示:
dependencies {
compile 'org.openimaj:twitter:1.3.1'
}
您也可以使用下面的 link 来获取更多参考:
Gradle Please
正确的方法确实是在主应用程序和模块中指定依赖项。
I did try adding the dependencies to the other module (cineios-android) but a) it seems ridiculous to double them up like that and
这真的没什么好笑的。不要认为它试图 "share" 主应用程序和模块之间的依赖关系。这样看:您的模块依赖于 Twitter4j 和 Twitter Core。如果您要在不同的应用程序中重用该模块,该模块应该是自包含的,并且应该能够指定自己的依赖项,而无需父项目设置它们。使其所有依赖项显式执行此操作。
如果父应用程序也依赖于 Twitter4j 和 Twitter Core,并且如果您使用 Maven Coordinate-style 远程依赖规范,构建系统将确保只有一个副本实际链接到应用程序中,所以一切都会好起来的。
b)that would imply registering a new app in the Twitter API, which will probably lead to errors.
我不熟悉它是如何工作的,所以除了说如果他们的 API 设计得很好,我不能评论它,希望只包含库不应该暗示类似那。如果您遇到问题,请澄清您的问题或提出新问题。
我正在尝试在 Android Studio 中的 2 个模块之间共享 2 个外部依赖项。 这两个依赖项是 Twitter Core 和 Twitter4j(我正在试验的 Twitter 库扩展)。
项目结构如下:
Root project 'cineios-test'
+--- Project ':app'
\--- Project ':cineio-broadcast-android-sdk'
我在我的应用 build.gradle 文件中设置了依赖项:
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
repositories {
maven { url 'https://maven.fabric.io/public' }
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.lgorse.cineios_test"
minSdkVersion 18
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions{
exclude 'META-INF/LICENSE.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile project(':cineio-broadcast-android-sdk')
//compile project(':cineio-broadcast-android')
//compile 'io.cine:cineio-broadcast-android-sdk:0.0.9'
compile ('org.twitter4j:twitter4j-stream:4.0.2'){
transitive = true;
}
compile('com.twitter.sdk.android:twitter:1.1.1@aar') {
transitive = true;
}
}
这是模块的 build.gradle 文件,即 cineios-android-sdk:
apply plugin: 'android-library'
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
// applicationId 'io.cine.android'
minSdkVersion 18
targetSdkVersion 19
versionCode 11
versionName '0.0.11'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile 'com.google.guava:guava:16.0'
compile 'com.loopj.android:android-async-http:1.4.5'
compile 'com.android.support:appcompat-v7:20.0.0'
compile 'com.android.support:support-v4:20.0.0'
}
最后是settings.gradle:
include ':app', ':cineio-broadcast-android-sdk'
project(':cineio-broadcast-android-sdk').projectDir = new File('cineio-broadcast-android/cineio-broadcast-android-sdk')
我知道 SO 上有答案,但他们提到将本地库添加为模块 - 但由于这些依赖项是远程的,我不确定如何使提示适应这种情况。
我确实尝试将依赖项添加到另一个模块 (cineios-android),但是 a) 像那样将它们加倍似乎很荒谬 b) 这意味着在 Twitter API,这可能会导致错误。
在您的 build.gradle 中添加依赖项,如下所示:
dependencies {
compile 'org.openimaj:twitter:1.3.1'
}
您也可以使用下面的 link 来获取更多参考: Gradle Please
正确的方法确实是在主应用程序和模块中指定依赖项。
I did try adding the dependencies to the other module (cineios-android) but a) it seems ridiculous to double them up like that and
这真的没什么好笑的。不要认为它试图 "share" 主应用程序和模块之间的依赖关系。这样看:您的模块依赖于 Twitter4j 和 Twitter Core。如果您要在不同的应用程序中重用该模块,该模块应该是自包含的,并且应该能够指定自己的依赖项,而无需父项目设置它们。使其所有依赖项显式执行此操作。
如果父应用程序也依赖于 Twitter4j 和 Twitter Core,并且如果您使用 Maven Coordinate-style 远程依赖规范,构建系统将确保只有一个副本实际链接到应用程序中,所以一切都会好起来的。
b)that would imply registering a new app in the Twitter API, which will probably lead to errors.
我不熟悉它是如何工作的,所以除了说如果他们的 API 设计得很好,我不能评论它,希望只包含库不应该暗示类似那。如果您遇到问题,请澄清您的问题或提出新问题。