Android Studio构建风格 - 如何以不同的风格获得相同的源文件

j2e*_*nue 14 android android-studio android-gradle-plugin android-flavors

我需要在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'
}
Run Code Online (Sandbox Code Playgroud)

这是我的项目结构的图像,我在其中创建了一个demo flavor目录:

在此输入图像描述

现在谈到这个问题.我有两个名为Hello.java的类.两者都有各自的风味和印刷不同的东西.我现在给你看两个文件:

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";

    };

}
Run Code Online (Sandbox Code Playgroud)

这是另一个你好:

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";

    };
}
Run Code Online (Sandbox Code Playgroud)

注意第一个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();

    }
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

从stackoverflow它说:

如果你想在两种口味中拥有相同类的不同版本,你需要在两种口味中创建它.

src/flavor1/java/com/foo/A.java

src/flavor2/java/com/foo/A.java
Run Code Online (Sandbox Code Playgroud)

然后你的代码src/main/java可以做:

import com.foo.A
Run Code Online (Sandbox Code Playgroud)

根据所选的风味,使用正确的版本com.foo.A.

这是我想用Hello类完成的

Moh*_*ani 12

我认为你不能在主要风味和其他风味上有同一类.你应该创建另一种味道,然后将你的Hello类从主味转移到新的味道.此规则仅适用于.java文件.我的意思是你可以在主要味道中有一个xml文件,在你的自定义味道中有另一个版本,但你不能用java文件做这个.

是一个有用的链接,有进一步的解释.