调试是软件开发中的重要一步。搜索和错误修复使您可以开发高质量的产品。
在本文中,我想谈谈完全调试Android应用程序的过程。Android Studio为我们提供了各种配置工具,例如:
- logcat是用于查看应用程序日志(包括崩溃异常)的工具。它可以通过adb在Android Studio和终端中使用;
 - Android profiler是一个功能强大的工具,可让您查看所有网络请求,CPU,内存和电池使用情况。
 
还有许多第三方解决方案,可让您查看网络流量,数据库,共享首选项等。
所有这些工具各有利弊。他们的缺点包括:
- 各种工具的许多依赖性;
 - 使用的复杂性-通常,所有工具都针对开发人员,而其他团队成员(例如测试人员,分析师或后端开发人员)则不方便。通常,后者不得不拉android开发人员来查看任何日志;
 - 强制性将电话连接到计算机,例如通过usb电缆。
 
目前,我还没有找到一个可以集成各种调试工具并消除上述问题的解决方案。因此,我开发了自己的解决方案。
Android远程调试器
我的解决方案非常易于使用,因为它允许您直接在浏览器中调试应用程序,而无需将Android设备连接到计算机。该解决方案包括四个部分,用于调试:
- 记录-查看应用程序日志,包括崩溃;
 - 数据库-查看和编辑数据库中的记录;
 - 网络-以方便的格式查看所有网络请求和响应;
 - SharedPreferences-查看和编辑SharedPreferences数据。
 
使用调试器
要使用调试器,您需要执行以下操作:
- 连接并初始化库;
 - 启动应用程序;
 - , 
http://xxx.xxx.x.xxx:8080. , (Wi-Fi LAN) Android ; - . .
 
:
Logging

Database

Network

AndroidRemoteDebugger.init(applicationContext) . AndroidRemoteDebugger.Builder:
AndroidRemoteDebugger.init(
    new AndroidRemoteDebugger.Builder(applicationContext)        
        .enabled(boolean)    
        .disableInternalLogging()    
        .disableJsonPrettyPrint()    
        .disableNotifications()    
        .excludeUncaughtException()    
        .port(int)    
        .enableDuplicateLogging()    
        .enableDuplicateLogging(new Logger() {  
            @Override
            public void log(int priority, String tag, String msg, Throwable th) {
            }
        })
        .build()
);
. - NanoHTTPD. . , , , 8080. . AndroidRemoteDebugger.Builder.
Logging
. , . , . .
AndroidRemoteDebugger.Log. . . , Logging . .
: AndroidRemoteDebugger.Log.d("tag", "message").
Timber ( Jake Wharton), :
class AndroidRemoteDebuggerTree extends Timber.Tree {
    @Override
    protected void log(int priority, @Nullable String tag, @NotNull String message, @Nullable Throwable t) {
        AndroidRemoteDebugger.Log.log(priority, tag, message, t);
    }
}
...
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Timber.plant(new Timber.DebugTree(), new AndroidRemoteDebuggerTree());
    }
}
Network
Network . . . Logging. HTTP . , . Logging, .
OkHttp3 NetLoggingInterceptor. , .
:
OkHttpClient client = new OkHttpClient.Builder()
    
    .addInterceptor(new NetLoggingInterceptor())
    .build();
Database
. . . 15 . , , . sql-.
SharedPreferences
SharedPreferences. , , . SharedPreferences . , .
Android Remote Debugger
build.gradle :
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
build.gradle :
dependencies {
    implementation 'com.github.zerobranch:android-remote-debugger:1.0.0'
}
Android Remote Debugger:
- ;
 - 一次包含多个调试工具;
 - 不仅专注于开发人员;
 - 不需要将Android设备连接到计算机即可操作;
 - 易于使用。
 
Github
可以在GitHub上找到有关工作和连接库的详细说明