Androidスタジオでアプリのデモフレーバーを作成する必要があります。私のアプリレベルのgradleファイルでは、demoと呼ばれる別のフレーバーと、もちろんフルのデフォルトフレーバーを作成しました。次のようになります。
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'
}
これは、デモフレーバーディレクトリを作成したプロジェクト構造の画像です。
今問題に。Hello.java という 2 つのクラスがあります。どちらもそれぞれのフレーバーにあり、異なるものを印刷します。両方のファイルを表示します。
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";
};
}
そして、これが他のHelloです:
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";
};
}
最初の hello.java にパッケージがないことに注意してください。パッケージがあったとしても、IDE はコンパイルしません。この写真を見てください:
最後に、mainActivity.java を見て、ビルド バリアントを切り替えると、"im from main" のトーストのみが表示されますが、demoDebug ビルド バリアントを使用する場合は、"im from demo" を出力する必要があることがわかります。バリアントを demoDebug にビルドしても、「im from main」と出力されます。
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();
}
}
アップデート
stackoverflow から次のように述べています。
2 つのフレーバーで同じクラスの異なるバージョンが必要な場合は、両方のフレーバーで作成する必要があります。
src/flavor1/java/com/foo/A.java src/flavor2/java/com/foo/A.java
そして、コードで次の
src/main/java
ことができます。import com.foo.A
選択したフレーバーに応じて、正しいバージョンの
com.foo.A
が使用されます。
これが Hello クラスで実現したいことです