Android Studio bauen Geschmacksrichtungen - How, um den gleichen Quell-Dateien in verschiedenen Geschmacksrichtungen
Brauche ich zum erstellen einer demo-Geschmack in android studio in einer app. In meinem app-Ebene gradle-Datei die ich erstellt habe, eine weitere Variante namens demo und die Standard-Geschmack voll natürlich. Es sieht wie folgt aus:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.uen229.myapplication"
minSdkVersion 17
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
demo {
applicationId "com.buildsystemexample.app.demo"
versionName "1.0-demo"
}
full {
applicationId "com.buildsystemexample.app.full"
versionName "1.0-full"
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
}
und hier ist ein Bild von meinem Projekt-Struktur, in der habe ich eine demo-Aroma-Verzeichnis:
Nun auf das Problem. Ich habe zwei Klassen genannt Hello.java. Sowohl in der jeweiligen Aromen und drucken verschiedene Dinge. Ich zeige Ihnen, beide Dateien jetzt:
import android.util.Log;
/** this is from demo flavor directory**/
public class Hello {
Hello(){
Log.v("","hello from demo");
}
public String getName();
return "im from demo";
};
}
Und hier ist die andere Hallo:
package com.example.uen229.myapplication;
import android.util.Log;
/** this is from full or main flavor directory**/
public class Hello {
Hello(){
Log.v("", "hello from main");
}
public String getName(){
return "im from main";
};
}
beachten Sie, wie die ersten hello.java nicht Paket, selbst wenn ich ein Paket von der IDE nicht kompilieren. betrachten Sie dieses Foto:
Nun endlich betrachten können mainActivity.java zu sehen, dass, wenn ich switch-build-Varianten es macht nur einen toast für "im vom main", aber ich brauche es zum Druck "im vom demo", wenn ich die demoDebug build-Variante. Wenn ich schalten Sie die build-Variante zu demoDebug es noch gibt "im vom main". kann mir jemand helfen :
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Hello h = new Hello();
Toast.makeText(this, h.getName(), Toast.LENGTH_LONG).show();
}
}
UPDATE
Vom stackoverflow es sagt:
Wenn Sie möchten, eine andere version der gleichen Klasse in den beiden
Geschmack, den Sie brauchen, um es zu schaffen in den beiden Geschmacksrichtungen.src/flavor1/java/com/foo/A.java src/flavor2/java/com/foo/A.java
Und dann Ihren code in
src/main/java
tun können:import com.foo.A
je nach Geschmack ausgewählt, die richtige version von
com.foo.A
ist
verwendet.
Dies ist, was ich erreichen wollen mit der Klasse Hello
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, man kann nicht gleiche Klasse in Haupt -, Geschmack-und Ihre anderen Geschmack. Sie sollten erstellen Sie einfach einen anderen Geschmack, dann bewegen Sie Ihre
Hello
Klasse aus Haupt-Geschmack auf die neue Geschmacksrichtung. diese Regel ist nur für .java-Dateien. Ich meine, Sie können eine xml-Datei in main-Geschmack und eine andere version in Ihre benutzerdefinierte Geschmack aber man kann es nicht mit java-Dateien.hier ist ein nützlicher link mit weiteren Erklärungen.
a
in der KlasseX
im Geschmackone
und Funktionb
in der KlasseX
im Geschmacktwo
, und Sie haben nur eine main Klasse in Haupt-Geschmack, können Sie nicht die Funktionen aufgerufen, denn wenn Sie als Gebäude-Geschmackone
gibt es keine Funktionb
- und Umgekehrt.Ich würde Beratung erstellen 3 Quelle sets:
und erklären Sie mit:
P. S. nicht wirklich sicher über die syntax von
java.srcDirs
Inhalte - überprüfen Sie bitte Sie sichWar ich in der Lage zu überschreiben Klassen sind aber der Schlüssel war nicht zu zählen die Klasse, in meinem main Ordner.
Also die fullDebug (d.h. Haupt-Ordner) build-Variante wird nie ausgeführt. Führen Sie immer eine Geschmack und nicht den main-Ordner. Der main-Ordner wird gerade verwendet werden, um gemeinsame Dinge.
In meinem Fall hatte ich eine demo für die USA und einem anderen Land (demo und demo_us)und ich brauchte zwei Geschmacksrichtungen. Ich werde immer zu bauen, für eines der beiden und wird nicht bauen main.
Aus der Abbildung kann man sehen, dass ich alle meine package-Namen die gleichen zu sein: wie
com.example.******.myapplication
. Da haben Sie alle den selben package-Namen in derMainActivity
Sie nur importierenHello.java
mit, die Paketnamen und es wird bei der Auswahl der richtigen Variante zur build-Zeit.Ressourcen wie es aussieht ist es anders und es wird überschreiben, natürlich, aber java-class-Dateien zu tun haben, auf diese Weise.