Projekt biblioteki Android nie może importować klasy R innego projektu biblioteki, gdy używasz stopniowania do kompilacji w wierszu poleceń
Mam tę strukturę dla mojego projektu na Androida:
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
Mogę dobrze skompilować aplikację na Androida, używając zarówno Eclipse, jak i Android Studio. LibraryA importuje plik R LibraryB, wykonując „import com.LibraryB.R;
„Korzystam również zcom.LibraryB.R.layout....
wpisz odwołania w kodzie i dopóki jestem w IDE, wszystko jest w porządku.
Próbuję zbudować rzeczy z linii poleceń dla naszego serwera CI i próbowałem zarówno ant, jak i gradle, i kończę się otrzymywaniem tego samego błędu kompilacji w każdym z nich.
LibraryA/example.java:10:error:cannot find symbol import com.LibraryB.R
Poszedłem nawet do opublikowania LibraryB jako lokalnego pliku aar i użycia go do zbudowania 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')
}
}
ustawienia.gradle
include ':MyApp'
include ':LibraryA'
Muszę mieć dostęp do zasobów LibraryB z innych projektów bibliotecznych i głównej aplikacji. Nie mogę zrozumieć, co robię źle. Każda pomoc byłaby świetna. Fyi, używając wygenerowanych skryptów gradle z eclipse, daje ten sam problem.