使用gradle在命令行上编译时,Android Library项目无法导入另一个库项目的R类

Jer*_*ton 5 eclipse android gradle r.java-file build.gradle

我的android项目有这个结构:

ProjectDir  
settings.gradle  
MyApp(depends on LibraryA and LibraryB)  
-->build.gradle  
-->All the other android code  
LibraryA  (depends on LibraryB)  
-->build.gradle  
-->All the other android code  
LibraryB (Has lots of resources that are used in LibraryA and MyApp)  
-->build.gradle  
-->All the other android code  
Run Code Online (Sandbox Code Playgroud)

我可以使用eclipse和Android Studio编译Android应用程序.LibraryA通过执行" import com.LibraryB.R;"来导入LibraryB的R文件. 我也在com.LibraryB.R.layout....代码中使用类型引用,只要我在IDE中就可以了.

我正在尝试从我们的CI服务器的命令行构建内容,并且我已经尝试了ant和gradle,并且最终在每个中都获得了相同的构建错误.

LibraryA/example.java:10:error:cannot find symbol import com.LibraryB.R
Run Code Online (Sandbox Code Playgroud)

我甚至已经将LibraryB作为本地aar文件发布并使用它来构建LibraryA

LibraryB build.gradle

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

group = 'com.libraryb'
version = '1.0'

apply plugin: 'android-library'
apply plugin: 'maven'

uploadArchives {
        repositories {
                mavenDeployer {
                        repository url: 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
                }
        }
}

task install(dependsOn: uploadArchives)

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

LibraryA build.gradle

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.libraryb:LibraryB:1.0'
}

android {
    compileSdkVersion 17
    buildToolsVersion "18.0.1"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}
Run Code Online (Sandbox Code Playgroud)

MyApp build.gradle

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

group = 'com.myapp'
version = '1.0'

apply plugin: 'android-library'
apply plugin: 'maven'

uploadArchives {
        repositories {
                mavenDeployer {
                        repository url: 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
                }
        }
}

task install(dependsOn: uploadArchives)

repositories {
mavenLocal()
mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':LibraryA')
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}
Run Code Online (Sandbox Code Playgroud)

settings.gradle

include ':MyApp'
include ':LibraryA'  
Run Code Online (Sandbox Code Playgroud)

我需要能够从其他库项目和主应用程序访问LibraryB的资源.我似乎无法弄清楚我做错了什么.任何帮助都会很棒.Fyi,使用eclipse生成的gradle脚本给出了同样的问题.

use*_*154 7

你好我有同样的问题,我的android库项目,使用另一个库(actionBarSherlock).它无法解析导入com.actionbarsherlock.R; 当我在gradle.build中更改行时:将插件:'android-library'应用到:apply plugin:'android'然后就顺利了.

但我需要它就像一个图书馆.

解决方法:解决方案是否为库提供了包含库中的R文件.而是导入com.actionbarsherlock.R; 使用import com.myprojectalsolibrary.R;


Kar*_*ela 0

你有没有尝试过包括

include ':LibraryB'
Run Code Online (Sandbox Code Playgroud)

在你的settings.gradle 中?