Проект библиотеки Android не может импортировать R-класс другого проекта библиотеки при использовании 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 

Я могу скомпилировать приложение для Android просто отлично, используя как eclipse, так и Android Studio. LibraryA импортирует R-файл библиотеки import com.LibraryB.R; делая « import com.LibraryB.R; » Я также использую com.LibraryB.R.layout.... ссылки в коде, и пока я в среде IDE, хорошо.

Я пытаюсь заставить вещи строить из командной строки для нашего CI-сервера, и я пробовал использовать ant и gradle, и в итоге я получаю одну и ту же ошибку сборки в каждом.

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

Я даже дошел до публикации 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'] } } } 

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' 

Мне нужно иметь доступ к ресурсам LibraryB из других проектов библиотеки и основного приложения. Я не могу понять, что я делаю неправильно. Любая помощь будет отличной. Fyi, используя сгенерированные скрипты градиента из eclipse, дает ту же проблему.

Привет, у меня была такая же проблема, мой проект библиотеки Android, использует другую библиотеку (actionBarSherlock). Он не может разрешить импорт com.actionbarsherlock.R; Когда я изменил строку в gradle.build: примените плагин: 'android-library', чтобы: применить плагин: 'android', тогда все будет хорошо.

Но мне нужно было иметь библиотеку.

РЕШЕНИЕ ЗДЕСЬ: Решение. Являются ли файлы R из включенной библиотеки сгенерированы в вашу библиотеку. Вместо этого импортируйте com.actionbarsherlock.R; Использовать импорт com.myprojectalsolibrary.R;

Вы пробовали в том числе

 include ':LibraryB' 

В ваших настройках.gradle?