一、引言
DoraemonKit是滴滴开源的研发助手组件,目前支持iOS和Android两个平台。通过接入DoraemonKit组件,可以方便支持如下所示的多种调试工具:
本文是DoraemonKit之Android版本技术实现系列文章的第二篇,主要介绍各个常用工具的技术实现细节。
二、技术实现
2.1 app基本信息
很多时候,我们在开发或者调试的过程中需要查看一些手机或者app相关的参数,这些参数类似手机型号、操作系统版本和应用包名等。正因为有这样的需要,DoraemonKit提供了汇总的app基本信息展示功能。
如何获取信息
信息主要分两大类,一类是手机信息,一类是App信息。手机信息主要通过Build类获取,App信息主要通过Context及其相关类获取。
通过Build类获取信息
下面是Build类可以获取到的常用信息:
字段 | 含义 | 示例 |
---|---|---|
Build.BRAND | 品牌 | Meizu |
Build.MANUFACTURER | 厂商 | Meizu |
Build.DEVICE | 型号 | mx3 |
Build.VERSION.SDK_INT | SDK版本 | 19 |
Build.CPU_ABI | CPU ABI | armeabi-v7a |
Build类主要是通过读取/system/build.prop文件中的配置,比如Build.MANUFACTURER就是其中ro.product.manufacturer对应的值,Build类中的值是系统预先读取在内存中的,也可以不通过Build类直接读取build.prop文件。
通过Context类获取信息
Context类是Android系统中最重要的类,是App和系统之间的纽带,通过App的Context可以获取App相关的信息,如App的包名:
String packageName = context.getPackageName();
复制代码
获取应用图标:
Drawable icon = context.getResources().getDrawable(context.getApplicationInfo().icon);
复制代码
获取应用名:
String label = context.getString(context.getApplicationInfo().labelRes);
复制代码
判断权限:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
LogHelper.d(TAG, "No Location Permission");
return;
}
复制代码
2.2 文件浏览
在开发和调试过程中经常需要查看一些App自有目录的文件内容,虽然Android系统通常会提供文件浏览器的系统应用,但是因为App自有目录中大多数属于私有目录,所以如果App可以集成一个自己的文件浏览功能就可以很方便地查看私有目录中的文件,比如sharedprefs配置。
通过context获取私有目录的文件信息:
fileInfos.add(new FileInfo(context.getFilesDir().getParentFile()));
fileInfos.add(new FileInfo(context.getExternalCacheDir()));
fileInfos.add(new FileInfo(context.getExternalFilesDir(null)));
复制代码
然后就可以根据File信息展示当前文件夹的信息,同时也可以拿到子文件的信息,填充列表的Adapter就可以展示如上图所示的文件浏览器。
哆啦A梦目前支持图片查看和文本查看,默认的查看方式是文本查看,判断文件种类的方式是根据文件后缀。
public static String getSuffix(File file) {
if (file == null || !file.exists()) {
return "";
}
return file.getName()
.substring(file.getName().lastIndexOf(".") + 1)
.toLowerCase(Locale.getDefault());
}
复制代码
哆啦A梦也支持分享到第三方应用查看,是通过FileProvider对外分享的,只有通过FileProvider才能将私有目录中的文件分享出去:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri;
uri = FileProvider.getUriForFile(context, context.getPackageName() +