自学内容网 自学内容网

问题系列---Android Studio调试services源码不显示参数值

戳蓝字“牛晓伟”关注我哦!

用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章,技术文章也可以有温度。

前言

问题系列主要的作用是把我在研究Android源码过程中遇到的各种问题集合起来,当然这些问题在Stack Overflowgoogle是没有搜到解决方案的,希望本系列可以帮助大家。

1. 问题描述

Android Studio调试services源码时不显示参数、局部变量值。(Android 13代码)

2. 原因与解决

原因

是因为在编译services.jar的时候开启了混淆,混淆即对代码中的类名变量名方法名等变为简单、难懂的名字,这样人无法看明白这些名字,就很难去猜测代码意思。这是导致调试的时候显示不了参数、局部变量的值原因。如下代码:

//文件名:services/Android.bp

java_library {
    name: "services",
    defaults: ["services_java_defaults"],
    installable: true,

    dex_preopt: {
        app_image: true,
        profile: "art-profile",
    },

    省略代码······

}

soong_config_module_type {
    name: "system_optimized_java_defaults",
    module_type: "java_defaults",
    config_namespace: "ANDROID",
    bool_variables: ["SYSTEM_OPTIMIZE_JAVA"],
    properties: ["optimize"],
}

//下面配置会对代码进行混淆、裁剪
system_optimized_java_defaults {
    name: "services_java_defaults",
    soong_config_variables: {
        SYSTEM_OPTIMIZE_JAVA: {
            optimize: {
                enabled: true,
                // TODO(b/210510433): Enable optimizations after improving
                // retracing infra.
                optimize: false,
                shrink: true,
                proguard_flags_files: ["proguard.flags"],
            },
            // Note: Optimizations are disabled by default if unspecified in
            // the java_library rule.
            conditions_default: {},
        },
    },
}

做过App开发的同学应该都清楚,App的release版本代码也是需要开启混淆代码裁剪的,谁曾想到services.jar也进行了代码混淆代码裁剪的。

解决

解决该问题就非常简单了,把混淆关掉重新编译services.jar后,push到Android设备即可。如下代码:

//文件名:services/Android.bp

//下面配置会对代码进行混淆、裁剪
system_optimized_java_defaults {
    name: "services_java_defaults",
    soong_config_variables: {
        SYSTEM_OPTIMIZE_JAVA: {
            optimize: {
                //置为false,混淆不可用
                enabled: false,
                // TODO(b/210510433): Enable optimizations after improving
                // retracing infra.
                optimize: false,
                //把裁剪也置为false
                shrink: false,
                proguard_flags_files: ["proguard.flags"],
            },
            // Note: Optimizations are disabled by default if unspecified in
            // the java_library rule.
            conditions_default: {},
        },
    },
}

欢迎关注我的公众号
请添加图片描述


原文地址:https://blog.csdn.net/niurenwo/article/details/142744314

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!