android - 从代码中检测 App 是否为生产/发布版本

标签 android

我的应用程序中有一个自制的日志系统。它所做的事情之一是在开发过程中预先形成大量日志记录(到文件和 logcat),并且可以通过一个变量更改完全关闭。对于功能示例:

static public  final boolean DEVELOPMENT_VERBOSE = true;

public static void developmentLogMessage(String message) {
    if (DEVELOPMENT_VERBOSE)
        Log.i("com.xxx.app",  message);
}

我遇到的问题(也许更令人烦恼)是我必须记住为发布设置 DEVELOPMENT_VERBOSE = false。代码中是否有一种方法可以检测应用程序何时完成发布(例如检查已签名的 apk),以便我可以通过编程方式将 DEVELOPMENT_VERBOSE 设置为 false

我看了Detect if app was downloaded from Android Market但似乎我的应用程序甚至在为市场签名之前就有了签名。

try {
    PackageManager manager = context.getPackageManager(); 
    PackageInfo appInfo = manager.getPackageInfo(
                    "com.xxx.app", PackageManager.GET_SIGNATURES
        );

    System.out.println(appInfo.signatures[0].toCharsString());
} catch (NameNotFoundException e) {
}

我希望签名数组是空的,我可以输入它的键。但是不行。

最佳答案

您可以使用 ProGuard在构建版本时完全关闭适当的日志。 ProGuard 可以做很多有趣的事情。除其他外,它可以在构建过程中缩减不需要的代码。例如,如果您在开发期间使用调试日志 (Log.d()),但想在发布时禁用它,那么您可以将这些行添加到您的 proguard.cfg:

-assumenosideeffects class android.util.Log {
  public static int d(...);
}

要启用 ProGuard,请设置属性

proguard.config=proguard.cfg

到您的project.properties(如果您使用默认位置)。请注意,ProGuard 默认情况下还会做一些其他事情,因此您可能应该在发布项目时采取一些额外的步骤。至少您肯定希望保存生成的 mapping.txt 文件。参见 the ProGuard guide了解更多详情。

关于android - 从代码中检测 App 是否为生产/发布版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289000/

相关文章:

java - 自定义对象的 ListView 上出现不兼容类型错误

java - 纬度/经度查找器不工作

java - 如何获得按钮点击通知?

android - iOS 中用于渐进式 Web 应用程序的推送通知

android - 我无法将AppCompat-v7编译到我的Android Studio项目中

android - 如何知道 TextView 是否在动画中?

java - 在 Android 中初始化 Twitter API 时出现引导错误

android - 如果仅安装了面部作为生物特征,则使用 AndroidX.Biometric 的 KeyGeneration 会失败

android - Glide 显示错误 : Failed to find GeneratedAppGlideModule

Android AVD-修改API级别,改变APP View