[英]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...
我尝试了很多解决方案但最终没有奏效解决方案是创建一个新的 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.