Android 项目开发,增加调试面板,及进入调试面板的入口问题

Posted 匆忙拥挤repeat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 项目开发,增加调试面板,及进入调试面板的入口问题相关的知识,希望对你有一定的参考价值。

文章目录

前言

项目开发过程中,总会遇到一些问题,

  1. 需要手动改动一个开关的值,重新编译运行
  2. 需要手动改动接口地址,重新编译运行
  3. 自己想看一些数据,但它们不应该在正常功能中

以上,都可以增加一个调试面板来解决。
在测试环境中,增加一个用于调试的 Activity,内部可以有各种配置、展示等等,开发人员,想咋弄咋弄…

基于以上想法,打开调试面板的入口,就可以,

  1. 类似打开『开发者模式』,在某个地方,连续点击n次,触发
  2. 弄个悬浮窗,触发

本文中,采用了悬浮窗的实现(不是那种全局唯一的,只是在每个activity可见后,动态添加一个可拖动的view)。关于悬浮窗的具体实现,本文中不作讨论


在每个Activity中都创建一个悬浮窗

如,有一个名为 GodFloatView 带有上帝视角的悬浮窗;有一个名为 DashboardActivity 调试面板的Activity。

基于 Application#registerActivityLifecycleCallbacks() 实现如下,

registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks 
    private val floatViewMap = arrayMapOf<Int, GodFloatView>()

    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) 
    

    override fun onActivityStarted(activity: Activity) 

    

    override fun onActivityResumed(activity: Activity) 
        debugMode(activity)
    

    override fun onActivityPaused(activity: Activity) 

    

    override fun onActivityStopped(activity: Activity) 

    

    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) 

    

    override fun onActivityDestroyed(activity: Activity) 
        floatViewMap.remove(activity.javaClass.hashCode())
    

    // 开发调试模式
    private fun debugMode(activity: Activity) 
        if (!BuildConfig.DEBUG) return
        if (activity.javaClass.getAnnotation(DebugMode::class.java) != null) return

        if (floatViewMap[activity.javaClass.hashCode()] == null) 
            val floatView = GodFloatView(activity)
            floatViewMap[activity.javaClass.hashCode()] = floatView
            floatView.addToWindow(activity.window)
            floatView.setClick 
                activity.startActivity(Intent(activity, DashboardActivity::class.java))
            
        
    

)

基于 Map<Int, GodFloatView> 管理所有 activity中的 GodFloatView。key 是activity的hashCode值,以保证唯一性。当 map[key]为空时,则创建 悬浮窗,并存到map中


基于运行时注解,以避免在调试相关的Activity中,添加悬浮窗

看上面的代码,

private fun debugMode(activity: Activity) 
	...
	if (activity.javaClass.getAnnotation(DebugMode::class.java) != null) return
	...

代码的意义就是,如果一个类 应用了 @DebugMode 注解,则 return

注解定义:

/**
 * desc:
 * author:  stone
 * email:   aa86799@163.com
 * time:    2023/3/11 13:30
 */
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class DebugMode

将该注解,应用于调试相关的所有Activity中,就可以避免添加悬浮窗,防止重复打开调试面板

以上是关于Android 项目开发,增加调试面板,及进入调试面板的入口问题的主要内容,如果未能解决你的问题,请参考以下文章

Unity 打包程序后PC或Android真机调试Debug日志及调出的Profiler面板

Android Studio 调试快捷键及调试技巧

§1.2 Android项目结构及“Hello World”应用解析

安卓手机USB调试模式打开方法及详细图文教程

mpaas android项目怎么打断点调试

如何打开Android设备的USB调试模式