5

I have this structure for my android project:

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  

I can compile the android app just fine using both eclipse and Android Studio. LibraryA imports the R file of LibraryB by doing " import com.LibraryB.R;" I also make use of com.LibraryB.R.layout.... type references in code and as long as I'm in the IDE things are fine.

I am trying to get things to build from the command line for our CI server and I have tried both ant and gradle and I end up getting the same build error in each.

LibraryA/example.java:10:error:cannot find symbol import com.LibraryB.R

I have even gone to the extent of publishing LibraryB as a local aar file and using it to build 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']
        }
    }
}

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')
    }
}

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')
    }
}

settings.gradle

include ':MyApp'
include ':LibraryA'  

I need to be able to access the resources of LibraryB from other library projects and the main app. I can't seem to figure out what I'm doing wrong. Any help would be great. Fyi, using the generated gradle scripts from eclipse give the same issue.

4

2 回答 2

6

您好,我有同样的问题,我的 android 库项目使用了另一个库(actionBarSherlock)。无法解析 import com.actionbarsherlock.R;当我将 gradle.build: apply plugin: 'android-library' 中的行更改为: apply plugin: 'android' 然后一切顺利。

但我需要它像图书馆一样。

此处的解决方案:解决方案是将包含库中的 R 文件生成到您的库中。而是导入 com.actionbarsherlock.R;使用导入 com.myprojectalsolibrary.R;

于 2013-12-03T09:45:07.330 回答
0

你试过包括

include ':LibraryB'

在你的 settings.gradle 中?

于 2013-10-04T18:44:35.010 回答