2016-09-12 3 views
0

ich eine App A haben, die eine Bibliothek verwendet C-Bibliothek C eine Aktivität enthält, die eine Ressource aus der Bibliothek erfordert D.findViewById gibt null zurück, für das Layout in Abhängigkeit

Ich würde die Ressourcen von D erwarten in C gebündelt werden , aber erhalten Sie eine Null, wenn Sie innerhalb von C findViewById(R.id.resource_from_d) tun. Wie kann ich das zum Funktionieren bringen?

C hat nicht die Standardprojektstruktur, aber C enthält selbst keine Ressourcen. Und ich spezifizierte sourceSets { main { java.srcDirs = ['src'] }} in der build.gradle für C.

Ich habe auch proguard und minifyEnabled auf false gesetzt, um zu vermeiden, dass irgendwelche Ressourcen irrtümlich entfernt werden.

Ich habe auch versucht, transitive = wahr für alle transitiven Abhängigkeiten, aber kein Glück. Was kann ich tun, damit dies funktioniert?

Dies ist die build.gradle von C, die auf den Ressourcen von D. hängt

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 17 
    buildToolsVersion "23.0.2" 

    compileOptions.encoding = 'windows-1252' 

    defaultConfig { 
     minSdkVersion 17 
     targetSdkVersion 17 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
     } 
    } 

    lintOptions { 
     abortOnError false 
    } 

    sourceSets { 
     main { 
      java.srcDirs = ['src'] 
     } 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_6 
     targetCompatibility JavaVersion.VERSION_1_6 
    } 

    dexOptions { 
     preDexLibraries = false 
    } 
} 

dependencies { 
    compile project(':d') 
} 

Die Projektstruktur von C nicht der Standard ist, also, warum ich die sourceSets für die Quellen hinzugefügt. C enthält jedoch keine eigenen Ressourcen.

+0

haben Sie das Recht, den Import s R nutzen können 'R'? oder versuchte es direkt zu benutzen wie 'com.dpackage.R'? – lelloman

+0

Ich importiere das R von A nicht D. Das funktioniert beim Bauen mit Maven, nicht sicher, warum es nicht mit Gradle funktioniert. – barq

+0

hum ok ... Ich weiß nicht, warum es nicht funktioniert, aber es macht Sinn für mich, warum würdest du erwarten, D's IDs in A's R zu finden? – lelloman

Antwort

0

sollten Sie beide

import com.apackage.R; 

//... 

int aResource = R.id.resource_from_a; 
int dResource = com.dpackage.R.id.resource_from_d; 
Verwandte Themen