繁体   English   中英

如何使用 Android Studio 在发布模式下调试 Android 应用程序

[英]How to debug the Android App in release mode using Android studio

出于某种原因,我必须在发布模式下运行我的 Android 应用程序。我必须在运行应用程序时运行代码,就像我们在调试模式下使用的那样。 当我在发布模式下运行时,我的断点没有命中,我在清单中添加了android:debuggable="true" 断点仍然没有命中。 任何帮助。

提前致谢

在您的 gradle 文件中,您必须在发布风格中添加可调试功能。

buildTypes {
    release {
        debuggable true
        minifyEnabled false
        signingConfig signingConfigs.release
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
    debug {
        debuggable true
        minifyEnabled false
        applicationIdSuffix '.debug'
    } 
}

signingConfig是发布配置,必须在 android{} 块的 gradle 文件中添加,如下所示:

signingConfigs {
    release {
        keyAlias 'YourAppKey'
        keyPassword 'somePassword'
        storeFile file('appkeyfile.jks')
        storePassword 'somePassword'
    }
} 

就我而言,我已经创建了与以前版本构建相同的调试配置并开始调试。 这意味着您必须在构建 gradle 中也提供调试版本中的符号构建。

signingConfigs {
    config {
        keyAlias 'abc'
        keyPassword 'xyz'
        storeFile file('<<KEYSTORE-PATH>>.keystore')
        storePassword 'password'
    }
}
buildTypes {
  debug {
      debuggable true
      signingConfig signingConfigs.config
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

所以它将与发布版本具有相同的符号,您可以在它运行时进行调试。

 buildTypes {
    release {
    debuggable true
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}

快乐的编码。标记这个答案..如果它有帮助.. :)

新人只需几分钱。

如果即使在发布块中添加 debuggable true 之后,您的调试点也不会被命中。

从发布块中删除以下代码。

    minifyEnabled true 
    shrinkResources true //remove resources
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

没有“释放模式”。 您指的是构建类型,这意味着在构建过程中采取的步骤(如缩小等)。 设置android:debuggable="true"不会自动帮助,因为当您“运行”应用程序而不是“调试”时,您不会将调试器连接到它,因此它不会因特定原因而停止。

所以你可以设置你的调试版本以与发布相同的方式生成,但很不清楚你需要的原因是什么,我感觉你试图走错路(即调试通常不使用 ProGuard,而发布版本是并且 ProGuard 会更改生成的二进制文件,因此您从源代码中的断点无论如何都不会真正起作用)。

我认为Marcin 的上述论点是有道理的(就像在某些情况下需要调试发布版本一样),所以这里有一些对我有用的公认答案:

android {
    ...
    buildTypes {
        release {
            shrinkResources false # this was key
            minifyEnabled false # seems that it can't be set to true if shrinkResources is false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
}

改编自官方文档

笔记:

当我设置minifyEnabled true时,应用启动时发生以下崩溃:

java.lang.RuntimeException: Unable to instantiate application co.mycompany.app.MyApp: java.lang.ClassNotFoundException: Didn't find class "co.mycompany.app.MyApp" on path: DexPathList...

2022 年,或至少在我的情况下

我尝试了很多解决方案但最终没有奏效解决方案是创建一个新的 siginig 密钥并将其用于所有构建类型和变体。

脚步

1 - 转到 AndroidStudio 顶部菜单选择Build>Generate Signed Bundle /APK > (choose APK )

*第一次创建一个新密钥(你知道如何创建一个?或阅读文档

但请注意,在创建密钥时选择构建类型debug然后继续

2 - 再次转到 AndroidStudio 顶部菜单选择Build > Generate Signed Bundle /APK > (choose APK)但这次选择现有密钥(我们在上一步中创建的密钥)

在之前的步骤中我们选择构建类型debug这次选择release并继续..

3 - 使用AAB (发布和调试)重复步骤 1 和 2

这基本上是确保所有构建类型都使用相同的配置进行签名。

笔记

也许您需要将以下代码添加到app build.gradle

android {

    ...

    signingConfigs { <-- Add this
        config {
            storeFile file('PATH_TO_KEY.jks')
            storePassword 'YOUR PASSWORD'
            keyAlias 'YOUR KEY ALIAS'
            keyPassword 'YOUR PASSWORD'
        }
    }

   ... 


   buildTypes {

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.config <-- this
        }

        debug {
            signingConfig signingConfigs.config <-- this
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM