【问题标题】:Run modules independently with source dependencies in Android Studio (Intellij?)在 Android Studio (Intellij?) 中使用源依赖项独立运行模块
【发布时间】:2015-03-25 22:23:21
【问题描述】:

我正在使用 Android Studio,但这可能是一个通用的 Intellij 问题(我习惯于 Eclipse)。这似乎应该非常简单,但我无法弄清楚。

我希望能够在我的项目中独立运行任何一个模块,这是我对模块用途的理解。到目前为止,当我想从我的“testmodule”模块中的“app”模块调用代码时,这一直运行良好。在我尝试构建模块之前,Android Studio 让我可以毫无问题地导入我需要的代码。然后我得到预期的“找不到包”错误。然后我尝试在我的“testmodule”build.gradle 中添加它:

main.java.srcDirs '../app/src/main/java'

这会导致我的“app”模块中的两个包导入语句失败。其中一个失败的包是在我的“app”清单中定义的包,另一个是在我的“app”build.gradle 中指定的

sourceSets {
    main.java.srcDirs += '../../connectorAPI/trunk/src'
}

我还尝试让一个模块依赖于另一个模块,但根据我在堆栈溢出(以及模糊的 Android Studio 错误)中读到的内容,一个模块必须是库文件。这显然不起作用,因为我也希望能够运行。我很想只复制我需要的代码,但每次都需要在版本控制中进行更改,这是一场噩梦。

在 Eclipse 中,您所要做的就是右键单击并链接源代码。我无法想象这是不可能的,甚至是不寻常的,所以我一定错过了一些简单的东西......有人可以帮我吗?

build.gradle 测试模块

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.XXXXX.testmodule"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services:+'
}

build.gradle 应用程序

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "com.XX.XXX.XXX.XXX"
        minSdkVersion 15
        targetSdkVersion 19
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    packagingOptions {
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    sourceSets {
        main.java.srcDirs += '../../connectorAPI/trunk/src'
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:19.1.0'
    compile 'com.google.android.gms:play-services:+'
    // Add the ArcGIS Android 10.2.5 API
    compile 'com.esri.arcgis.android:arcgis-android:10.2.5'
    compile 'com.googlecode.json-simple:json-simple:1.1'
}

【问题讨论】:

  • review - developer.android.com/sdk/installing/… .如果您的模块是库类型,则将其定位在 ./libraries .. settings gradle -> include ':app', '':libraries:myLib' ./app /build.gradle.dependencies -> 编译项目(':libraries:myLib')
  • 这就是问题所在,我希望能够同时运行这两个模块,因此任何一个都不能成为库模块。
  • 好吧,尝试将两个模块定位在具有循环依赖关系的 AS 项目中“应用”级别的“下方”...
  • 据我所知,这就是我的设置方式。当我在 Windows 资源管理器上查看文件结构时,app 和 testmodule 模块都在项目文件夹下的同一层
  • 尝试删除“build.gradle”中的依赖项,并在相应的 android.manifest 中引用其他模块“main”。如果它不会建立,那么我猜你回到循环依赖,应该阅读 gradle.depencies

标签: java android intellij-idea android-studio


【解决方案1】:

我可能会迟到几年,但我会这样做:将两个模块声明为库,并创建另外两个作为应用程序。然后,您可以轻松导入这两个库,同时仍然拥有两个应用程序,如果这是您想要的。

至于会出现的重复依赖问题,可以分别在build.gradle中添加exclude语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多