【问题标题】:Debugging The Release Build Type Without Generating a Signed APK在不生成签名 APK 的情况下调试发布构建类型
【发布时间】:2016-02-25 14:44:57
【问题描述】:

我有一个具有两种构建类型的项目设置:debug 和 release。

在我的应用模块中,我有三个不同的目录:debug、release 和 main。

我想要做的是测试release 目录中的代码,但我似乎可以这样做的唯一方法是生成一个签名的 apk 并将其加载到模拟器上。这意味着我无法正确调试它。

当我将 app 模块的构建变体更改为 release 时,“编辑配置”弹出窗口中出现以下错误。

错误:您当前选择的变体的 apk (app-release-unsigned.apk_ 未签名。请指定签名 此变体的配置(发布)。

我希望做的是在app 模块的build.gradle 文件中使用一个名为debugRelease 的构建变体扩展release 构建变体,然后它将继承release 目录中的代码,但我会能够从 IDE 中运行它。

我可能看错了,我很高兴听到任何其他技巧。

我可以做我想做的事吗?如果不是,最好的解决方案是什么?

【问题讨论】:

  • 不是字面意思。您寻求的语法要求 debug 是一种产品风格,并且 debug 已用于构建类型。
  • 那么我还剩下什么,将我的类从release 目录复制到另一个名为 debugRelease 或类似的目录中?
  • 恕我直言,release 中有重要的 Java 代码是一种代码异味。话虽如此,您可以设置第三种构建类型(例如fakerelease),在其中配置该构建类型以从release 提取其Java 代码、资源等,并使用debug 签名配置。 Gradle 足够灵活,您不需要复制实际代码。
  • 您认为更好的方法是在运行时检查是处于调试模式还是发布模式?
  • 更重要的是,我认为release 构建的功能应该几乎没有变化,并且没有足够的功能需要调试器。因此,例如,在自定义 Application 子类中添加几行代码以与 ACRA 或其他崩溃报告框架相关联是可以的,但您不需要为此使用调试器。

标签: android android-studio gradle


【解决方案1】:

经过大量研究,我决定继续我的 debugRelease 想法,它似乎运作良好。

我在app/src 下创建了一个名为debugRelease/java 的新目录。当我生成签名的 apk 或发布版本时,我在其中放置了我想要与众不同的任何代码。

这样做使我能够测试代码的工作原理并能够对其进行调试。当然,这并不经常发生,它只是崩溃报告和日志记录差异,但如果我需要修复错误或其他东西,我可以。

在我的build.gradle 文件中,我有以下设置。

buildTypes {
    release {

    }

    debug {

    }

    debugRelease {
        signingConfig signingConfigs.debug
    }
}

sourceSets { 
    debugRelease {
        res.srcDirs = ['src/debug/res'] // this uses the debug's res directory which contains a "debug" icon
    }

    release {
        java.srcDirs = ['src/debugRelease/java'] // this avoids copying across code from the debugRelease java directory
    }
}

所以现在当我想测试发布代码时,我只需将构建变体更改为debugRelease。

【讨论】:

    【解决方案2】:

    您可以构建应用的发布变体(例如使用您的生产环境),具有以下属性:

    • 已启用完整调试
    • 禁用 ProGuard 混淆和代码压缩
    • 使用发布证书禁用 APK 签名

    对您的 app/build.gradle 进行这些临时更改:

    /* ADD THIS BLOCK, IF NOT ALREADY THERE */
    lintOptions {
        // When you make a Release Build, the Android Lint tool will run to check many things.
        // It is set to abort the build on a single Lint error/warning. Disable this.
        abortOnError false
    }
    
    buildTypes {
        release {
            //minifyEnabled true   // <-- COMMENT OUT
            //proguardFiles ...    // <-- COMMENT OUT
            //shrinkResources true // <-- COMMENT OUT
            signingConfig signingConfigs.debug // <-- ADD THIS TO SIGN WITH YOUR DEBUG CERTIFICATE
            debuggable true     // <-- ADD THIS
            minifyEnabled false // <-- ADD THIS
        }
    }
    

    然后执行 Android Studio ➔ View ➔ Tool Windows ➔ Build Variants ➔ 选择 appRelease 或您的任何名称,然后按 Run 按钮构建并安装它。

    更多信息/相关文章:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2017-03-18
      • 2023-03-20
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      相关资源
      最近更新 更多