从gradle构建控制清单元数据

时间:2015-04-10 07:12:26

标签: android gradle

我需要构建两个版本的Android应用程序 - 一个用于测试人员(开发人员模式),另一个用于用户(开发人员模式关闭)。怎么做 ?现在我在清单中有元数据值,我在代码中使用它,但必须在make build之前手动更改此值。可以通过gradle改变这个吗?

清单

<meta-data android:name="developer.mode" android:value="true" />

public class App extends Application {

    public static boolean DEVELOPER_MODE = false;

    ...

    private void loadMetaData() {
        try {
            ApplicationInfo ai = ctx.getPackageManager().getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
            DEVELOPER_MODE = ai.metaData.getBoolean("developer.mode");
        } catch (PackageManager.NameNotFoundException e) {
        }
    }
}

...

if(App.DEVELOPER_MODE) { ... }

1 个答案:

答案 0 :(得分:2)

这种切换是常见的情况。您可以使用元标记和清单合并来实现,但我认为大多数开发人员都在使用BuildConfig来实现此目的。您可以使用自己的值扩展它:

buildTypes {
        debug {
            buildConfigField "boolean", "DEV_MODE", "true"
        }

        release {
            buildConfigField "boolean", "DEV_MODE", "false"
        }
}

或者检查android gradle插件已经提供的默认值。

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.stackoverflow.question.debug";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "flavor1";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "v1.0.1";
  // Fields from build type: debug
  public static final boolean DEV_MODE = true;
}

然后,您可以从应用程序java代码

中引用此值
if (BuildConfig.DEV_MODE) {
   // do developer things
}

BuildConfig是自动生成的文件,将在每个构建变量汇编任务上重新创建。