2012-04-03 13 views
1

ich bei android R.java behavior when a library project is addedandroid R.java Mapping Ressourcen Layouts, wenn ein Bibliotheksprojekt hinzugefügt wird

ich einige der Forschung auf meiner Frage war darauf bedacht, dass, wenn ein Bibliotheksprojekt zu jedem Android-Projekt hinzugefügt wird, gibt es zwei R. Java-Dateien erstellt.

project.R.java

public static final class layout { 
    public static int capture=0x7f030000; 
    public static int main=0x7f030001; 
} 

lib.R.java

public static final class layout { 
    public static final int add=0x7f030000; 
    public static final int capture=0x7f030001; 
    public static final int main=0x7f030002; 
} 

und das Projekt, das als Bibliothek gesetzt wurde hat seine eigene R.java die wie

sieht
public static final class layout { 
    public static int capture=0x7f030000; 
    public static int main=0x7f030001; 
} 

Die Beispielbibliothek hat nur eine Aktivität, die ich von meiner Anwendung aus starte und diese Aktivität legt das Layoutmain fest. Nun, wenn wir sehen, dass ID für "Haupt" in R.java ist in meiner Anwendung und im Bibliotheksprojekt anders. Ich habe versucht, den Wert von ID aus der Bibliothek zu drucken und geben 0x7f030002, das ist der Wert in meiner Anwendung R.java-Datei.

Jetzt hat meine Anwendung kein Hauptlayout und in der Bibliothek, wenn ich Inhalt ein Smain setze, seine Einstellung die main.xml vom Bibliotheksprojekt !! Wenn ich das Hauptlayout zu meinem Anwendungsprojekt hinzufüge, wird die lib dieses Haupt als ihr Layout festlegen !!

Ie die ID für Haupt wird von R.java meiner Anwendung genommen und diese ID unterscheidet sich von der ID für Haupt in der Bibliothek, aber das Layout ist korrekt aus der Bibliothek ausgewählt.

Wie ist das passiert Bitte helfen

meine app Aktivität:

import com.idg.test.lib.TestLibActivity; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class TestProjectActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.i("starting","oncraete main id "+ R.layout.main); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add); 
    startActivity(new Intent(this,TestLibActivity.class)); 

} 

}

lib Aktivität:

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class TestLibActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.i("Library","Library main id" +R.layout.main); 
    setContentView(R.layout.main); 
} 

}

+1

Ich glaube, ich habe das vorhin erlebt. Können Sie bitte angeben, was Sie in Ihren Unterricht importieren? –

+0

Ich habe die Importe zu meinem que hinzugefügt. Ich importiere keinen R.Java-Datei speziell – png

Antwort

7

Von: Android developer site

Wenn Sie eine Anwendung erstellen, die auf einem Bibliotheksprojekt abhängt, die SDK Tools, um die Bibliothek in eine temporäre JAR-Datei und verwendet sie in das Hauptprojekt zu kompilieren, dann verwendet das Ergebnis der erzeugen .apk. In den Fällen, in denen eine Ressource-ID sowohl in der Anwendung und die Bibliothek definiert ist, sicherzustellen, dass die Werkzeuge, die die in dem Antrag angegebene Ressource erhält Priorität und dass die Ressource in der Bibliothek Projekt nicht in die Anwendung APK zusammengestellt. Dies gibt Ihrer Anwendung die Flexibilität, Ressourcenverhalten oder Werte zu verwenden oder neu zu definieren, die in einer beliebigen Bibliothek definiert sind.

Hoffnung es beantwortet Ihre Frage

+0

Vielen Dank. Dies beantwortet meine Frage hier. Kannst du bitte in http://stackoverflow.com/questions/9924684/android-r-java-behavior-when-a-library-project-is-added/9924800#comment12750543_9924800 nachsehen. Hier bekomme ich wirklich eine andere aber verwandte Frage – png

+0

Also was ist die Lösung? – johnkarka

Verwandte Themen