我需要在 Android Studio 中为一个应用创建一个演示版本。在我的应用级别的 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'
}
以下是我创建了一个演示 flavor 目录的项目结构图片:
现在来看问题。 我有两个名为 Hello.java 的类。 它们分别位于它们各自的 flavor 中,打印不同的内容。 现在我将展示这两个文件:
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";
};
}
这里是另一个问候:
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文件,当我切换构建变体时,它只显示“来自主要”,但我需要它在使用demoDebug构建变体时打印“来自demo”。如果我将构建变体切换到demoDebug,它仍然会打印“来自主要”。有人能帮忙吗:
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上的说法:
如果您想在两个版本中拥有同一类的不同版本,则需要在两个版本中都创建它。
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类实现的目标。