android - 从 gradle build 控制 list 元数据

标签 android gradle

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

list

<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) { ... }

最佳答案

这种切换很常见。您可以使用元标记和 list 合并来实现,但我认为大多数开发人员都为此目的使用 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 是自动生成的文件,将在每个构建变体组装任务中重新创建。

关于android - 从 gradle build 控制 list 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29555455/

相关文章:

Android - 当我的 Activity 即将抛出 OutOfMemory 异常时是否有任何回调?

gradle - Gradle中的参数化测试任务

jenkins - 根据输出使 Gradle 在 Exec 任务失败时构建暂停/失败

android - Android依赖性添加admob软件包的兼容性

java - Gradle构建未添加所有 “private”库

android - 在 Jetbrain IDE 中,如何在方法参数悬停时显示警告?

android - 如何在 Android 中测试 AlertDialog?

Android从设备sqlite到服务器的数据同步

android - 如何扩展 Android Universal Image Loader 以下载 2 个或更多文件?

java - Spring Boot 多模块测试