diff --git a/.gitignore b/.gitignore
index 424e56141..c2d303428 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,10 +4,12 @@
/local.properties
/.idea/workspace.xml
/.idea/libraries
+/.idea/caches
.DS_Store
/build
/release
/captures
.externalNativeBuild
*.apk
-*.exe
\ No newline at end of file
+*.exe
+.idea/caches/build_file_checksums.ser
diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 398f8f7d4..d83ddc146 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/dictionaries/Stardust.xml b/.idea/dictionaries/Stardust.xml
index 4218d2eb3..09ec5769f 100644
--- a/.idea/dictionaries/Stardust.xml
+++ b/.idea/dictionaries/Stardust.xml
@@ -1,15 +1,23 @@
索引 | @@ -77,8 +77,9 @@
点击脚本右边的菜单按钮->更多->定时任务即可定时运行脚本,但是必须保持Auto.js后台运行(自启动白名单、电源管理白名单等)。同时,可以在脚本的开头使用device.wakeUp()
来唤醒屏幕;但是,Auto.js没有解锁屏幕的功能,因此难以在有锁屏密码的设备上达到效果。
如果除了单脚本以外还有其他脚本、图片、音乐等资源一起打包,则需要使用项目打包功能。
-如果一个脚本是用intent"启动"的,比如定时任务中的特定事件(网络状态变化等)触发而启动的,则可以通过engines.myEngine().execArgv.intent
获取启动的intent,从而获取外部参数。
如果除了单脚本以外还有其他脚本、图片、音乐等资源一起打包,则需要使用项目功能。
+点击Auto.js的"+"号,选择项目,填写项目名称、包名等信息以后,点击"√"即可新建一个项目。可以在项目中放多个脚本、模块、资源文件,点击项目工具栏的apk打包图标即可打包一个项目,点击工具栏可以重新配置项目。
例如,主脚本要读取同一文件夹下的图片1.png,再执行找图,则可以通过images.read("./1.png")
来读取,其中"./1.png"表示同一目录1.png图片;ui中的图片控件要引用同一文件夹的2.png图片则为<img src="file://2.png"/>
。Auto.js内置的函数和模块都支持相对路径,但是,其他情况则需要使用files.path()
函数来把相对路径转换为绝对路径。
目前Auto.js还不支持项目的图形化管理,后续会加入。
-需要使用项目打包功能。
-{
-"name": "项目名称",
-"versionName": "1.0.0",
-"versionCode": 1,
-"packageName": "org.autojs.example",
-"main": "main.js",
-"launchConfig": {
- "hideLogs": true
+如何使打包的应用不显示主界面#
+需要使用项目功能。新建项目后,修改项目下的project.json
文件,增加以下条目:
+"launchConfig": {
+ "hideLogs": true
}
+
例如:
+{
+ "name": "项目名称",
+ "versionName": "1.0.0",
+ "versionCode": 1,
+ "packageName": "org.autojs.example",
+ "main": "main.js",
+ "launchConfig": {
+ "hideLogs": true
+ }
}
-
其中,项目名称改为自己的项目名称,"org.autojs.example"改成自己的包名,下面的"launchConfig"表示启动配置,"hideLogs"表示隐藏日志。
有关项目打包和配置的更多信息,参见项目与项目配置(待补)。
+"launchConfig"表示启动配置,"hideLogs"表示隐藏日志。
+参见项目与项目配置。
由于Auto.js支持直接调用Android的API,对于Auto.js没有内置的函数,可以直接通过修改Android代码为JavaScript代码实现。例如旋转图片的Android代码为:
import android.graphics.Bitmap;
@@ -1060,7 +1106,7 @@ app.getPackageName(appName)#
用其他应用查看文件。文件不存在的情况由查看文件的应用处理。
如果找不出可以查看该文件的应用,则抛出ActivityNotException
。
@@ -1068,7 +1114,7 @@ app.viewFile(path)#
用其他应用编辑文件。文件不存在的情况由编辑文件的应用处理。
如果找不出可以编辑该文件的应用,则抛出ActivityNotException
。
@@ -1132,17 +1178,36 @@ app.sendEmail(options)#
-- options <Object> 选项,包括:
-action
<string> 意图的Action,指意图要完成的动作,是一个字符串常量,比如"android.intent.action.SEND"。当action以"android.intent.action"开头时,可以省略前缀,直接用"SEND"代替。常见的action参见常用的意图动作
。
-type
<string> 意图的MimeType,表示和该意图直接相关的数据的类型,表示比如"text/plain"为纯文本类型。
-data
<string> 意图的Data,表示和该意图直接相关的数据,是一个Uri, 可以是文件路径或者Url等。例如要打开一个文件, action为"android.intent.action.VIEW", data为"file:///sdcard/1.txt"。
-category
<Array> 意图的类别。比较少用。
-packageName
<string> 目标包名
-className
<string> 目标Activity或Service等组件的名称
-extras
<Object> 以键值对构成的这个Intent的Extras(额外信息)。提供该意图的其他信息,例如发送邮件时的邮件标题、邮件正文。
+options
<Object> 选项,包括:
+
+action
<string> 意图的Action,指意图要完成的动作,是一个字符串常量,比如"android.intent.action.SEND"。当action以"android.intent.action"开头时,可以省略前缀,直接用"SEND"代替。参见Actions。
+
+type
<string> 意图的MimeType,表示和该意图直接相关的数据的类型,表示比如"text/plain"为纯文本类型。
+
+data
<string> 意图的Data,表示和该意图直接相关的数据,是一个Uri, 可以是文件路径或者Url等。例如要打开一个文件, action为"android.intent.action.VIEW", data为"file:///sdcard/1.txt"。
+
+category
<Array> 意图的类别。比较少用。参见Categories。
+
+packageName
<string> 目标包名
+
+className
<string> 目标Activity或Service等组件的名称
+
+extras
<Object> 以键值对构成的这个Intent的Extras(额外信息)。提供该意图的其他信息,例如发送邮件时的邮件标题、邮件正文。参见Extras。
+
+flags
<Array> intent的标识,字符串数组,例如["activity_new_task", "grant_read_uri_permission"]
。参见Flags。
+[v4.1.0新增]
+
+root
<Boolea> 是否以root权限启动、发送该intent。使用该参数后,不能使用context.startActivity()
等方法,而应该直接使用诸如app.startActivity({...})
的方法。
+[v4.1.0新增]
+
@@ -1154,19 +1219,75 @@ app.sendEmail(options)安卓Intent或参考Android指南: Intent。
+context.startActivity(i);
+需要注意的是,除非应用专门暴露Activity出来,否则在没有root权限的情况下使用intent是无法跳转到特定Activity、应用的特定界面的。例如我们能通过Intent跳转到QQ的分享界面,是因为QQ对外暴露了分享的Activity;而在没有root权限的情况下,我们无法通过intent跳转到QQ的设置界面,因为QQ并没有暴露这个Activity。
+但如果有root权限,则在intent的参数加上"root": true
即可。例如使用root权限跳转到Auto.js的设置界面为:
+app.startActivity({
+ packageName: "org.autojs.autojs",
+ className: "org.autojs.autojs.ui.settings.SettingsActivity_",
+ root: true
+});
+
另外,关于intent的参数如何获取的问题,一些intent是意外发现并且在网络中传播的(例如跳转QQ聊天窗口是因为QQ给网页提供了跳转到客服QQ的方法),如果要自己获取活动的intent的参数,可以通过例如"intent记录","隐式启动"等应用拦截内部intent或者查询暴露的intent。其中拦截内部intent需要XPosed框架,或者可以通过反编译等手段获取参数。总之,没有简单直接的方法。
+更多信息,请百度安卓Intent或参考Android指南: Intent。
app.startActivity(options)#
根据选项构造一个Intent,并启动该Activity。
-app.sendBroadcast(options)#
+app.startActivity({
+ action: "SEND",
+ type: "text/plain",
+ data: "file:///sdcard/1.txt"
+});
+
app.sendBroadcast(options)#
根据选项构造一个Intent,并发送该广播。
-
+app.startService(options)#
+
+options
<Object> 选项
+
+根据选项构造一个Intent,并启动该服务。
+app.sendBroadcast(name)#
+[v4.1.0新增]
+
+name
<string> 特定的广播名称,包括:
+inspect_layout_hierarchy
布局层次分析
+inspect_layout_bounds
布局范围
+
+
+
+发送以上特定名称的广播可以触发Auto.js的布局分析,方便脚本调试。这些广播在Auto.js发送才有效,在打包的脚本上运行将没有任何效果。
+app.sendBroadcast("inspect_layout_bounds");
+
app.intentToShell(options)#
+[v4.1.0新增]
+
+options
<Object> 选项
+
+根据选项构造一个Intent,转换为对应的shell的intent命令的参数。
+例如:
+shell("am start " + app.intentToShell({
+ packageName: "org.autojs.autojs",
+ className: "org.autojs.autojs.ui.settings.SettingsActivity_"
+}), true);
+
参见intent参数的规范。
+app.parseUri(uri)#
+[v4.1.0新增]
+
+uri
<string> 一个代表Uri的字符串,例如"file:///sdcard/1.txt", "https://www.autojs.org"
+- 返回 <Uri> 一个代表Uri的对象,参见android.net.Uri。
+
+解析uri字符串并返回相应的Uri对象。即使Uri格式错误,该函数也会返回一个Uri对象,但之后如果访问该对象的scheme, path等值可能因解析失败而返回null
。
+需要注意的是,在高版本Android上,由于系统限制直接在Uri暴露文件的绝对路径,因此如果uri字符串是文件file://...
,返回的Uri会是诸如content://...
的形式。
+app.getUriForFile(path)#
+[v4.1.0新增]
+
+path
<string> 文件路径,例如"/sdcard/1.txt"
+- 返回 <Uri> 一个指向该文件的Uri的对象,参见android.net.Uri。
+
+从一个文件路径创建一个uri对象。需要注意的是,在高版本Android上,由于系统限制直接在Uri暴露文件的绝对路径,因此返回的Uri会是诸如content://...
的形式。
+
Console#
Stability: 2 - Stable控制台模块提供了一个和Web浏览器中相似的用于调试的控制台。用于输出一些调试信息、中间结果等。
@@ -1179,8 +1300,8 @@
console.clear()#
-data
-...args
+data
<any>
+...args
<any>
打印到控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 printf(3) 中的代替值(参数都会传给 util.format())。
const count = 5;
@@ -1192,26 +1313,26 @@ console.log([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以灰色字体显示。输出优先级低于log,用于输出观察性质的信息。
console.info([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以绿色字体显示。输出优先级高于log, 用于输出重要信息。
console.warn([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以蓝色字体显示。输出优先级高于info, 用于输出警告信息。
console.error([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以红色字体显示。输出优先级高于warn, 用于输出错误信息。
console.assert(value, message)#
@@ -1222,10 +1343,46 @@ console.assert(value, message)#
+
console.time([label])#
+[v4.1.0新增]
+
+label
<String> 计时器标签,可省略
+
+启动一个定时器,用以计算一个操作的持续时间。
+定时器由一个唯一的 label
标识。
+当调用 console.timeEnd()
时,可以使用相同的 label
来停止定时器,并以毫秒为单位将持续时间输出到控制台。
+重复启动同一个标签的定时器会覆盖之前启动同一标签的定时器。
+console.timeEnd(label)#
+[v4.1.0新增]
+
+label
<String> 计时器标签
+
+停止之前通过调用 console.time()
启动的定时器,并打印结果到控制台。
+调用 console.timeEnd()
后定时器会被删除。如果不存在标签指定的定时器则会打印 NaNms
。
+console.time('求和');
+var sum = 0;
+for(let i = 0; i < 100000; i++){
+ sum += i;
+}
+console.timeEnd('求和');
+// 打印 求和: xxx ms
+
+console.trace([data][, ...args])#
+[v4.1.0新增]
+
+data
<any>
+...args
<any>
+
+与console.log类似,同时会打印出调用这个函数所在的调用栈信息(即当前运行的文件、行数等信息)。
+console.trace('Show me');
+// 打印: (堆栈跟踪会根据被调用的跟踪的位置而变化)
+// Show me
+// at <test>:7
+
+console.input(data[, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串用eval计算后返回。
部分机型可能会有控制台不显示输入框的情况,属于bug。
@@ -1236,8 +1393,8 @@ console.assert(value, message)#
-data
-...args
+data
<any>
+...args
<any>
与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串直接返回。
部分机型可能会有控制台不显示输入框的情况,属于bug。
@@ -1263,7 +1420,24 @@ console.assert(value, message)#
+console.setGlobalLogConfig(config)#
+[v4.1.0新增]
+
+config
<Object> 日志配置,可选的项有:
+
+
+设置日志保存的路径和配置。例如把日志保存到"/sdcard/1.txt":
+console.setGlobalLogConfig({
+ "file": "/sdcard/1.txt"
+});
+
注意该函数会影响所有脚本的日志记录。
+print(text)#
@@ -2225,6 +2399,10 @@ engines.stopAllAndToast()#
返回当前脚本的脚本引擎对象(ScriptEngine)
+[v4.1.0新增]
+特别的,该对象可以通过execArgv
来获取他的运行参数,包括外部参数、intent等。例如:
+log(engines.myEngine().execArgv);
+
普通脚本的运行参数通常为空,通过定时任务的广播启动的则可以获取到启动的intent。
engines.all()#
- 返回 <Array>
@@ -3297,6 +3475,23 @@ runtime.requestPermissions(permissions)Permissions Overview。(并没有用)
+runtime.loadJar(path)#
+
+path
<string> jar文件路径
+
+加载目标jar文件,加载成功后将可以使用该Jar文件的类。
+// 加载jsoup.jar
+runtime.loadJar("./jsoup.jar");
+// 使用jsoup解析html
+importClass(org.jsoup.Jsoup);
+log(Jsoup.parse(files.read("./test.html")));
+
(jsoup是一个Java实现的解析Html DOM的库,可以在Jsoup下载)
+runtime.loadDex(path)#
+
+path
<string> dex文件路径
+
+加载目标dex文件,加载成功后将可以使用该dex文件的类。
+因为加载jar实际上是把jar转换为dex再加载的,因此加载dex文件会比jar文件快得多。可以使用Android SDK的build tools的dx工具把jar转换为dex。
context#
全局变量。一个android.content.Context对象。
注意该对象为ApplicationContext,因此不能用于界面、对话框等的创建。
@@ -3608,60 +3803,28 @@
colors.MAGENTA#
透明,颜色值 #00000000
Images#
-Stability: 2 - Stableimages模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、找色、找图等。
-images.requestScreenCapture([landscape])#
+Stability: 2 - Stableimages模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、旋转、二值化、找色找图等。
+该模块分为两个部分,找图找色部分和图片处理部分。
+需要注意的是,image对象创建后尽量在不使用时进行回收,同时避免循环创建大量图片。因为图片是一种占用内存比较大的资源,尽管Auto.js通过各种方式(比如图片缓存机制、垃圾回收时回收图片、脚本结束时回收所有图片)尽量降低图片资源的泄漏和内存占用,但是糟糕的代码仍然可以占用大量内存。
+Image对象通过调用recycle()
函数来回收。例如:
+// 读取图片
+var img = images.read("./1.png");
+//对图片进行操作
+...
+// 回收图片
+img.recycle();
+
例外的是,caputerScreen()
返回的图片不需要回收。
+图片处理#
+images.read(path)#
-landscape
<boolean> 布尔值, 表示将要执行的截屏是否为横屏。如果landscape为false, 则表示竖屏截图; true为横屏截图。
-
-向系统申请屏幕截图权限,返回是否请求成功。
-第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。
-这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()
。
-该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()
都调用一次。
-如果不指定landscape值,则截图方向由当前设备屏幕方向决定,因此务必注意执行该函数时的屏幕方向。
-建议在本软件界面运行该函数,在其他软件界面运行时容易出现一闪而过的黑屏现象。
-示例:
-//请求截图
-if(!requestScreenCapture()){
- toast("请求截图失败");
- exit();
-}
-//连续截图10张图片(间隔1秒)并保存到存储卡目录
-for(var i = 0; i < 10; i++){
- captureScreen("/sdcard/screencapture" + i + ".png");
- sleep(1000);
-}
-
该函数也可以作为全局函数使用。
-images.captureScreen()#
-截取当前屏幕并返回一个Image对象。
-没有截图权限时执行该函数会抛出SecurityException。
-该函数不会返回null,两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。
-截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。
-另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后(一般为几百ms)才返回截图。
-例子:
-//请求横屏截图
-requestScreenCapture(true);
-//截图
-var img = captureScreen();
-//获取在点(100, 100)的颜色值
-var color = images.pixel(img, 100, 100);
-//显示该颜色值
-toast(colors.toString(color));
-
该函数也可以作为全局函数使用。
-images.captureScreen(path)#
-截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。
-该函数不会返回任何值。该函数也可以作为全局函数使用。
-images.pixel(image, x, y)#
+
读取在路径path的图片文件并返回一个Image对象。如果文件不存在或者文件无法解码则返回null。
+images.load(url)#
返回图片image在点(x, y)处的像素的ARGB值。
-该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。
-坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。
+加载在地址URL的网络图片并返回一个Image对象。如果地址不存在或者图片无法解码则返回null。
images.copy(img)#
img
<Image> 图片
@@ -3685,17 +3848,7 @@ images.save(image, path[, format = "png", quality = 100])images.read(path)#
-
-path
<string> 图片路径
-
-读取在路径path的图片文件并返回一个Image对象。如果文件不存在或者文件无法解码则返回null。
-images.load(url)#
-
-url
<string> 图片URL地址
-
-加载在地址URL的网络图片并返回一个Image对象。如果地址不存在或者图片无法解码则返回null。
-images.fromBase64(base64)#
+images.fromBase64(base64)#
base64
<string> 图片的Base64数据
- 返回 <Image>
@@ -3745,7 +3898,263 @@ images.clip(img, x, y, w, h)#
+images.resize(img, size[, interpolation])#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 两个元素的数组[w, h],分别表示宽度和高度;如果只有一个元素,则宽度和高度相等
+interpolation
<string> 插值方法,可选,默认为"LINEAR"(线性插值),可选的值有:
+
+NEAREST
最近邻插值
+LINEAR
线性插值(默认)
+AREA
区域插值
+CUBIC
三次样条插值
+LANCZOS4
Lanczos插值
+参见InterpolationFlags
+
+
+返回 <Image>
+
+
+调整图片大小,并返回调整后的图片。例如把图片放缩为200*300:images.resize(img, [200, 300])
。
+
+images.scale(img, fx, fy[, interpolation])#
+[v4.1.0新增]
+
+img
<Image> 图片
+fx
<number> 宽度放缩倍数
+fy
<number> 高度放缩倍数
+interpolation
<string> 插值方法,可选,默认为"LINEAR"(线性插值),可选的值有:
+
+NEAREST
最近邻插值
+LINEAR
线性插值(默认)
+AREA
区域插值
+CUBIC
三次样条插值
+LANCZOS4
Lanczos插值
+参见InterpolationFlags
+
+
+返回 <Image>
+
+
+放缩图片,并返回放缩后的图片。例如把图片变成原来的一半:images.scale(img, 0.5, 0.5)
。
+
+images.rotate(img, degress[, x, y])#
+[v4.1.0新增]
+
+img
<Image> 图片
+degress
<number> 旋转角度。
+x
<number> 旋转中心x坐标,默认为图片中点
+y
<number> 旋转中心y坐标,默认为图片中点
+- 返回 <Image>
+
+将图片逆时针旋转degress度,返回旋转后的图片对象。
+例如逆时针旋转90度为images.rotate(img, 90)
。
+images.concat(img1, image2[, direction])#
+[v4.1.0新增]
+
+img1
<Image> 图片1
+img2
<Image> 图片2
+- direction <string> 连接方向,默认为"RIGHT",可选的值有:
+LEFT
将图片2接到图片1左边
+RIGHT
将图片2接到图片1右边
+TOP
将图片2接到图片1上边
+BOTTOM
将图片2接到图片1下边
+
+
+- 返回 <Image>
+
+连接两张图片,并返回连接后的图像。如果两张图片大小不一致,小的那张将适当居中。
+images.grayscale(img)#
+[v4.1.0新增]
+
+img
<Image> 图片
+- 返回 <Image>
+
+灰度化图片,并返回灰度化后的图片。
+image.threshold(img, threshold, maxVal[, type])#
+[v4.1.0新增]
+
+img
<Image> 图片
+threshold
<number> 阈值
+maxVal
<number> 最大值
+type
<string> 阈值化类型,默认为"BINARY",参见ThresholdTypes, 可选的值:
+
+BINARY
+BINARY_INV
+TRUNC
+TOZERO
+TOZERO_INV
+OTSU
+TRIANGLE
+
+
+返回 <Image>
+
+
+将图片阈值化,并返回处理后的图像。可以用这个函数进行图片二值化。例如:images.threshold(img, 100, 255, "BINARY")
,这个代码将图片中大于100的值全部变成255,其余变成0,从而达到二值化的效果。如果img是一张灰度化图片,这个代码将会得到一张黑白图片。
+可以参考有关博客(比如threshold函数的使用)或者OpenCV文档threshold。
+images.adaptiveThreshold(img, maxValue, adaptiveMethod, thresholdType, blockSize, C)#
+[v4.1.0新增]
+
+img
<Image> 图片
+maxValue
<number> 最大值
+adaptiveMethod
<string> 在一个邻域内计算阈值所采用的算法,可选的值有:
+MEAN_C
计算出领域的平均值再减去参数C的值
+GAUSSIAN_C
计算出领域的高斯均值再减去参数C的值
+
+
+thresholdType
<string> 阈值化类型,可选的值有:
+BINARY
+BINARY_INV
+
+
+blockSize
<number> 邻域块大小
+C
<number> 偏移值调整量
+- 返回 <Image>
+
+对图片进行自适应阈值化处理,并返回处理后的图像。
+可以参考有关博客(比如threshold与adaptiveThreshold)或者OpenCV文档adaptiveThreshold。
+images.cvtColor(img, code[, dstCn])#
+[v4.1.0新增]
+
+img
<Image> 图片
+code
<string> 颜色空间转换的类型,可选的值有一共有205个(参见ColorConversionCodes),这里只列出几个:
+BGR2GRAY
BGR转换为灰度
+BGR2HSV
BGR转换为HSV
+- ``
+
+
+dstCn
<number> 目标图像的颜色通道数量,如果不填写则根据其他参数自动决定。
+- 返回 <Image>
+
+对图像进行颜色空间转换,并返回转换后的图像。
+可以参考有关博客(比如颜色空间转换)或者OpenCV文档cvtColor。
+images.inRange(img, lowerBound, upperBound)#
+[v4.1.0新增]
+
+img
<Image> 图片
+lowerBound
<string> | <number> 颜色下界
+upperBound
<string> | <number> 颜色下界
+- 返回 <Image>
+
+将图片二值化,在lowerBound~upperBound范围以外的颜色都变成0,在范围以内的颜色都变成255。
+例如images.inRange(img, "#000000", "#222222")
。
+images.interval(img, color, interval)#
+[v4.1.0新增]
+
+将图片二值化,在color-interval ~ color+interval范围以外的颜色都变成0,在范围以内的颜色都变成255。这里对color的加减是对每个通道而言的。
+例如images.interval(img, "#888888", 16)
,每个通道的颜色值均为0x88,加减16后的范围是[0x78, 0x98],因此这个代码将把#787878~#989898的颜色变成#FFFFFF,而把这个范围以外的变成#000000。
+images.blur(img, size[, anchor, type])#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 定义滤波器的大小,如[3, 3]
+anchor
<Array> 指定锚点位置(被平滑点),默认为图像中心
+type
<string> 推断边缘像素类型,默认为"DEFAULT",可选的值有:
+CONSTANT
iiiiii|abcdefgh|iiiiiii with some specified i
+REPLICATE
aaaaaa|abcdefgh|hhhhhhh
+REFLECT
fedcba|abcdefgh|hgfedcb
+WRAP
cdefgh|abcdefgh|abcdefg
+REFLECT_101
gfedcb|abcdefgh|gfedcba
+TRANSPARENT
uvwxyz|abcdefgh|ijklmno
+REFLECT101
same as BORDER_REFLECT_101
+DEFAULT
same as BORDER_REFLECT_101
+ISOLATED
do not look outside of ROI
+
+
+- 返回 <Image>
+
+对图像进行模糊(平滑处理),返回处理后的图像。
+可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档blur。
+images.medianBlur(img, size)#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 定义滤波器的大小,如[3, 3]
+- 返回 <Image>
+
+对图像进行中值滤波,返回处理后的图像。
+可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档blur。
+images.gaussianBlur(img, size[, sigmaX, sigmaY, type])#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 定义滤波器的大小,如[3, 3]
+sigmaX
<number> x方向的标准方差,不填写则自动计算
+sigmaY
<number> y方向的标准方差,不填写则自动计算
+type
<string> 推断边缘像素类型,默认为"DEFAULT",参见images.blur
+- 返回 <Image>
+
+对图像进行高斯模糊,返回处理后的图像。
+可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档GaussianBlur。
+images.matToImage(mat)#
+[v4.1.0新增]
+
+mat
<Mat> OpenCV的Mat对象
+- 返回 <Image>
+
+把Mat对象转换为Image对象。
+找图找色#
+images.requestScreenCapture([landscape])#
+
+landscape
<boolean> 布尔值, 表示将要执行的截屏是否为横屏。如果landscape为false, 则表示竖屏截图; true为横屏截图。
+
+向系统申请屏幕截图权限,返回是否请求成功。
+第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。
+这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()
。
+该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()
都调用一次。
+如果不指定landscape值,则截图方向由当前设备屏幕方向决定,因此务必注意执行该函数时的屏幕方向。
+建议在本软件界面运行该函数,在其他软件界面运行时容易出现一闪而过的黑屏现象。
+示例:
+
//请求截图
+if(!requestScreenCapture()){
+ toast("请求截图失败");
+ exit();
+}
+//连续截图10张图片(间隔1秒)并保存到存储卡目录
+for(var i = 0; i < 10; i++){
+ captureScreen("/sdcard/screencapture" + i + ".png");
+ sleep(1000);
+}
+
该函数也可以作为全局函数使用。
+images.captureScreen()#
+截取当前屏幕并返回一个Image对象。
+没有截图权限时执行该函数会抛出SecurityException。
+该函数不会返回null,两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。
+截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。
+另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后(一般为几百ms)才返回截图。
+例子:
+//请求横屏截图
+requestScreenCapture(true);
+//截图
+var img = captureScreen();
+//获取在点(100, 100)的颜色值
+var color = images.pixel(img, 100, 100);
+//显示该颜色值
+toast(colors.toString(color));
+
该函数也可以作为全局函数使用。
+images.captureScreen(path)#
+
+path
<string> 截图保存路径
+
+截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。
+该函数不会返回任何值。该函数也可以作为全局函数使用。
+images.pixel(image, x, y)#
+返回图片image在点(x, y)处的像素的ARGB值。
+该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。
+坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。
+images.findColor(image, color, options)#
image
<Image> 图片
color
<number> | <string> 要寻找的颜色的RGB值。如果是一个整数,则以0xRRGGBB的形式代表RGB值(A通道会被忽略);如果是字符串,则以"#RRGGBB"代表其RGB值。
@@ -3923,7 +4332,94 @@ images.findColorEquals(img, color[, x, y, width, height])#
+images.matchTemplate(img, template, options)#
+
[v4.1.0新增]
+
+img
<Image> 大图片
+template
<Image> 小图片(模板)
+options
<Object> 找图选项:
+
+- 返回 <MatchingResult>
+
+在大图片中搜索小图片,并返回搜索结果MatchingResult。该函数可以用于找图时找出多个位置,可以通过max参数控制最大的结果数量。也可以对匹配结果进行排序、求最值等操作。
+MatchingResult#
+[v4.1.0新增]
+matches#
+
+- <Array> 匹配结果的数组。
+
+数组的元素是一个Match对象:
+
+point
<Point> 匹配位置
+similarity
<number> 相似度
+
+例如:
+
var result = images.matchTemplate(img, template, {
+ max: 100
+});
+result.matches.forEach(match => {
+ log("point = " + match.point + ", similarity = " + match.similarity);
+});
+
points#
+
+- <Array> 匹配位置的数组。
+
+first()#
+
+- 返回 <Match>
+
+第一个匹配结果。如果没有任何匹配,则返回null
。
+last()#
+
+- 返回 <Match>
+
+最后一个匹配结果。如果没有任何匹配,则返回null
。
+leftmost()#
+
+- 返回 <Match>
+
+位于大图片最左边的匹配结果。如果没有任何匹配,则返回null
。
+topmost()#
+
+- 返回 <Match>
+
+位于大图片最上边的匹配结果。如果没有任何匹配,则返回null
。
+rightmost()#
+
+- 返回 <Match>
+
+位于大图片最右边的匹配结果。如果没有任何匹配,则返回null
。
+bottommost()#
+
+- 返回 <Match>
+
+位于大图片最下边的匹配结果。如果没有任何匹配,则返回null
。
+best()#
+
+- 返回 <Match>
+
+相似度最高的匹配结果。如果没有任何匹配,则返回null
。
+worst()#
+
+- 返回 <Match>
+
+相似度最低的匹配结果。如果没有任何匹配,则返回null
。
+sortBy(cmp)#
+
+- cmp <Function>|<string> 比较函数,或者是一个字符串表示排序方向。例如"left"表示将匹配结果按匹配位置从左往右排序、"top"表示将匹配结果按匹配位置从上往下排序,"left-top"表示将匹配结果按匹配位置从左往右、从上往下排序。方向包括
left
(左), top
(上), right
(右), bottom
(下)。
+- <MatchingResult>
+
+对匹配结果进行排序,并返回排序后的结果。
+var result = images.matchTemplate(img, template, {
+ max: 100
+});
+log(result.sortBy("top-right"));
+
Image#
表示一张图片,可以是截图的图片,或者本地读取的图片,或者从网络获取的图片。
Image.getWidth()#
返回以像素为单位图片宽度。
@@ -3942,6 +4438,7 @@ Image.pixel(x, y)#
findColor, findImage返回的对象。表示一个点(坐标)。
Point.x#
@@ -4210,7 +4707,7 @@ media.getMusicCurrentPosition()#
Stability: 2 - Stable
Auto.js 有一个简单的模块加载系统。 在 Auto.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块)。
例子,假设有一个名为 foo.js 的文件:
-const circle = require('circle.js');
+var circle = require('circle.js');
console.log("半径为 4 的圆的面积是 %d", circle.area(4));
在第一行中,foo.js 加载了同一目录下的 circle.js 模块。
circle.js 文件的内容为:
@@ -4218,7 +4715,9 @@ module (模块)auto();
auto.waitFor()#
检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
+因为该函数是阻塞的,因此除非是有协程特性,否则不能在ui模式下运行该函数,建议在ui模式下使用auto()
函数。
auto.setMode(mode)#
mode
<string> 模式
@@ -4270,6 +4770,72 @@ auto.setMode(mode)#
+[v4.1.0新增]
+
+flags
<string> | <Array> 一些标志,来启用和禁用某些特性,包括:
+findOnUiThread
使用该特性后,选择器搜索时会在主进程进行。该特性用于解决线程安全问题导致的次生问题,不过目前貌似已知问题并不是线程安全问题。
+useUsageStats
使用该特性后,将会以"使用情况统计"服务的结果来检测当前正在运行的应用包名(需要授予"查看使用情况统计"权限)。如果觉得currentPackage()返回的结果不太准确,可以尝试该特性。
+useShell
使用该特性后,将使用shell命令获取当前正在运行的应用的包名、活动名称,但是需要root权限。
+
+
+
+启用有关automator的一些特性。例如:
+
auto.setFlags(["findOnUiThread", "useShell"]);
+
auto.serivce#
+[v4.1.0新增]
+
+获取无障碍服务。如果无障碍服务没有启动,则返回null
。
+
+auto.windows#
+[v4.1.0新增]
+
+- <Array>
+
+当前所有窗口(AccessibilityWindowInfo)的数组,可能包括状态栏、输入法、当前应用窗口,弹出窗口、悬浮窗、分屏应用窗口等。可以分别获取每个窗口的布局信息。
+该函数需要Android 5.0以上才能运行。
+auto.root#
+[v4.1.0新增]
+
+- <UiObject>
+
+当前窗口的布局根元素。如果无障碍服务未启动或者WindowFilter均返回false,则会返回null
。
+如果不设置windowFilter,则当前窗口即为活跃的窗口(获取到焦点、正在触摸的窗口);如果设置了windowFilter,则获取的是过滤的窗口中的第一个窗口。
+如果系统是Android5.0以下,则始终返回当前活跃的窗口的布局根元素。
+auto.rootInActiveWindow#
+[v4.1.0新增]
+
+- <UiObject>
+
+当前活跃的窗口(获取到焦点、正在触摸的窗口)的布局根元素。如果无障碍服务未启动则为null
。
+auto.setWindowFilter(filter)#
+[v4.1.0新增]
+
+filter
<Function> 参数为窗口(AccessibilityWindowInfo),返回值为Boolean的函数。
+
+设置窗口过滤器。这个过滤器可以决定哪些窗口是目标窗口,并影响选择器的搜索。例如,如果想要选择器在所有窗口(包括状态栏、输入法等)中搜索,只需要使用以下代码:
+auto.setWindowFilter(function(window){
+ //不管是如何窗口,都返回true,表示在该窗口中搜索
+ return true;
+});
+
又例如,当前使用了分屏功能,屏幕上有Auto.js和QQ两个应用,但我们只想选择器对QQ界面进行搜索,则:
+auto.setWindowFilter(function(window){
+ // 对于应用窗口,他的title属性就是应用的名称,因此可以通过title属性来判断一个应用
+ return window.title == "QQ";
+});
+
选择器默认是在当前活跃的窗口中搜索,不会搜索诸如悬浮窗、状态栏之类的,使用WindowFilter则可以控制搜索的窗口。
+需要注意的是, 如果WindowFilter返回的结果均为false,则选择器的搜索结果将为空。
+另外setWindowFilter函数也会影响auto.windowRoots
的结果。
+该函数需要Android 5.0以上才有效。
+auto.windowRoots#
+[v4.1.0新增]
+
+- <Array>
+
+返回当前被WindowFilter过滤的窗口的布局根元素组成的数组。
+如果系统是Android5.0以下,则始终返回当前活跃的窗口的布局根元素的数组。
SimpleActionAutomator#
Stability: 2 - StableSimpleActionAutomator提供了一些模拟简单操作的函数,例如点击文字、模拟按键等。这些函数可以直接作为全局函数使用。
click(text[, i])#
@@ -4402,6 +4968,18 @@ selector()创建一个新的选择器。但一般情况不需要使用该函数,因为可以直接用相应条件的语句创建选择器。
由于历史遗留原因,本不应该这样设计(不应该让id()
, text()
等作为全局函数,而是应该用By.id()
, By.text()
),但为了后向兼容性只能保留这个设计。
这样的API设计会污染全局变量,后续可能会支持"去掉这些全局函数而使用By.*"的选项。
+UiSelector.algorithm(algorithm)#
+[v4.1.0新增]
+
+algorithm
<string> 搜索算法,可选的值有:
+DFS
深度优先算法,选择器的默认算法
+BFS
广度优先算法
+
+
+
+指定选择器的搜索算法。例如:
+log(selector().text("文本").algorithm("BFS").find());
+
广度优先在控件所在层次较低时,或者布局的层次不多时,通常能更快找到控件。
UiSelector.text(str)#
str
<string> 控件文本
@@ -6005,11 +6583,12 @@ clearImmediate(id)
用户界面: UI#
ui模块提供了编写用户界面的支持。
-带有ui的脚本的第一行必须使用"ui"
指定ui模式,否则脚本将不会以ui模式运行。正确示范:
+带有ui的脚本的的最前面必须使用"ui";
指定ui模式,否则脚本将不会以ui模式运行。正确示范:
"ui";
//脚本的其他代码
-
界面是由视图(View)组成的。View分成两种,控件(Widget)和布局(Layout)。控件(Widget)用来具体显示文字、图片、网页等,比如文本控件(text)用来显示文字,按钮控件(button)则可以显示一个按钮并提供点击效果,图片控件(img)则用来显示来自网络或者文件的图片,除此之外还有输入框控件(input)、进度条控件(progressbar)、单选复选框控件(checkbox)等;布局(Layout)则是装着一个或多个控件的"容器",用于控制在他里面的控件的位置,比如垂直布局(vertical)会把他里面的控件从上往下依次显示(即纵向排列),水平布局(horizontal)则会把他里面的控件从左往右依次显示(即横向排列),以及帧布局(frame),他会把他里面的控件直接在左上角显示,如果有多个控件,后面的控件会重叠在前面的控件上。
+字符串"ui"的前面可以有注释、空行和空格[v4.1.0新增],但是不能有其他代码。
+界面是由视图(View)组成的。View分成两种,控件(Widget)和布局(Layout)。控件(Widget)用来具体显示文字、图片、网页等,比如文本控件(text)用来显示文字,按钮控件(button)则可以显示一个按钮并提供点击效果,图片控件(img)则用来显示来自网络或者文件的图片,除此之外还有输入框控件(input)、进度条控件(progressbar)、单选复选框控件(checkbox)等;布局(Layout)则是装着一个或多个控件的"容器",用于控制在他里面的控件的位置,比如垂直布局(vertical)会把他里面的控件从上往下依次显示(即纵向排列),水平布局(horizontal)则会把他里面的控件从左往右依次显示(即横向排列),以及帧布局(frame),他会把他里面的控件直接在左上角显示,如果有多个控件,后面的控件会重叠在前面的控件上。
我们使用xml来编写界面,并通过ui.layout()
函数指定界面的布局xml。举个例子:
"ui";
ui.layout(
diff --git a/app/src/main/assets/docs/app.html b/app/src/main/assets/docs/app.html
index ca798aa33..b67caca8d 100644
--- a/app/src/main/assets/docs/app.html
+++ b/app/src/main/assets/docs/app.html
@@ -2,8 +2,8 @@
- App | Auto.js 3.0.0 文档
-
+ App | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -97,6 +97,11 @@
目录
- app.intent(options)
- app.startActivity(options)
- app.sendBroadcast(options)
+- app.startService(options)
+- app.sendBroadcast(name)
+- app.intentToShell(options)
+- app.parseUri(uri)
+- app.getUriForFile(path)
@@ -173,7 +178,7 @@ app.getPackageName(appName)#
用其他应用查看文件。文件不存在的情况由查看文件的应用处理。
如果找不出可以查看该文件的应用,则抛出ActivityNotException
。
@@ -181,7 +186,7 @@ app.viewFile(path)#
用其他应用编辑文件。文件不存在的情况由编辑文件的应用处理。
如果找不出可以编辑该文件的应用,则抛出ActivityNotException
。
@@ -245,17 +250,36 @@ app.sendEmail(options)#
-- options <Object> 选项,包括:
-action
<string> 意图的Action,指意图要完成的动作,是一个字符串常量,比如"android.intent.action.SEND"。当action以"android.intent.action"开头时,可以省略前缀,直接用"SEND"代替。常见的action参见常用的意图动作
。
-type
<string> 意图的MimeType,表示和该意图直接相关的数据的类型,表示比如"text/plain"为纯文本类型。
-data
<string> 意图的Data,表示和该意图直接相关的数据,是一个Uri, 可以是文件路径或者Url等。例如要打开一个文件, action为"android.intent.action.VIEW", data为"file:///sdcard/1.txt"。
-category
<Array> 意图的类别。比较少用。
-packageName
<string> 目标包名
-className
<string> 目标Activity或Service等组件的名称
-extras
<Object> 以键值对构成的这个Intent的Extras(额外信息)。提供该意图的其他信息,例如发送邮件时的邮件标题、邮件正文。
+options
<Object> 选项,包括:
+
+action
<string> 意图的Action,指意图要完成的动作,是一个字符串常量,比如"android.intent.action.SEND"。当action以"android.intent.action"开头时,可以省略前缀,直接用"SEND"代替。参见Actions。
+
+type
<string> 意图的MimeType,表示和该意图直接相关的数据的类型,表示比如"text/plain"为纯文本类型。
+
+data
<string> 意图的Data,表示和该意图直接相关的数据,是一个Uri, 可以是文件路径或者Url等。例如要打开一个文件, action为"android.intent.action.VIEW", data为"file:///sdcard/1.txt"。
+
+category
<Array> 意图的类别。比较少用。参见Categories。
+
+packageName
<string> 目标包名
+
+className
<string> 目标Activity或Service等组件的名称
+
+extras
<Object> 以键值对构成的这个Intent的Extras(额外信息)。提供该意图的其他信息,例如发送邮件时的邮件标题、邮件正文。参见Extras。
+
+flags
<Array> intent的标识,字符串数组,例如["activity_new_task", "grant_read_uri_permission"]
。参见Flags。
+[v4.1.0新增]
+
+root
<Boolea> 是否以root权限启动、发送该intent。使用该参数后,不能使用context.startActivity()
等方法,而应该直接使用诸如app.startActivity({...})
的方法。
+[v4.1.0新增]
+
@@ -267,18 +291,74 @@ app.sendEmail(options)安卓Intent或参考Android指南: Intent。
+context.startActivity(i);
+需要注意的是,除非应用专门暴露Activity出来,否则在没有root权限的情况下使用intent是无法跳转到特定Activity、应用的特定界面的。例如我们能通过Intent跳转到QQ的分享界面,是因为QQ对外暴露了分享的Activity;而在没有root权限的情况下,我们无法通过intent跳转到QQ的设置界面,因为QQ并没有暴露这个Activity。
+但如果有root权限,则在intent的参数加上"root": true
即可。例如使用root权限跳转到Auto.js的设置界面为:
+app.startActivity({
+ packageName: "org.autojs.autojs",
+ className: "org.autojs.autojs.ui.settings.SettingsActivity_",
+ root: true
+});
+
另外,关于intent的参数如何获取的问题,一些intent是意外发现并且在网络中传播的(例如跳转QQ聊天窗口是因为QQ给网页提供了跳转到客服QQ的方法),如果要自己获取活动的intent的参数,可以通过例如"intent记录","隐式启动"等应用拦截内部intent或者查询暴露的intent。其中拦截内部intent需要XPosed框架,或者可以通过反编译等手段获取参数。总之,没有简单直接的方法。
+更多信息,请百度安卓Intent或参考Android指南: Intent。
app.startActivity(options)#
根据选项构造一个Intent,并启动该Activity。
-app.sendBroadcast(options)#
+app.startActivity({
+ action: "SEND",
+ type: "text/plain",
+ data: "file:///sdcard/1.txt"
+});
+
app.sendBroadcast(options)#
根据选项构造一个Intent,并发送该广播。
+app.startService(options)#
+
+options
<Object> 选项
+
+根据选项构造一个Intent,并启动该服务。
+app.sendBroadcast(name)#
+[v4.1.0新增]
+
+name
<string> 特定的广播名称,包括:
+inspect_layout_hierarchy
布局层次分析
+inspect_layout_bounds
布局范围
+
+
+
+发送以上特定名称的广播可以触发Auto.js的布局分析,方便脚本调试。这些广播在Auto.js发送才有效,在打包的脚本上运行将没有任何效果。
+app.sendBroadcast("inspect_layout_bounds");
+
app.intentToShell(options)#
+[v4.1.0新增]
+
+options
<Object> 选项
+
+根据选项构造一个Intent,转换为对应的shell的intent命令的参数。
+例如:
+shell("am start " + app.intentToShell({
+ packageName: "org.autojs.autojs",
+ className: "org.autojs.autojs.ui.settings.SettingsActivity_"
+}), true);
+
参见intent参数的规范。
+app.parseUri(uri)#
+[v4.1.0新增]
+
+uri
<string> 一个代表Uri的字符串,例如"file:///sdcard/1.txt", "https://www.autojs.org"
+- 返回 <Uri> 一个代表Uri的对象,参见android.net.Uri。
+
+解析uri字符串并返回相应的Uri对象。即使Uri格式错误,该函数也会返回一个Uri对象,但之后如果访问该对象的scheme, path等值可能因解析失败而返回null
。
+需要注意的是,在高版本Android上,由于系统限制直接在Uri暴露文件的绝对路径,因此如果uri字符串是文件file://...
,返回的Uri会是诸如content://...
的形式。
+app.getUriForFile(path)#
+[v4.1.0新增]
+
+path
<string> 文件路径,例如"/sdcard/1.txt"
+- 返回 <Uri> 一个指向该文件的Uri的对象,参见android.net.Uri。
+
+从一个文件路径创建一个uri对象。需要注意的是,在高版本Android上,由于系统限制直接在Uri暴露文件的绝对路径,因此返回的Uri会是诸如content://...
的形式。
diff --git a/app/src/main/assets/docs/assets/fonts.css b/app/src/main/assets/docs/assets/fonts.css
new file mode 100644
index 000000000..40e557983
--- /dev/null
+++ b/app/src/main/assets/docs/assets/fonts.css
@@ -0,0 +1,48 @@
+/* latin-ext */
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 400;
+ src: local('Lato Italic'), local('Lato-Italic'), url(fonts/S6u8w4BMUTPHjxsAUi-qJCY.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+ }
+ /* latin */
+ @font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 400;
+ src: local('Lato Italic'), local('Lato-Italic'), url(fonts/S6u8w4BMUTPHjxsAXC-q.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+ }
+ /* latin-ext */
+ @font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Lato Regular'), local('Lato-Regular'), url(fonts/S6uyw4BMUTPHjxAwXjeu.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+ }
+ /* latin */
+ @font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Lato Regular'), local('Lato-Regular'), url(fonts/S6uyw4BMUTPHjx4wXg.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+ }
+ /* latin-ext */
+ @font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 700;
+ src: local('Lato Bold'), local('Lato-Bold'), url(fonts/S6u9w4BMUTPHh6UVSwaPGR_p.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+ }
+ /* latin */
+ @font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 700;
+ src: local('Lato Bold'), local('Lato-Bold'), url(fonts/S6u9w4BMUTPHh6UVSwiPGQ.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+ }
\ No newline at end of file
diff --git a/app/src/main/assets/docs/assets/fonts/S6u9w4BMUTPHh6UVSwiPGQ.woff2 b/app/src/main/assets/docs/assets/fonts/S6u9w4BMUTPHh6UVSwiPGQ.woff2
new file mode 100644
index 000000000..d88f1af8c
Binary files /dev/null and b/app/src/main/assets/docs/assets/fonts/S6u9w4BMUTPHh6UVSwiPGQ.woff2 differ
diff --git a/app/src/main/assets/docs/assets/fonts/S6uyw4BMUTPHjx4wXg.woff2 b/app/src/main/assets/docs/assets/fonts/S6uyw4BMUTPHjx4wXg.woff2
new file mode 100644
index 000000000..b14c76cab
Binary files /dev/null and b/app/src/main/assets/docs/assets/fonts/S6uyw4BMUTPHjx4wXg.woff2 differ
diff --git a/app/src/main/assets/docs/canvas.html b/app/src/main/assets/docs/canvas.html
index 46bfd8c1d..15d58806a 100644
--- a/app/src/main/assets/docs/canvas.html
+++ b/app/src/main/assets/docs/canvas.html
@@ -2,8 +2,8 @@
- Canvas | Auto.js 3.0.0 文档
-
+ Canvas | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/console.html b/app/src/main/assets/docs/console.html
index 3a12754ca..30ca88cf2 100644
--- a/app/src/main/assets/docs/console.html
+++ b/app/src/main/assets/docs/console.html
@@ -2,8 +2,8 @@
- Console | Auto.js 3.0.0 文档
-
+ Console | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -84,10 +84,14 @@
目录
- console.warn([data][, ...args])
- console.error([data][, ...args])
- console.assert(value, message)
+- console.time([label])
+- console.timeEnd(label)
+- console.trace([data][, ...args])
- console.input(data[, ...args])
- console.rawInput(data[, ...args])
- console.setSize(w, h)
- console.setPosition(x, y)
+- console.setGlobalLogConfig(config)
- print(text)
@@ -107,8 +111,8 @@ console.clear()#
-data
-...args
+data
<any>
+...args
<any>
打印到控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 printf(3) 中的代替值(参数都会传给 util.format())。
const count = 5;
@@ -120,26 +124,26 @@ console.log([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以灰色字体显示。输出优先级低于log,用于输出观察性质的信息。
console.info([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以绿色字体显示。输出优先级高于log, 用于输出重要信息。
console.warn([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以蓝色字体显示。输出优先级高于info, 用于输出警告信息。
console.error([data][, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log类似,但输出结果以红色字体显示。输出优先级高于warn, 用于输出错误信息。
console.assert(value, message)#
@@ -150,10 +154,46 @@ console.assert(value, message)#
+
console.time([label])#
+[v4.1.0新增]
+
+label
<String> 计时器标签,可省略
+
+启动一个定时器,用以计算一个操作的持续时间。
+定时器由一个唯一的 label
标识。
+当调用 console.timeEnd()
时,可以使用相同的 label
来停止定时器,并以毫秒为单位将持续时间输出到控制台。
+重复启动同一个标签的定时器会覆盖之前启动同一标签的定时器。
+console.timeEnd(label)#
+[v4.1.0新增]
+
+label
<String> 计时器标签
+
+停止之前通过调用 console.time()
启动的定时器,并打印结果到控制台。
+调用 console.timeEnd()
后定时器会被删除。如果不存在标签指定的定时器则会打印 NaNms
。
+console.time('求和');
+var sum = 0;
+for(let i = 0; i < 100000; i++){
+ sum += i;
+}
+console.timeEnd('求和');
+// 打印 求和: xxx ms
+
+console.trace([data][, ...args])#
+[v4.1.0新增]
+
+data
<any>
+...args
<any>
+
+与console.log类似,同时会打印出调用这个函数所在的调用栈信息(即当前运行的文件、行数等信息)。
+console.trace('Show me');
+// 打印: (堆栈跟踪会根据被调用的跟踪的位置而变化)
+// Show me
+// at <test>:7
+
+console.input(data[, ...args])#
-data
-...args
+data
<any>
+...args
<any>
与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串用eval计算后返回。
部分机型可能会有控制台不显示输入框的情况,属于bug。
@@ -164,8 +204,8 @@ console.assert(value, message)#
-data
-...args
+data
<any>
+...args
<any>
与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串直接返回。
部分机型可能会有控制台不显示输入框的情况,属于bug。
@@ -191,7 +231,24 @@ console.assert(value, message)#
+console.setGlobalLogConfig(config)#
+[v4.1.0新增]
+
+config
<Object> 日志配置,可选的项有:
+
+
+设置日志保存的路径和配置。例如把日志保存到"/sdcard/1.txt":
+console.setGlobalLogConfig({
+ "file": "/sdcard/1.txt"
+});
+
注意该函数会影响所有脚本的日志记录。
+print(text)#
diff --git a/app/src/main/assets/docs/coordinates-based-automation.html b/app/src/main/assets/docs/coordinates-based-automation.html
index 2a3cd81fb..4854db8f4 100644
--- a/app/src/main/assets/docs/coordinates-based-automation.html
+++ b/app/src/main/assets/docs/coordinates-based-automation.html
@@ -2,8 +2,8 @@
- 基于坐标的触摸模拟 | Auto.js 3.0.0 文档
-
+ 基于坐标的触摸模拟 | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/device.html b/app/src/main/assets/docs/device.html
index 39d288ea2..865171b4f 100644
--- a/app/src/main/assets/docs/device.html
+++ b/app/src/main/assets/docs/device.html
@@ -2,8 +2,8 @@
- Device | Auto.js 3.0.0 文档
-
+ Device | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/dialogs.html b/app/src/main/assets/docs/dialogs.html
index 29ae1be51..2e8d7a3b5 100644
--- a/app/src/main/assets/docs/dialogs.html
+++ b/app/src/main/assets/docs/dialogs.html
@@ -2,8 +2,8 @@
- Dialogs | Auto.js 3.0.0 文档
-
+ Dialogs | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -99,6 +99,9 @@
目录
- 事件:
multi_choice
- 事件:
input
- 事件:
input_change
+- dialog.getProgress()
+- dialog.getMaxProgress()
+- dialog.getActionButton(action)
@@ -271,11 +274,11 @@ dialogs.build(properties)<string> | <number> 对话框列表的选项的文字颜色
itemsSelectMode
<string> 对话框列表的选项选择模式,可以为:
select
普通选择模式
-singleChoice
单选模式
-multiChoice
多选模式
+single
单选模式
+multi
多选模式
-itemsSelectedIndex
<number> | <Array> 对话框列表中???
+itemsSelectedIndex
<number> | <Array> 对话框列表中预先选中的项目索引,如果是单选模式为一个索引;多选模式则为数组
positive
<string> 对话框确定按钮的文字内容(最右边按钮)
positiveColor
<string> | <number> 对话框确定按钮的文字颜色(最右边按钮)
neutral
<string> 对话框中立按钮的文字内容(最左边按钮)
@@ -317,9 +320,9 @@ dialogs.build(properties)#
+
+- 返回 <number>
+
+获取当前进度条的进度值,是一个整数
+dialog.getMaxProgress()#
+
+- 返回 <number>
+
+获取当前进度条的最大进度值,是一个整数
+dialog.getActionButton(action)#
+
+action
<string> 动作,包括:
+positive
+negative
+neutral
+
+
+
+
diff --git a/app/src/main/assets/docs/documentation.html b/app/src/main/assets/docs/documentation.html
index 2d07b665c..3e314ef11 100644
--- a/app/src/main/assets/docs/documentation.html
+++ b/app/src/main/assets/docs/documentation.html
@@ -2,8 +2,8 @@
- 关于本文档 | Auto.js 3.0.0 文档
-
+ 关于本文档 | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/engines.html b/app/src/main/assets/docs/engines.html
index f58ed3d8f..3f9419288 100644
--- a/app/src/main/assets/docs/engines.html
+++ b/app/src/main/assets/docs/engines.html
@@ -2,8 +2,8 @@
- Engines | Auto.js 3.0.0 文档
-
+ Engines | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -185,6 +185,10 @@
engines.stopAllAndToast()#
返回当前脚本的脚本引擎对象(ScriptEngine)
+[v4.1.0新增]
+特别的,该对象可以通过execArgv
来获取他的运行参数,包括外部参数、intent等。例如:
+log(engines.myEngine().execArgv);
+
普通脚本的运行参数通常为空,通过定时任务的广播启动的则可以获取到启动的intent。
engines.all()#
- 返回 <Array>
diff --git a/app/src/main/assets/docs/events.html b/app/src/main/assets/docs/events.html
index b3f436607..b601d5e00 100644
--- a/app/src/main/assets/docs/events.html
+++ b/app/src/main/assets/docs/events.html
@@ -2,8 +2,8 @@
- Events | Auto.js 3.0.0 文档
-
+ Events | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/files.html b/app/src/main/assets/docs/files.html
index a182e972d..01ffe297d 100644
--- a/app/src/main/assets/docs/files.html
+++ b/app/src/main/assets/docs/files.html
@@ -2,8 +2,8 @@
- Files | Auto.js 3.0.0 文档
-
+ Files | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/floaty.html b/app/src/main/assets/docs/floaty.html
index c68ae3a6a..145e078fd 100644
--- a/app/src/main/assets/docs/floaty.html
+++ b/app/src/main/assets/docs/floaty.html
@@ -2,8 +2,8 @@
- Floaty | Auto.js 3.0.0 文档
-
+ Floaty | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/globals.html b/app/src/main/assets/docs/globals.html
index 0635fe447..1301d20e8 100644
--- a/app/src/main/assets/docs/globals.html
+++ b/app/src/main/assets/docs/globals.html
@@ -2,8 +2,8 @@
- 全局变量与函数 | Auto.js 3.0.0 文档
-
+ 全局变量与函数 | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -90,6 +90,8 @@
目录
- requiresApi(api)
- requiresAutojsVersion(version)
- runtime.requestPermissions(permissions)
+- runtime.loadJar(path)
+- runtime.loadDex(path)
- context
@@ -232,6 +234,23 @@ runtime.requestPermissions(permissions)Permissions Overview。(并没有用)
+runtime.loadJar(path)#
+
+path
<string> jar文件路径
+
+加载目标jar文件,加载成功后将可以使用该Jar文件的类。
+// 加载jsoup.jar
+runtime.loadJar("./jsoup.jar");
+// 使用jsoup解析html
+importClass(org.jsoup.Jsoup);
+log(Jsoup.parse(files.read("./test.html")));
+
(jsoup是一个Java实现的解析Html DOM的库,可以在Jsoup下载)
+runtime.loadDex(path)#
+
+path
<string> dex文件路径
+
+加载目标dex文件,加载成功后将可以使用该dex文件的类。
+因为加载jar实际上是把jar转换为dex再加载的,因此加载dex文件会比jar文件快得多。可以使用Android SDK的build tools的dx工具把jar转换为dex。
context#
全局变量。一个android.content.Context对象。
注意该对象为ApplicationContext,因此不能用于界面、对话框等的创建。
diff --git a/app/src/main/assets/docs/http.html b/app/src/main/assets/docs/http.html
index 1d49d5480..d3f85e40f 100644
--- a/app/src/main/assets/docs/http.html
+++ b/app/src/main/assets/docs/http.html
@@ -2,8 +2,8 @@
- HTTP | Auto.js 3.0.0 文档
-
+ HTTP | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/images.html b/app/src/main/assets/docs/images.html
index 9e009677e..7cb1f7c3d 100644
--- a/app/src/main/assets/docs/images.html
+++ b/app/src/main/assets/docs/images.html
@@ -2,8 +2,8 @@
- colors | Auto.js 3.0.0 文档
-
+ colors | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -100,19 +100,35 @@
目录
- colors.MAGENTA
- colors.TRANSPARENT
- Images
-- images.requestScreenCapture([landscape])
-- images.captureScreen()
-- images.captureScreen(path)
-- images.pixel(image, x, y)
-- images.copy(img)
-- images.save(image, path[, format = "png", quality = 100])
+- 图片处理
- images.read(path)
- images.load(url)
+- images.copy(img)
+- images.save(image, path[, format = "png", quality = 100])
- images.fromBase64(base64)
- images.toBase64(img[, format = "png", quality = 100])
- images.fromBytes(bytes)
- images.toBytes(img[, format = "png", quality = 100])
- images.clip(img, x, y, w, h)
+- images.resize(img, size[, interpolation])
+- images.scale(img, fx, fy[, interpolation])
+- images.rotate(img, degress[, x, y])
+- images.concat(img1, image2[, direction])
+- images.grayscale(img)
+- image.threshold(img, threshold, maxVal[, type])
+- images.adaptiveThreshold(img, maxValue, adaptiveMethod, thresholdType, blockSize, C)
+- images.cvtColor(img, code[, dstCn])
+- images.inRange(img, lowerBound, upperBound)
+- images.interval(img, color, interval)
+- images.blur(img, size[, anchor, type])
+- images.medianBlur(img, size)
+- images.gaussianBlur(img, size[, sigmaX, sigmaY, type])
+- images.matToImage(mat)
+- 找图找色
+- images.requestScreenCapture([landscape])
+- images.captureScreen()
+- images.captureScreen(path)
+- images.pixel(image, x, y)
- images.findColor(image, color, options)
- images.findColorInRegion(img, color, x, y[, width, height, threshold])
- images.findColorEquals(img, color[, x, y, width, height])
@@ -120,6 +136,21 @@ 目录
- images.detectsColor(image, color, x, y[, threshold = 16, algorithm = "diff"])
- images.findImage(img, template[, options])
- images.findImageInRegion(img, template, x, y[, width, height, threshold])
+- images.matchTemplate(img, template, options)
+
+
+- MatchingResult
- Image
@@ -246,60 +277,28 @@ colors.MAGENTA#
透明,颜色值 #00000000
Images#
-Stability: 2 - Stableimages模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、找色、找图等。
-images.requestScreenCapture([landscape])#
-
-landscape
<boolean> 布尔值, 表示将要执行的截屏是否为横屏。如果landscape为false, 则表示竖屏截图; true为横屏截图。
-
-向系统申请屏幕截图权限,返回是否请求成功。
-第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。
-这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()
。
-该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()
都调用一次。
-如果不指定landscape值,则截图方向由当前设备屏幕方向决定,因此务必注意执行该函数时的屏幕方向。
-建议在本软件界面运行该函数,在其他软件界面运行时容易出现一闪而过的黑屏现象。
-示例:
-
//请求截图
-if(!requestScreenCapture()){
- toast("请求截图失败");
- exit();
-}
-//连续截图10张图片(间隔1秒)并保存到存储卡目录
-for(var i = 0; i < 10; i++){
- captureScreen("/sdcard/screencapture" + i + ".png");
- sleep(1000);
-}
-
该函数也可以作为全局函数使用。
-images.captureScreen()#
-截取当前屏幕并返回一个Image对象。
-没有截图权限时执行该函数会抛出SecurityException。
-该函数不会返回null,两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。
-截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。
-另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后(一般为几百ms)才返回截图。
-例子:
-//请求横屏截图
-requestScreenCapture(true);
-//截图
-var img = captureScreen();
-//获取在点(100, 100)的颜色值
-var color = images.pixel(img, 100, 100);
-//显示该颜色值
-toast(colors.toString(color));
-
该函数也可以作为全局函数使用。
-images.captureScreen(path)#
+Stability: 2 - Stableimages模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、旋转、二值化、找色找图等。
+该模块分为两个部分,找图找色部分和图片处理部分。
+需要注意的是,image对象创建后尽量在不使用时进行回收,同时避免循环创建大量图片。因为图片是一种占用内存比较大的资源,尽管Auto.js通过各种方式(比如图片缓存机制、垃圾回收时回收图片、脚本结束时回收所有图片)尽量降低图片资源的泄漏和内存占用,但是糟糕的代码仍然可以占用大量内存。
+Image对象通过调用recycle()
函数来回收。例如:
+// 读取图片
+var img = images.read("./1.png");
+//对图片进行操作
+...
+// 回收图片
+img.recycle();
+
例外的是,caputerScreen()
返回的图片不需要回收。
+图片处理#
+images.read(path)#
截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。
-该函数不会返回任何值。该函数也可以作为全局函数使用。
-images.pixel(image, x, y)#
+ 读取在路径path的图片文件并返回一个Image对象。如果文件不存在或者文件无法解码则返回null。
+images.load(url)#
返回图片image在点(x, y)处的像素的ARGB值。
-该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。
-坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。
+ 加载在地址URL的网络图片并返回一个Image对象。如果地址不存在或者图片无法解码则返回null。
images.copy(img)#
img
<Image> 图片
@@ -323,17 +322,7 @@ images.save(image, path[, format = "png", quality = 100])images.read(path)#
-
-path
<string> 图片路径
-
-读取在路径path的图片文件并返回一个Image对象。如果文件不存在或者文件无法解码则返回null。
-images.load(url)#
-
-url
<string> 图片URL地址
-
-加载在地址URL的网络图片并返回一个Image对象。如果地址不存在或者图片无法解码则返回null。
-images.fromBase64(base64)#
+images.fromBase64(base64)#
base64
<string> 图片的Base64数据
- 返回 <Image>
@@ -383,7 +372,263 @@ images.clip(img, x, y, w, h)#
+images.resize(img, size[, interpolation])#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 两个元素的数组[w, h],分别表示宽度和高度;如果只有一个元素,则宽度和高度相等
+interpolation
<string> 插值方法,可选,默认为"LINEAR"(线性插值),可选的值有:
+
+NEAREST
最近邻插值
+LINEAR
线性插值(默认)
+AREA
区域插值
+CUBIC
三次样条插值
+LANCZOS4
Lanczos插值
+参见InterpolationFlags
+
+
+返回 <Image>
+
+
+调整图片大小,并返回调整后的图片。例如把图片放缩为200*300:images.resize(img, [200, 300])
。
+
+images.scale(img, fx, fy[, interpolation])#
+[v4.1.0新增]
+
+img
<Image> 图片
+fx
<number> 宽度放缩倍数
+fy
<number> 高度放缩倍数
+interpolation
<string> 插值方法,可选,默认为"LINEAR"(线性插值),可选的值有:
+
+NEAREST
最近邻插值
+LINEAR
线性插值(默认)
+AREA
区域插值
+CUBIC
三次样条插值
+LANCZOS4
Lanczos插值
+参见InterpolationFlags
+
+
+返回 <Image>
+
+
+放缩图片,并返回放缩后的图片。例如把图片变成原来的一半:images.scale(img, 0.5, 0.5)
。
+
+images.rotate(img, degress[, x, y])#
+[v4.1.0新增]
+
+img
<Image> 图片
+degress
<number> 旋转角度。
+x
<number> 旋转中心x坐标,默认为图片中点
+y
<number> 旋转中心y坐标,默认为图片中点
+- 返回 <Image>
+
+将图片逆时针旋转degress度,返回旋转后的图片对象。
+例如逆时针旋转90度为images.rotate(img, 90)
。
+images.concat(img1, image2[, direction])#
+[v4.1.0新增]
+
+img1
<Image> 图片1
+img2
<Image> 图片2
+- direction <string> 连接方向,默认为"RIGHT",可选的值有:
+LEFT
将图片2接到图片1左边
+RIGHT
将图片2接到图片1右边
+TOP
将图片2接到图片1上边
+BOTTOM
将图片2接到图片1下边
+
+
+- 返回 <Image>
+
+连接两张图片,并返回连接后的图像。如果两张图片大小不一致,小的那张将适当居中。
+images.grayscale(img)#
+[v4.1.0新增]
+
+img
<Image> 图片
+- 返回 <Image>
+
+灰度化图片,并返回灰度化后的图片。
+image.threshold(img, threshold, maxVal[, type])#
+[v4.1.0新增]
+
+img
<Image> 图片
+threshold
<number> 阈值
+maxVal
<number> 最大值
+type
<string> 阈值化类型,默认为"BINARY",参见ThresholdTypes, 可选的值:
+
+BINARY
+BINARY_INV
+TRUNC
+TOZERO
+TOZERO_INV
+OTSU
+TRIANGLE
+
+
+返回 <Image>
+
+
+将图片阈值化,并返回处理后的图像。可以用这个函数进行图片二值化。例如:images.threshold(img, 100, 255, "BINARY")
,这个代码将图片中大于100的值全部变成255,其余变成0,从而达到二值化的效果。如果img是一张灰度化图片,这个代码将会得到一张黑白图片。
+可以参考有关博客(比如threshold函数的使用)或者OpenCV文档threshold。
+images.adaptiveThreshold(img, maxValue, adaptiveMethod, thresholdType, blockSize, C)#
+[v4.1.0新增]
+
+img
<Image> 图片
+maxValue
<number> 最大值
+adaptiveMethod
<string> 在一个邻域内计算阈值所采用的算法,可选的值有:
+MEAN_C
计算出领域的平均值再减去参数C的值
+GAUSSIAN_C
计算出领域的高斯均值再减去参数C的值
+
+
+thresholdType
<string> 阈值化类型,可选的值有:
+BINARY
+BINARY_INV
+
+
+blockSize
<number> 邻域块大小
+C
<number> 偏移值调整量
+- 返回 <Image>
+
+对图片进行自适应阈值化处理,并返回处理后的图像。
+可以参考有关博客(比如threshold与adaptiveThreshold)或者OpenCV文档adaptiveThreshold。
+images.cvtColor(img, code[, dstCn])#
+[v4.1.0新增]
+
+img
<Image> 图片
+code
<string> 颜色空间转换的类型,可选的值有一共有205个(参见ColorConversionCodes),这里只列出几个:
+BGR2GRAY
BGR转换为灰度
+BGR2HSV
BGR转换为HSV
+- ``
+
+
+dstCn
<number> 目标图像的颜色通道数量,如果不填写则根据其他参数自动决定。
+- 返回 <Image>
+
+对图像进行颜色空间转换,并返回转换后的图像。
+可以参考有关博客(比如颜色空间转换)或者OpenCV文档cvtColor。
+images.inRange(img, lowerBound, upperBound)#
+[v4.1.0新增]
+
+img
<Image> 图片
+lowerBound
<string> | <number> 颜色下界
+upperBound
<string> | <number> 颜色下界
+- 返回 <Image>
+
+将图片二值化,在lowerBound~upperBound范围以外的颜色都变成0,在范围以内的颜色都变成255。
+例如images.inRange(img, "#000000", "#222222")
。
+images.interval(img, color, interval)#
+[v4.1.0新增]
+
+将图片二值化,在color-interval ~ color+interval范围以外的颜色都变成0,在范围以内的颜色都变成255。这里对color的加减是对每个通道而言的。
+例如images.interval(img, "#888888", 16)
,每个通道的颜色值均为0x88,加减16后的范围是[0x78, 0x98],因此这个代码将把#787878~#989898的颜色变成#FFFFFF,而把这个范围以外的变成#000000。
+images.blur(img, size[, anchor, type])#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 定义滤波器的大小,如[3, 3]
+anchor
<Array> 指定锚点位置(被平滑点),默认为图像中心
+type
<string> 推断边缘像素类型,默认为"DEFAULT",可选的值有:
+CONSTANT
iiiiii|abcdefgh|iiiiiii with some specified i
+REPLICATE
aaaaaa|abcdefgh|hhhhhhh
+REFLECT
fedcba|abcdefgh|hgfedcb
+WRAP
cdefgh|abcdefgh|abcdefg
+REFLECT_101
gfedcb|abcdefgh|gfedcba
+TRANSPARENT
uvwxyz|abcdefgh|ijklmno
+REFLECT101
same as BORDER_REFLECT_101
+DEFAULT
same as BORDER_REFLECT_101
+ISOLATED
do not look outside of ROI
+
+
+- 返回 <Image>
+
+对图像进行模糊(平滑处理),返回处理后的图像。
+可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档blur。
+images.medianBlur(img, size)#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 定义滤波器的大小,如[3, 3]
+- 返回 <Image>
+
+对图像进行中值滤波,返回处理后的图像。
+可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档blur。
+images.gaussianBlur(img, size[, sigmaX, sigmaY, type])#
+[v4.1.0新增]
+
+img
<Image> 图片
+size
<Array> 定义滤波器的大小,如[3, 3]
+sigmaX
<number> x方向的标准方差,不填写则自动计算
+sigmaY
<number> y方向的标准方差,不填写则自动计算
+type
<string> 推断边缘像素类型,默认为"DEFAULT",参见images.blur
+- 返回 <Image>
+
+对图像进行高斯模糊,返回处理后的图像。
+可以参考有关博客(比如实现图像平滑处理)或者OpenCV文档GaussianBlur。
+images.matToImage(mat)#
+[v4.1.0新增]
+
+mat
<Mat> OpenCV的Mat对象
+- 返回 <Image>
+
+把Mat对象转换为Image对象。
+找图找色#
+images.requestScreenCapture([landscape])#
+
+landscape
<boolean> 布尔值, 表示将要执行的截屏是否为横屏。如果landscape为false, 则表示竖屏截图; true为横屏截图。
+
+向系统申请屏幕截图权限,返回是否请求成功。
+第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。
+这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()
。
+该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()
都调用一次。
+如果不指定landscape值,则截图方向由当前设备屏幕方向决定,因此务必注意执行该函数时的屏幕方向。
+建议在本软件界面运行该函数,在其他软件界面运行时容易出现一闪而过的黑屏现象。
+示例:
+
//请求截图
+if(!requestScreenCapture()){
+ toast("请求截图失败");
+ exit();
+}
+//连续截图10张图片(间隔1秒)并保存到存储卡目录
+for(var i = 0; i < 10; i++){
+ captureScreen("/sdcard/screencapture" + i + ".png");
+ sleep(1000);
+}
+
该函数也可以作为全局函数使用。
+images.captureScreen()#
+截取当前屏幕并返回一个Image对象。
+没有截图权限时执行该函数会抛出SecurityException。
+该函数不会返回null,两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。
+截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。
+另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后(一般为几百ms)才返回截图。
+例子:
+//请求横屏截图
+requestScreenCapture(true);
+//截图
+var img = captureScreen();
+//获取在点(100, 100)的颜色值
+var color = images.pixel(img, 100, 100);
+//显示该颜色值
+toast(colors.toString(color));
+
该函数也可以作为全局函数使用。
+images.captureScreen(path)#
+
+path
<string> 截图保存路径
+
+截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。
+该函数不会返回任何值。该函数也可以作为全局函数使用。
+images.pixel(image, x, y)#
+返回图片image在点(x, y)处的像素的ARGB值。
+该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。
+坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。
+images.findColor(image, color, options)#
image
<Image> 图片
color
<number> | <string> 要寻找的颜色的RGB值。如果是一个整数,则以0xRRGGBB的形式代表RGB值(A通道会被忽略);如果是字符串,则以"#RRGGBB"代表其RGB值。
@@ -561,7 +806,94 @@ images.findColorEquals(img, color[, x, y, width, height])#
+images.matchTemplate(img, template, options)#
+
[v4.1.0新增]
+
+img
<Image> 大图片
+template
<Image> 小图片(模板)
+options
<Object> 找图选项:
+
+- 返回 <MatchingResult>
+
+在大图片中搜索小图片,并返回搜索结果MatchingResult。该函数可以用于找图时找出多个位置,可以通过max参数控制最大的结果数量。也可以对匹配结果进行排序、求最值等操作。
+MatchingResult#
+[v4.1.0新增]
+matches#
+
+- <Array> 匹配结果的数组。
+
+数组的元素是一个Match对象:
+
+point
<Point> 匹配位置
+similarity
<number> 相似度
+
+例如:
+
var result = images.matchTemplate(img, template, {
+ max: 100
+});
+result.matches.forEach(match => {
+ log("point = " + match.point + ", similarity = " + match.similarity);
+});
+
points#
+
+- <Array> 匹配位置的数组。
+
+first()#
+
+- 返回 <Match>
+
+第一个匹配结果。如果没有任何匹配,则返回null
。
+last()#
+
+- 返回 <Match>
+
+最后一个匹配结果。如果没有任何匹配,则返回null
。
+leftmost()#
+
+- 返回 <Match>
+
+位于大图片最左边的匹配结果。如果没有任何匹配,则返回null
。
+topmost()#
+
+- 返回 <Match>
+
+位于大图片最上边的匹配结果。如果没有任何匹配,则返回null
。
+rightmost()#
+
+- 返回 <Match>
+
+位于大图片最右边的匹配结果。如果没有任何匹配,则返回null
。
+bottommost()#
+
+- 返回 <Match>
+
+位于大图片最下边的匹配结果。如果没有任何匹配,则返回null
。
+best()#
+
+- 返回 <Match>
+
+相似度最高的匹配结果。如果没有任何匹配,则返回null
。
+worst()#
+
+- 返回 <Match>
+
+相似度最低的匹配结果。如果没有任何匹配,则返回null
。
+sortBy(cmp)#
+
+- cmp <Function>|<string> 比较函数,或者是一个字符串表示排序方向。例如"left"表示将匹配结果按匹配位置从左往右排序、"top"表示将匹配结果按匹配位置从上往下排序,"left-top"表示将匹配结果按匹配位置从左往右、从上往下排序。方向包括
left
(左), top
(上), right
(右), bottom
(下)。
+- <MatchingResult>
+
+对匹配结果进行排序,并返回排序后的结果。
+var result = images.matchTemplate(img, template, {
+ max: 100
+});
+log(result.sortBy("top-right"));
+
Image#
表示一张图片,可以是截图的图片,或者本地读取的图片,或者从网络获取的图片。
Image.getWidth()#
返回以像素为单位图片宽度。
@@ -580,6 +912,7 @@ Image.pixel(x, y)#
findColor, findImage返回的对象。表示一个点(坐标)。
Point.x#
diff --git a/app/src/main/assets/docs/index.html b/app/src/main/assets/docs/index.html
index eb58ec90b..770dccdec 100644
--- a/app/src/main/assets/docs/index.html
+++ b/app/src/main/assets/docs/index.html
@@ -2,8 +2,8 @@
- Index | Auto.js 3.0.0 文档
-
+ Index | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/keys.html b/app/src/main/assets/docs/keys.html
index 5bf46617e..521833d9b 100644
--- a/app/src/main/assets/docs/keys.html
+++ b/app/src/main/assets/docs/keys.html
@@ -2,8 +2,8 @@
- Keys | Auto.js 3.0.0 文档
-
+ Keys | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/media.html b/app/src/main/assets/docs/media.html
index 68c9a7991..ec975664f 100644
--- a/app/src/main/assets/docs/media.html
+++ b/app/src/main/assets/docs/media.html
@@ -2,8 +2,8 @@
- Media | Auto.js 3.0.0 文档
-
+ Media | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/modules.html b/app/src/main/assets/docs/modules.html
index 06c952263..823b5edb8 100644
--- a/app/src/main/assets/docs/modules.html
+++ b/app/src/main/assets/docs/modules.html
@@ -2,8 +2,8 @@
- module (模块) | Auto.js 3.0.0 文档
-
+ module (模块) | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -83,7 +83,7 @@
目录
module (模块)#
Stability: 2 - StableAuto.js 有一个简单的模块加载系统。 在 Auto.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块)。
例子,假设有一个名为 foo.js 的文件:
-const circle = require('circle.js');
+var circle = require('circle.js');
console.log("半径为 4 的圆的面积是 %d", circle.area(4));
在第一行中,foo.js 加载了同一目录下的 circle.js 模块。
circle.js 文件的内容为:
@@ -91,7 +91,9 @@ module (模块)
- 综述 | Auto.js 3.0.0 文档
-
+ 综述 | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/qa.html b/app/src/main/assets/docs/qa.html
index 2aaf28af5..bc39a66e4 100644
--- a/app/src/main/assets/docs/qa.html
+++ b/app/src/main/assets/docs/qa.html
@@ -2,8 +2,8 @@
- Q & A | Auto.js 3.0.0 文档
-
+ Q & A | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -76,8 +76,9 @@
目录
- Q & A
@@ -89,35 +90,30 @@ 目录
Q & A#
如何定时运行脚本#
点击脚本右边的菜单按钮->更多->定时任务即可定时运行脚本,但是必须保持Auto.js后台运行(自启动白名单、电源管理白名单等)。同时,可以在脚本的开头使用device.wakeUp()
来唤醒屏幕;但是,Auto.js没有解锁屏幕的功能,因此难以在有锁屏密码的设备上达到效果。
-如何把图片和脚本一起打包,或者打包多个脚本#
-如果除了单脚本以外还有其他脚本、图片、音乐等资源一起打包,则需要使用项目打包功能。
-
-- 新建一个文件夹,命名为项目名称。
-- 在该文件夹下新建脚本,或者移动脚本到该文件夹,命名为main.js,表示主脚本。脚本打包后将会从该脚本开始运行。
-- 把其他资源或脚本放在该文件夹,并通过相对路径引用。
-- 通过文件夹菜单的"打包"功能来打包该项目
-
+定时任何如何获取外部参数#
+如果一个脚本是用intent"启动"的,比如定时任务中的特定事件(网络状态变化等)触发而启动的,则可以通过engines.myEngine().execArgv.intent
获取启动的intent,从而获取外部参数。
+如何把图片和脚本一起打包,或者打包多个脚本#
+如果除了单脚本以外还有其他脚本、图片、音乐等资源一起打包,则需要使用项目功能。
+点击Auto.js的"+"号,选择项目,填写项目名称、包名等信息以后,点击"√"即可新建一个项目。可以在项目中放多个脚本、模块、资源文件,点击项目工具栏的apk打包图标即可打包一个项目,点击工具栏可以重新配置项目。
例如,主脚本要读取同一文件夹下的图片1.png,再执行找图,则可以通过images.read("./1.png")
来读取,其中"./1.png"表示同一目录1.png图片;ui中的图片控件要引用同一文件夹的2.png图片则为<img src="file://2.png"/>
。Auto.js内置的函数和模块都支持相对路径,但是,其他情况则需要使用files.path()
函数来把相对路径转换为绝对路径。
-目前Auto.js还不支持项目的图形化管理,后续会加入。
-如何使打包的应用不显示主界面#
-需要使用项目打包功能。
-
-- 新建一个文件夹,命名为项目名称。
-- 在该文件夹下新建脚本,或者移动脚本到该文件夹,命名为main.js,表示主脚本。脚本打包后将会从该脚本开始运行。
-- 在该文件夹下新建一个project.json的文件,其内容如下:
{
-"name": "项目名称",
-"versionName": "1.0.0",
-"versionCode": 1,
-"packageName": "org.autojs.example",
-"main": "main.js",
-"launchConfig": {
- "hideLogs": true
+如何使打包的应用不显示主界面#
+需要使用项目功能。新建项目后,修改项目下的project.json
文件,增加以下条目:
+"launchConfig": {
+ "hideLogs": true
}
+
例如:
+{
+ "name": "项目名称",
+ "versionName": "1.0.0",
+ "versionCode": 1,
+ "packageName": "org.autojs.example",
+ "main": "main.js",
+ "launchConfig": {
+ "hideLogs": true
+ }
}
-
其中,项目名称改为自己的项目名称,"org.autojs.example"改成自己的包名,下面的"launchConfig"表示启动配置,"hideLogs"表示隐藏日志。
-- 通过文件夹菜单的"打包"功能来打包该项目
-
-有关项目打包和配置的更多信息,参见项目与项目配置(待补)。
+"launchConfig"表示启动配置,"hideLogs"表示隐藏日志。
+参见项目与项目配置。
Auto.js自带的模块和函数中没有的功能如何实现#
由于Auto.js支持直接调用Android的API,对于Auto.js没有内置的函数,可以直接通过修改Android代码为JavaScript代码实现。例如旋转图片的Android代码为:
import android.graphics.Bitmap;
diff --git a/app/src/main/assets/docs/sensors.html b/app/src/main/assets/docs/sensors.html
index f4c768df1..92acf0635 100644
--- a/app/src/main/assets/docs/sensors.html
+++ b/app/src/main/assets/docs/sensors.html
@@ -2,8 +2,8 @@
- Sensors | Auto.js 3.0.0 文档
-
+ Sensors | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/shell.html b/app/src/main/assets/docs/shell.html
index 3457d550d..92521f322 100644
--- a/app/src/main/assets/docs/shell.html
+++ b/app/src/main/assets/docs/shell.html
@@ -2,8 +2,8 @@
- shell函数 | Auto.js 3.0.0 文档
-
+ shell函数 | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/storages.html b/app/src/main/assets/docs/storages.html
index 382c36d2e..e9cb9b39a 100644
--- a/app/src/main/assets/docs/storages.html
+++ b/app/src/main/assets/docs/storages.html
@@ -2,8 +2,8 @@
- Storages | Auto.js 3.0.0 文档
-
+ Storages | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/threads.html b/app/src/main/assets/docs/threads.html
index d36ade17a..08dc2bfe1 100644
--- a/app/src/main/assets/docs/threads.html
+++ b/app/src/main/assets/docs/threads.html
@@ -2,8 +2,8 @@
- Threads | Auto.js 3.0.0 文档
-
+ Threads | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/timers.html b/app/src/main/assets/docs/timers.html
index 264743d5d..e7b586748 100644
--- a/app/src/main/assets/docs/timers.html
+++ b/app/src/main/assets/docs/timers.html
@@ -2,8 +2,8 @@
- Timers | Auto.js 3.0.0 文档
-
+ Timers | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/ui.html b/app/src/main/assets/docs/ui.html
index 3e830c804..784a9458e 100644
--- a/app/src/main/assets/docs/ui.html
+++ b/app/src/main/assets/docs/ui.html
@@ -2,8 +2,8 @@
- 用户界面: UI | Auto.js 3.0.0 文档
-
+ 用户界面: UI | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -191,11 +191,12 @@
目录
用户界面: UI#
ui模块提供了编写用户界面的支持。
-带有ui的脚本的第一行必须使用"ui"
指定ui模式,否则脚本将不会以ui模式运行。正确示范:
+带有ui的脚本的的最前面必须使用"ui";
指定ui模式,否则脚本将不会以ui模式运行。正确示范:
"ui";
//脚本的其他代码
-
界面是由视图(View)组成的。View分成两种,控件(Widget)和布局(Layout)。控件(Widget)用来具体显示文字、图片、网页等,比如文本控件(text)用来显示文字,按钮控件(button)则可以显示一个按钮并提供点击效果,图片控件(img)则用来显示来自网络或者文件的图片,除此之外还有输入框控件(input)、进度条控件(progressbar)、单选复选框控件(checkbox)等;布局(Layout)则是装着一个或多个控件的"容器",用于控制在他里面的控件的位置,比如垂直布局(vertical)会把他里面的控件从上往下依次显示(即纵向排列),水平布局(horizontal)则会把他里面的控件从左往右依次显示(即横向排列),以及帧布局(frame),他会把他里面的控件直接在左上角显示,如果有多个控件,后面的控件会重叠在前面的控件上。
+字符串"ui"的前面可以有注释、空行和空格[v4.1.0新增],但是不能有其他代码。
+界面是由视图(View)组成的。View分成两种,控件(Widget)和布局(Layout)。控件(Widget)用来具体显示文字、图片、网页等,比如文本控件(text)用来显示文字,按钮控件(button)则可以显示一个按钮并提供点击效果,图片控件(img)则用来显示来自网络或者文件的图片,除此之外还有输入框控件(input)、进度条控件(progressbar)、单选复选框控件(checkbox)等;布局(Layout)则是装着一个或多个控件的"容器",用于控制在他里面的控件的位置,比如垂直布局(vertical)会把他里面的控件从上往下依次显示(即纵向排列),水平布局(horizontal)则会把他里面的控件从左往右依次显示(即横向排列),以及帧布局(frame),他会把他里面的控件直接在左上角显示,如果有多个控件,后面的控件会重叠在前面的控件上。
我们使用xml来编写界面,并通过ui.layout()
函数指定界面的布局xml。举个例子:
"ui";
ui.layout(
diff --git a/app/src/main/assets/docs/util.html b/app/src/main/assets/docs/util.html
index 95a7ab292..b759edac7 100644
--- a/app/src/main/assets/docs/util.html
+++ b/app/src/main/assets/docs/util.html
@@ -2,8 +2,8 @@
- Util | Auto.js 3.0.0 文档
-
+ Util | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
diff --git a/app/src/main/assets/docs/widgets-based-automation.html b/app/src/main/assets/docs/widgets-based-automation.html
index d0dc5fecf..857f7dfdc 100644
--- a/app/src/main/assets/docs/widgets-based-automation.html
+++ b/app/src/main/assets/docs/widgets-based-automation.html
@@ -2,8 +2,8 @@
- 基于控件的操作 | Auto.js 3.0.0 文档
-
+ 基于控件的操作 | Auto.js 4.1.0 文档
+
@@ -61,7 +61,7 @@
- Auto.js 3.0.0 文档
+ Auto.js 4.1.0 文档
索引 |
@@ -78,6 +78,13 @@
目录
- auto([mode])
- auto.waitFor()
- auto.setMode(mode)
+- auto.setFlags(flags)
+- auto.serivce
+- auto.windows
+- auto.root
+- auto.rootInActiveWindow
+- auto.setWindowFilter(filter)
+- auto.windowRoots
- SimpleActionAutomator
@@ -92,6 +99,7 @@ 目录
- UiSelector
- selector()
+- UiSelector.algorithm(algorithm)
- UiSelector.text(str)
- UiSelector.textContains(str)
- UiSelector.textStartsWith(prefix)
@@ -222,6 +230,7 @@ auto([mode])auto();
auto.waitFor()#
检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
+因为该函数是阻塞的,因此除非是有协程特性,否则不能在ui模式下运行该函数,建议在ui模式下使用auto()
函数。
auto.setMode(mode)#
mode
<string> 模式
@@ -231,6 +240,72 @@ auto.setMode(mode)#
+[v4.1.0新增]
+
+flags
<string> | <Array> 一些标志,来启用和禁用某些特性,包括:
+findOnUiThread
使用该特性后,选择器搜索时会在主进程进行。该特性用于解决线程安全问题导致的次生问题,不过目前貌似已知问题并不是线程安全问题。
+useUsageStats
使用该特性后,将会以"使用情况统计"服务的结果来检测当前正在运行的应用包名(需要授予"查看使用情况统计"权限)。如果觉得currentPackage()返回的结果不太准确,可以尝试该特性。
+useShell
使用该特性后,将使用shell命令获取当前正在运行的应用的包名、活动名称,但是需要root权限。
+
+
+
+启用有关automator的一些特性。例如:
+
auto.setFlags(["findOnUiThread", "useShell"]);
+
auto.serivce#
+[v4.1.0新增]
+
+获取无障碍服务。如果无障碍服务没有启动,则返回null
。
+
+auto.windows#
+[v4.1.0新增]
+
+- <Array>
+
+当前所有窗口(AccessibilityWindowInfo)的数组,可能包括状态栏、输入法、当前应用窗口,弹出窗口、悬浮窗、分屏应用窗口等。可以分别获取每个窗口的布局信息。
+该函数需要Android 5.0以上才能运行。
+auto.root#
+[v4.1.0新增]
+
+- <UiObject>
+
+当前窗口的布局根元素。如果无障碍服务未启动或者WindowFilter均返回false,则会返回null
。
+如果不设置windowFilter,则当前窗口即为活跃的窗口(获取到焦点、正在触摸的窗口);如果设置了windowFilter,则获取的是过滤的窗口中的第一个窗口。
+如果系统是Android5.0以下,则始终返回当前活跃的窗口的布局根元素。
+auto.rootInActiveWindow#
+[v4.1.0新增]
+
+- <UiObject>
+
+当前活跃的窗口(获取到焦点、正在触摸的窗口)的布局根元素。如果无障碍服务未启动则为null
。
+auto.setWindowFilter(filter)#
+[v4.1.0新增]
+
+filter
<Function> 参数为窗口(AccessibilityWindowInfo),返回值为Boolean的函数。
+
+设置窗口过滤器。这个过滤器可以决定哪些窗口是目标窗口,并影响选择器的搜索。例如,如果想要选择器在所有窗口(包括状态栏、输入法等)中搜索,只需要使用以下代码:
+auto.setWindowFilter(function(window){
+ //不管是如何窗口,都返回true,表示在该窗口中搜索
+ return true;
+});
+
又例如,当前使用了分屏功能,屏幕上有Auto.js和QQ两个应用,但我们只想选择器对QQ界面进行搜索,则:
+auto.setWindowFilter(function(window){
+ // 对于应用窗口,他的title属性就是应用的名称,因此可以通过title属性来判断一个应用
+ return window.title == "QQ";
+});
+
选择器默认是在当前活跃的窗口中搜索,不会搜索诸如悬浮窗、状态栏之类的,使用WindowFilter则可以控制搜索的窗口。
+需要注意的是, 如果WindowFilter返回的结果均为false,则选择器的搜索结果将为空。
+另外setWindowFilter函数也会影响auto.windowRoots
的结果。
+该函数需要Android 5.0以上才有效。
+auto.windowRoots#
+[v4.1.0新增]
+
+- <Array>
+
+返回当前被WindowFilter过滤的窗口的布局根元素组成的数组。
+如果系统是Android5.0以下,则始终返回当前活跃的窗口的布局根元素的数组。
SimpleActionAutomator#
Stability: 2 - StableSimpleActionAutomator提供了一些模拟简单操作的函数,例如点击文字、模拟按键等。这些函数可以直接作为全局函数使用。
click(text[, i])#
@@ -363,6 +438,18 @@ selector()创建一个新的选择器。但一般情况不需要使用该函数,因为可以直接用相应条件的语句创建选择器。
由于历史遗留原因,本不应该这样设计(不应该让id()
, text()
等作为全局函数,而是应该用By.id()
, By.text()
),但为了后向兼容性只能保留这个设计。
这样的API设计会污染全局变量,后续可能会支持"去掉这些全局函数而使用By.*"的选项。
+UiSelector.algorithm(algorithm)#
+[v4.1.0新增]
+
+algorithm
<string> 搜索算法,可选的值有:
+DFS
深度优先算法,选择器的默认算法
+BFS
广度优先算法
+
+
+
+指定选择器的搜索算法。例如:
+log(selector().text("文本").algorithm("BFS").find());
+
广度优先在控件所在层次较低时,或者布局的层次不多时,通常能更快找到控件。
UiSelector.text(str)#
str
<string> 控件文本
diff --git a/app/src/main/assets/editor/theme/dark_plus.json b/app/src/main/assets/editor/theme/dark_plus.json
index 8de4718c8..ce0aac218 100644
--- a/app/src/main/assets/editor/theme/dark_plus.json
+++ b/app/src/main/assets/editor/theme/dark_plus.json
@@ -5,9 +5,11 @@
"editor.background": "#1E1E1E",
"editor.foreground": "#D4D4D4",
"editorLineNumber.foreground": "#404040",
+ "editorBreakpoint.foreground": "#1976D2",
"imeBar.background": "#dd1e1e1e",
"imeBar.foreground": "#f1f1f1",
- "editor.lineHighlightBackground": "#2e2e35"
+ "editor.lineHighlightBackground": "#2e2e35",
+ "editor.debuggingLineBackground": "#40c4ff"
},
"tokenColors": [
{
diff --git a/app/src/main/assets/editor/theme/light_plus.json b/app/src/main/assets/editor/theme/light_plus.json
index e2f628356..e37395a23 100644
--- a/app/src/main/assets/editor/theme/light_plus.json
+++ b/app/src/main/assets/editor/theme/light_plus.json
@@ -499,6 +499,8 @@
"editor.background": "#F5F5F5",
"editor.foreground": "#000000",
"editor.lineHighlightBackground": "#E4F6D4",
+ "editor.debuggingLineBackground": "#40c4ff",
+ "editorBreakpoint.foreground": "#03A9F4",
"focusBorder": "#A6B39B",
"pickerGroup.foreground": "#A6B39B",
"pickerGroup.border": "#749351",
diff --git a/app/src/main/assets/indices/all_android_classes.json b/app/src/main/assets/indices/all_android_classes.json
new file mode 100644
index 000000000..d92cdfef6
--- /dev/null
+++ b/app/src/main/assets/indices/all_android_classes.json
@@ -0,0 +1 @@
+[{"package_name": "android.widget", "class_name": "AbsListView", "full_name": "android.widget.AbsListView"}, {"package_name": "android.widget", "class_name": "AbsListView.LayoutParams", "full_name": "android.widget.AbsListView.LayoutParams"}, {"package_name": "android.widget", "class_name": "AbsListView.MultiChoiceModeListener", "full_name": "android.widget.AbsListView.MultiChoiceModeListener"}, {"package_name": "android.widget", "class_name": "AbsListView.OnScrollListener", "full_name": "android.widget.AbsListView.OnScrollListener"}, {"package_name": "android.widget", "class_name": "AbsListView.RecyclerListener", "full_name": "android.widget.AbsListView.RecyclerListener"}, {"package_name": "android.widget", "class_name": "AbsListView.SelectionBoundsAdjuster", "full_name": "android.widget.AbsListView.SelectionBoundsAdjuster"}, {"package_name": "android.widget", "class_name": "AbsoluteLayout", "full_name": "android.widget.AbsoluteLayout"}, {"package_name": "android.widget", "class_name": "AbsoluteLayout.LayoutParams", "full_name": "android.widget.AbsoluteLayout.LayoutParams"}, {"package_name": "android.text.style", "class_name": "AbsoluteSizeSpan", "full_name": "android.text.style.AbsoluteSizeSpan"}, {"package_name": "android.view", "class_name": "AbsSavedState", "full_name": "android.view.AbsSavedState"}, {"package_name": "android.widget", "class_name": "AbsSeekBar", "full_name": "android.widget.AbsSeekBar"}, {"package_name": "android.widget", "class_name": "AbsSpinner", "full_name": "android.widget.AbsSpinner"}, {"package_name": "android.accounts", "class_name": "AbstractAccountAuthenticator", "full_name": "android.accounts.AbstractAccountAuthenticator"}, {"package_name": "java.time.chrono", "class_name": "AbstractChronology", "full_name": "java.time.chrono.AbstractChronology"}, {"package_name": "android.database", "class_name": "AbstractCursor", "full_name": "android.database.AbstractCursor"}, {"package_name": "android.database", "class_name": "AbstractCursor.SelfContentObserver", "full_name": "android.database.AbstractCursor.SelfContentObserver"}, {"package_name": "java.util.concurrent", "class_name": "AbstractExecutorService", "full_name": "java.util.concurrent.AbstractExecutorService"}, {"package_name": "android.inputmethodservice", "class_name": "AbstractInputMethodService", "full_name": "android.inputmethodservice.AbstractInputMethodService"}, {"package_name": "android.inputmethodservice", "class_name": "AbstractInputMethodService.AbstractInputMethodImpl", "full_name": "android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl"}, {"package_name": "android.inputmethodservice", "class_name": "AbstractInputMethodService.AbstractInputMethodSessionImpl", "full_name": "android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl"}, {"package_name": "java.nio.channels.spi", "class_name": "AbstractInterruptibleChannel", "full_name": "java.nio.channels.spi.AbstractInterruptibleChannel"}, {"package_name": "java.lang", "class_name": "AbstractMethodError", "full_name": "java.lang.AbstractMethodError"}, {"package_name": "java.util.concurrent.locks", "class_name": "AbstractOwnableSynchronizer", "full_name": "java.util.concurrent.locks.AbstractOwnableSynchronizer"}, {"package_name": "java.util.prefs", "class_name": "AbstractPreferences", "full_name": "java.util.prefs.AbstractPreferences"}, {"package_name": "java.util.concurrent.locks", "class_name": "AbstractQueuedLongSynchronizer", "full_name": "java.util.concurrent.locks.AbstractQueuedLongSynchronizer"}, {"package_name": "java.util.concurrent.locks", "class_name": "AbstractQueuedLongSynchronizer.ConditionObject", "full_name": "java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject"}, {"package_name": "java.util.concurrent.locks", "class_name": "AbstractQueuedSynchronizer", "full_name": "java.util.concurrent.locks.AbstractQueuedSynchronizer"}, {"package_name": "java.util.concurrent.locks", "class_name": "AbstractQueuedSynchronizer.ConditionObject", "full_name": "java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject"}, {"package_name": "java.nio.channels.spi", "class_name": "AbstractSelectableChannel", "full_name": "java.nio.channels.spi.AbstractSelectableChannel"}, {"package_name": "java.nio.channels.spi", "class_name": "AbstractSelectionKey", "full_name": "java.nio.channels.spi.AbstractSelectionKey"}, {"package_name": "java.nio.channels.spi", "class_name": "AbstractSelector", "full_name": "java.nio.channels.spi.AbstractSelector"}, {"package_name": "android.content", "class_name": "AbstractThreadedSyncAdapter", "full_name": "android.content.AbstractThreadedSyncAdapter"}, {"package_name": "org.apache.http.conn.ssl", "class_name": "AbstractVerifier", "full_name": "org.apache.http.conn.ssl.AbstractVerifier"}, {"package_name": "android.database", "class_name": "AbstractWindowedCursor", "full_name": "android.database.AbstractWindowedCursor"}, {"package_name": "android.view.animation", "class_name": "AccelerateDecelerateInterpolator", "full_name": "android.view.animation.AccelerateDecelerateInterpolator"}, {"package_name": "android.view.animation", "class_name": "AccelerateInterpolator", "full_name": "android.view.animation.AccelerateInterpolator"}, {"package_name": "java.nio.channels", "class_name": "AcceptPendingException", "full_name": "java.nio.channels.AcceptPendingException"}, {"package_name": "java.security", "class_name": "AccessControlContext", "full_name": "java.security.AccessControlContext"}, {"package_name": "java.security", "class_name": "AccessControlException", "full_name": "java.security.AccessControlException"}, {"package_name": "java.security", "class_name": "AccessController", "full_name": "java.security.AccessController"}, {"package_name": "java.nio.file", "class_name": "AccessDeniedException", "full_name": "java.nio.file.AccessDeniedException"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityButtonController", "full_name": "android.accessibilityservice.AccessibilityButtonController"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityButtonController.AccessibilityButtonCallback", "full_name": "android.accessibilityservice.AccessibilityButtonController.AccessibilityButtonCallback"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityEvent", "full_name": "android.view.accessibility.AccessibilityEvent"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityEventSource", "full_name": "android.view.accessibility.AccessibilityEventSource"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityManager", "full_name": "android.view.accessibility.AccessibilityManager"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityManager.AccessibilityStateChangeListener", "full_name": "android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityManager.TouchExplorationStateChangeListener", "full_name": "android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityNodeInfo", "full_name": "android.view.accessibility.AccessibilityNodeInfo"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityNodeInfo.AccessibilityAction", "full_name": "android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityNodeInfo.CollectionInfo", "full_name": "android.view.accessibility.AccessibilityNodeInfo.CollectionInfo"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityNodeInfo.CollectionItemInfo", "full_name": "android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityNodeInfo.RangeInfo", "full_name": "android.view.accessibility.AccessibilityNodeInfo.RangeInfo"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityNodeProvider", "full_name": "android.view.accessibility.AccessibilityNodeProvider"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityRecord", "full_name": "android.view.accessibility.AccessibilityRecord"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityRequestPreparer", "full_name": "android.view.accessibility.AccessibilityRequestPreparer"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityService", "full_name": "android.accessibilityservice.AccessibilityService"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityService.GestureResultCallback", "full_name": "android.accessibilityservice.AccessibilityService.GestureResultCallback"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityService.MagnificationController", "full_name": "android.accessibilityservice.AccessibilityService.MagnificationController"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityService.MagnificationController.OnMagnificationChangedListener", "full_name": "android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityService.SoftKeyboardController", "full_name": "android.accessibilityservice.AccessibilityService.SoftKeyboardController"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityService.SoftKeyboardController.OnShowModeChangedListener", "full_name": "android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener"}, {"package_name": "android.accessibilityservice", "class_name": "AccessibilityServiceInfo", "full_name": "android.accessibilityservice.AccessibilityServiceInfo"}, {"package_name": "android.view.accessibility", "class_name": "AccessibilityWindowInfo", "full_name": "android.view.accessibility.AccessibilityWindowInfo"}, {"package_name": "java.lang.reflect", "class_name": "AccessibleObject", "full_name": "java.lang.reflect.AccessibleObject"}, {"package_name": "java.nio.file", "class_name": "AccessMode", "full_name": "java.nio.file.AccessMode"}, {"package_name": "android.telephony", "class_name": "AccessNetworkConstants", "full_name": "android.telephony.AccessNetworkConstants"}, {"package_name": "android.telephony", "class_name": "AccessNetworkConstants.AccessNetworkType", "full_name": "android.telephony.AccessNetworkConstants.AccessNetworkType"}, {"package_name": "android.telephony", "class_name": "AccessNetworkConstants.EutranBand", "full_name": "android.telephony.AccessNetworkConstants.EutranBand"}, {"package_name": "android.telephony", "class_name": "AccessNetworkConstants.GeranBand", "full_name": "android.telephony.AccessNetworkConstants.GeranBand"}, {"package_name": "android.telephony", "class_name": "AccessNetworkConstants.UtranBand", "full_name": "android.telephony.AccessNetworkConstants.UtranBand"}, {"package_name": "android.accounts", "class_name": "Account", "full_name": "android.accounts.Account"}, {"package_name": "android.accounts", "class_name": "AccountAuthenticatorActivity", "full_name": "android.accounts.AccountAuthenticatorActivity"}, {"package_name": "android.accounts", "class_name": "AccountAuthenticatorResponse", "full_name": "android.accounts.AccountAuthenticatorResponse"}, {"package_name": "android.accounts", "class_name": "AccountManager", "full_name": "android.accounts.AccountManager"}, {"package_name": "android.accounts", "class_name": "AccountsException", "full_name": "android.accounts.AccountsException"}, {"package_name": "java.security.acl", "class_name": "Acl", "full_name": "java.security.acl.Acl"}, {"package_name": "java.nio.file.attribute", "class_name": "AclEntry", "full_name": "java.nio.file.attribute.AclEntry"}, {"package_name": "java.security.acl", "class_name": "AclEntry", "full_name": "java.security.acl.AclEntry"}, {"package_name": "java.nio.file.attribute", "class_name": "AclEntry.Builder", "full_name": "java.nio.file.attribute.AclEntry.Builder"}, {"package_name": "java.nio.file.attribute", "class_name": "AclEntryFlag", "full_name": "java.nio.file.attribute.AclEntryFlag"}, {"package_name": "java.nio.file.attribute", "class_name": "AclEntryPermission", "full_name": "java.nio.file.attribute.AclEntryPermission"}, {"package_name": "java.nio.file.attribute", "class_name": "AclEntryType", "full_name": "java.nio.file.attribute.AclEntryType"}, {"package_name": "java.nio.file.attribute", "class_name": "AclFileAttributeView", "full_name": "java.nio.file.attribute.AclFileAttributeView"}, {"package_name": "java.security.acl", "class_name": "AclNotFoundException", "full_name": "java.security.acl.AclNotFoundException"}, {"package_name": "android.media.audiofx", "class_name": "AcousticEchoCanceler", "full_name": "android.media.audiofx.AcousticEchoCanceler"}, {"package_name": "android.app", "class_name": "ActionBar", "full_name": "android.app.ActionBar"}, {"package_name": "android.app", "class_name": "ActionBar.LayoutParams", "full_name": "android.app.ActionBar.LayoutParams"}, {"package_name": "android.app", "class_name": "ActionBar.OnMenuVisibilityListener", "full_name": "android.app.ActionBar.OnMenuVisibilityListener"}, {"package_name": "android.app", "class_name": "ActionBar.OnNavigationListener", "full_name": "android.app.ActionBar.OnNavigationListener"}, {"package_name": "android.app", "class_name": "ActionBar.Tab", "full_name": "android.app.ActionBar.Tab"}, {"package_name": "android.app", "class_name": "ActionBar.TabListener", "full_name": "android.app.ActionBar.TabListener"}, {"package_name": "android.widget", "class_name": "ActionMenuView", "full_name": "android.widget.ActionMenuView"}, {"package_name": "android.widget", "class_name": "ActionMenuView.LayoutParams", "full_name": "android.widget.ActionMenuView.LayoutParams"}, {"package_name": "android.widget", "class_name": "ActionMenuView.OnMenuItemClickListener", "full_name": "android.widget.ActionMenuView.OnMenuItemClickListener"}, {"package_name": "android.view", "class_name": "ActionMode", "full_name": "android.view.ActionMode"}, {"package_name": "android.view", "class_name": "ActionMode.Callback", "full_name": "android.view.ActionMode.Callback"}, {"package_name": "android.view", "class_name": "ActionProvider", "full_name": "android.view.ActionProvider"}, {"package_name": "android.view", "class_name": "ActionProvider.VisibilityListener", "full_name": "android.view.ActionProvider.VisibilityListener"}, {"package_name": "android.app", "class_name": "Activity", "full_name": "android.app.Activity"}, {"package_name": "android.app", "class_name": "ActivityGroup", "full_name": "android.app.ActivityGroup"}, {"package_name": "android.content.pm", "class_name": "ActivityInfo", "full_name": "android.content.pm.ActivityInfo"}, {"package_name": "android.content.pm", "class_name": "ActivityInfo.WindowLayout", "full_name": "android.content.pm.ActivityInfo.WindowLayout"}, {"package_name": "android.app", "class_name": "ActivityManager", "full_name": "android.app.ActivityManager"}, {"package_name": "android.app", "class_name": "ActivityManager.AppTask", "full_name": "android.app.ActivityManager.AppTask"}, {"package_name": "android.app", "class_name": "ActivityManager.MemoryInfo", "full_name": "android.app.ActivityManager.MemoryInfo"}, {"package_name": "android.app", "class_name": "ActivityManager.ProcessErrorStateInfo", "full_name": "android.app.ActivityManager.ProcessErrorStateInfo"}, {"package_name": "android.app", "class_name": "ActivityManager.RecentTaskInfo", "full_name": "android.app.ActivityManager.RecentTaskInfo"}, {"package_name": "android.app", "class_name": "ActivityManager.RunningAppProcessInfo", "full_name": "android.app.ActivityManager.RunningAppProcessInfo"}, {"package_name": "android.app", "class_name": "ActivityManager.RunningServiceInfo", "full_name": "android.app.ActivityManager.RunningServiceInfo"}, {"package_name": "android.app", "class_name": "ActivityManager.RunningTaskInfo", "full_name": "android.app.ActivityManager.RunningTaskInfo"}, {"package_name": "android.app", "class_name": "ActivityManager.TaskDescription", "full_name": "android.app.ActivityManager.TaskDescription"}, {"package_name": "android.content", "class_name": "ActivityNotFoundException", "full_name": "android.content.ActivityNotFoundException"}, {"package_name": "android.app", "class_name": "ActivityOptions", "full_name": "android.app.ActivityOptions"}, {"package_name": "android.test", "class_name": "ActivityTestCase", "full_name": "android.test.ActivityTestCase"}, {"package_name": "android.widget", "class_name": "Adapter", "full_name": "android.widget.Adapter"}, {"package_name": "android.widget", "class_name": "AdapterView.AdapterContextMenuInfo", "full_name": "android.widget.AdapterView.AdapterContextMenuInfo"}, {"package_name": "android.widget", "class_name": "AdapterView.OnItemClickListener", "full_name": "android.widget.AdapterView.OnItemClickListener"}, {"package_name": "android.widget", "class_name": "AdapterView.OnItemLongClickListener", "full_name": "android.widget.AdapterView.OnItemLongClickListener"}, {"package_name": "android.widget", "class_name": "AdapterView.OnItemSelectedListener", "full_name": "android.widget.AdapterView.OnItemSelectedListener"}, {"package_name": "android.widget", "class_name": "AdapterViewAnimator", "full_name": "android.widget.AdapterViewAnimator"}, {"package_name": "android.widget", "class_name": "AdapterViewFlipper", "full_name": "android.widget.AdapterViewFlipper"}, {"package_name": "android.graphics.drawable", "class_name": "AdaptiveIconDrawable", "full_name": "android.graphics.drawable.AdaptiveIconDrawable"}, {"package_name": "android.location", "class_name": "Address", "full_name": "android.location.Address"}, {"package_name": "android.widget", "class_name": "Advanceable", "full_name": "android.widget.Advanceable"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertiseCallback", "full_name": "android.bluetooth.le.AdvertiseCallback"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertiseData", "full_name": "android.bluetooth.le.AdvertiseData"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertiseData.Builder", "full_name": "android.bluetooth.le.AdvertiseData.Builder"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertiseSettings", "full_name": "android.bluetooth.le.AdvertiseSettings"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertiseSettings.Builder", "full_name": "android.bluetooth.le.AdvertiseSettings.Builder"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertisingSet", "full_name": "android.bluetooth.le.AdvertisingSet"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertisingSetCallback", "full_name": "android.bluetooth.le.AdvertisingSetCallback"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertisingSetParameters", "full_name": "android.bluetooth.le.AdvertisingSetParameters"}, {"package_name": "android.bluetooth.le", "class_name": "AdvertisingSetParameters.Builder", "full_name": "android.bluetooth.le.AdvertisingSetParameters.Builder"}, {"package_name": "javax.crypto", "class_name": "AEADBadTagException", "full_name": "javax.crypto.AEADBadTagException"}, {"package_name": "android.provider", "class_name": "AlarmClock", "full_name": "android.provider.AlarmClock"}, {"package_name": "android.app", "class_name": "AlarmManager", "full_name": "android.app.AlarmManager"}, {"package_name": "android.app", "class_name": "AlarmManager.AlarmClockInfo", "full_name": "android.app.AlarmManager.AlarmClockInfo"}, {"package_name": "android.app", "class_name": "AlarmManager.OnAlarmListener", "full_name": "android.app.AlarmManager.OnAlarmListener"}, {"package_name": "android.app", "class_name": "AlertDialog", "full_name": "android.app.AlertDialog"}, {"package_name": "android.app", "class_name": "AlertDialog.Builder", "full_name": "android.app.AlertDialog.Builder"}, {"package_name": "java.security", "class_name": "AlgorithmConstraints", "full_name": "java.security.AlgorithmConstraints"}, {"package_name": "java.security", "class_name": "AlgorithmParameterGenerator", "full_name": "java.security.AlgorithmParameterGenerator"}, {"package_name": "java.security", "class_name": "AlgorithmParameterGeneratorSpi", "full_name": "java.security.AlgorithmParameterGeneratorSpi"}, {"package_name": "java.security", "class_name": "AlgorithmParameters", "full_name": "java.security.AlgorithmParameters"}, {"package_name": "java.security.spec", "class_name": "AlgorithmParameterSpec", "full_name": "java.security.spec.AlgorithmParameterSpec"}, {"package_name": "java.security", "class_name": "AlgorithmParametersSpi", "full_name": "java.security.AlgorithmParametersSpi"}, {"package_name": "android.app", "class_name": "AliasActivity", "full_name": "android.app.AliasActivity"}, {"package_name": "android.text.style", "class_name": "AlignmentSpan", "full_name": "android.text.style.AlignmentSpan"}, {"package_name": "android.text.style", "class_name": "AlignmentSpan.Standard", "full_name": "android.text.style.AlignmentSpan.Standard"}, {"package_name": "android.renderscript", "class_name": "Allocation", "full_name": "android.renderscript.Allocation"}, {"package_name": "android.renderscript", "class_name": "Allocation.MipmapControl", "full_name": "android.renderscript.Allocation.MipmapControl"}, {"package_name": "android.renderscript", "class_name": "Allocation.OnBufferAvailableListener", "full_name": "android.renderscript.Allocation.OnBufferAvailableListener"}, {"package_name": "android.renderscript", "class_name": "AllocationAdapter", "full_name": "android.renderscript.AllocationAdapter"}, {"package_name": "org.apache.http.conn.ssl", "class_name": "AllowAllHostnameVerifier", "full_name": "org.apache.http.conn.ssl.AllowAllHostnameVerifier"}, {"package_name": "java.security", "class_name": "AllPermission", "full_name": "java.security.AllPermission"}, {"package_name": "android.view.animation", "class_name": "AlphaAnimation", "full_name": "android.view.animation.AlphaAnimation"}, {"package_name": "android.icu.text", "class_name": "AlphabeticIndex.Bucket.LabelType", "full_name": "android.icu.text.AlphabeticIndex.Bucket.LabelType"}, {"package_name": "android.widget", "class_name": "AlphabetIndexer", "full_name": "android.widget.AlphabetIndexer"}, {"package_name": "java.nio.channels", "class_name": "AlreadyBoundException", "full_name": "java.nio.channels.AlreadyBoundException"}, {"package_name": "java.nio.channels", "class_name": "AlreadyConnectedException", "full_name": "java.nio.channels.AlreadyConnectedException"}, {"package_name": "android.text", "class_name": "AlteredCharSequence", "full_name": "android.text.AlteredCharSequence"}, {"package_name": "android.service.voice", "class_name": "AlwaysOnHotwordDetector", "full_name": "android.service.voice.AlwaysOnHotwordDetector"}, {"package_name": "android.service.voice", "class_name": "AlwaysOnHotwordDetector.Callback", "full_name": "android.service.voice.AlwaysOnHotwordDetector.Callback"}, {"package_name": "android.service.voice", "class_name": "AlwaysOnHotwordDetector.EventPayload", "full_name": "android.service.voice.AlwaysOnHotwordDetector.EventPayload"}, {"package_name": "android.widget", "class_name": "AnalogClock", "full_name": "android.widget.AnalogClock"}, {"package_name": "android.text", "class_name": "AndroidCharacter", "full_name": "android.text.AndroidCharacter"}, {"package_name": "android.util", "class_name": "AndroidException", "full_name": "android.util.AndroidException"}, {"package_name": "android.util", "class_name": "AndroidRuntimeException", "full_name": "android.util.AndroidRuntimeException"}, {"package_name": "android.test", "class_name": "AndroidTestCase", "full_name": "android.test.AndroidTestCase"}, {"package_name": "android.test", "class_name": "AndroidTestRunner", "full_name": "android.test.AndroidTestRunner"}, {"package_name": "android.graphics.drawable", "class_name": "Animatable", "full_name": "android.graphics.drawable.Animatable"}, {"package_name": "android.graphics.drawable", "class_name": "AnimatedImageDrawable", "full_name": "android.graphics.drawable.AnimatedImageDrawable"}, {"package_name": "android.graphics.drawable", "class_name": "AnimatedStateListDrawable", "full_name": "android.graphics.drawable.AnimatedStateListDrawable"}, {"package_name": "android.graphics.drawable", "class_name": "AnimatedVectorDrawable", "full_name": "android.graphics.drawable.AnimatedVectorDrawable"}, {"package_name": "android.view.animation", "class_name": "Animation", "full_name": "android.view.animation.Animation"}, {"package_name": "android.view.animation", "class_name": "Animation.AnimationListener", "full_name": "android.view.animation.Animation.AnimationListener"}, {"package_name": "android.view.animation", "class_name": "Animation.Description", "full_name": "android.view.animation.Animation.Description"}, {"package_name": "android.graphics.drawable", "class_name": "AnimationDrawable", "full_name": "android.graphics.drawable.AnimationDrawable"}, {"package_name": "android.view.animation", "class_name": "AnimationSet", "full_name": "android.view.animation.AnimationSet"}, {"package_name": "android.view.animation", "class_name": "AnimationUtils", "full_name": "android.view.animation.AnimationUtils"}, {"package_name": "android.animation", "class_name": "Animator", "full_name": "android.animation.Animator"}, {"package_name": "android.animation", "class_name": "Animator.AnimatorListener", "full_name": "android.animation.Animator.AnimatorListener"}, {"package_name": "android.animation", "class_name": "Animator.AnimatorPauseListener", "full_name": "android.animation.Animator.AnimatorPauseListener"}, {"package_name": "android.animation", "class_name": "AnimatorInflater", "full_name": "android.animation.AnimatorInflater"}, {"package_name": "android.animation", "class_name": "AnimatorListenerAdapter", "full_name": "android.animation.AnimatorListenerAdapter"}, {"package_name": "android.animation", "class_name": "AnimatorSet", "full_name": "android.animation.AnimatorSet"}, {"package_name": "android.animation", "class_name": "AnimatorSet.Builder", "full_name": "android.animation.AnimatorSet.Builder"}, {"package_name": "java.lang.reflect", "class_name": "AnnotatedElement", "full_name": "java.lang.reflect.AnnotatedElement"}, {"package_name": "android.text", "class_name": "Annotation", "full_name": "android.text.Annotation"}, {"package_name": "java.lang.annotation", "class_name": "Annotation", "full_name": "java.lang.annotation.Annotation"}, {"package_name": "java.text", "class_name": "Annotation", "full_name": "java.text.Annotation"}, {"package_name": "java.lang.annotation", "class_name": "AnnotationFormatError", "full_name": "java.lang.annotation.AnnotationFormatError"}, {"package_name": "java.lang.annotation", "class_name": "AnnotationTypeMismatchException", "full_name": "java.lang.annotation.AnnotationTypeMismatchException"}, {"package_name": "android.view.animation", "class_name": "AnticipateInterpolator", "full_name": "android.view.animation.AnticipateInterpolator"}, {"package_name": "android.view.animation", "class_name": "AnticipateOvershootInterpolator", "full_name": "android.view.animation.AnticipateOvershootInterpolator"}, {"package_name": "android.telephony.data", "class_name": "ApnSetting", "full_name": "android.telephony.data.ApnSetting"}, {"package_name": "android.telephony.data", "class_name": "ApnSetting.Builder", "full_name": "android.telephony.data.ApnSetting.Builder"}, {"package_name": "android.app", "class_name": "AppComponentFactory", "full_name": "android.app.AppComponentFactory"}, {"package_name": "java.lang", "class_name": "Appendable", "full_name": "java.lang.Appendable"}, {"package_name": "android.app", "class_name": "Application", "full_name": "android.app.Application"}, {"package_name": "android.app", "class_name": "Application.ActivityLifecycleCallbacks", "full_name": "android.app.Application.ActivityLifecycleCallbacks"}, {"package_name": "android.app", "class_name": "Application.OnProvideAssistDataListener", "full_name": "android.app.Application.OnProvideAssistDataListener"}, {"package_name": "android.app", "class_name": "ApplicationErrorReport", "full_name": "android.app.ApplicationErrorReport"}, {"package_name": "android.app", "class_name": "ApplicationErrorReport.AnrInfo", "full_name": "android.app.ApplicationErrorReport.AnrInfo"}, {"package_name": "android.app", "class_name": "ApplicationErrorReport.BatteryInfo", "full_name": "android.app.ApplicationErrorReport.BatteryInfo"}, {"package_name": "android.app", "class_name": "ApplicationErrorReport.CrashInfo", "full_name": "android.app.ApplicationErrorReport.CrashInfo"}, {"package_name": "android.app", "class_name": "ApplicationErrorReport.RunningServiceInfo", "full_name": "android.app.ApplicationErrorReport.RunningServiceInfo"}, {"package_name": "android.content.pm", "class_name": "ApplicationInfo", "full_name": "android.content.pm.ApplicationInfo"}, {"package_name": "android.content.pm", "class_name": "ApplicationInfo.DisplayNameComparator", "full_name": "android.content.pm.ApplicationInfo.DisplayNameComparator"}, {"package_name": "android.app", "class_name": "AppOpsManager", "full_name": "android.app.AppOpsManager"}, {"package_name": "android.app", "class_name": "AppOpsManager.OnOpChangedListener", "full_name": "android.app.AppOpsManager.OnOpChangedListener"}, {"package_name": "android.appwidget", "class_name": "AppWidgetHost", "full_name": "android.appwidget.AppWidgetHost"}, {"package_name": "android.appwidget", "class_name": "AppWidgetHostView", "full_name": "android.appwidget.AppWidgetHostView"}, {"package_name": "android.appwidget", "class_name": "AppWidgetManager", "full_name": "android.appwidget.AppWidgetManager"}, {"package_name": "android.appwidget", "class_name": "AppWidgetProvider", "full_name": "android.appwidget.AppWidgetProvider"}, {"package_name": "android.appwidget", "class_name": "AppWidgetProviderInfo", "full_name": "android.appwidget.AppWidgetProviderInfo"}, {"package_name": "android.transition", "class_name": "ArcMotion", "full_name": "android.transition.ArcMotion"}, {"package_name": "android.graphics.drawable.shapes", "class_name": "ArcShape", "full_name": "android.graphics.drawable.shapes.ArcShape"}, {"package_name": "android.animation", "class_name": "ArgbEvaluator", "full_name": "android.animation.ArgbEvaluator"}, {"package_name": "java.lang", "class_name": "ArithmeticException", "full_name": "java.lang.ArithmeticException"}, {"package_name": "java.lang.reflect", "class_name": "Array", "full_name": "java.lang.reflect.Array"}, {"package_name": "java.sql", "class_name": "Array", "full_name": "java.sql.Array"}, {"package_name": "java.lang", "class_name": "ArrayIndexOutOfBoundsException", "full_name": "java.lang.ArrayIndexOutOfBoundsException"}, {"package_name": "java.util", "class_name": "Arrays", "full_name": "java.util.Arrays"}, {"package_name": "java.lang", "class_name": "ArrayStoreException", "full_name": "java.lang.ArrayStoreException"}, {"package_name": "android.text.method", "class_name": "ArrowKeyMovementMethod", "full_name": "android.text.method.ArrowKeyMovementMethod"}, {"package_name": "junit.framework", "class_name": "Assert", "full_name": "junit.framework.Assert"}, {"package_name": "java.lang", "class_name": "AssertionError", "full_name": "java.lang.AssertionError"}, {"package_name": "android.test", "class_name": "AssertionFailedError", "full_name": "android.test.AssertionFailedError"}, {"package_name": "junit.framework", "class_name": "AssertionFailedError", "full_name": "junit.framework.AssertionFailedError"}, {"package_name": "android.content.res", "class_name": "AssetFileDescriptor", "full_name": "android.content.res.AssetFileDescriptor"}, {"package_name": "android.content.res", "class_name": "AssetFileDescriptor.AutoCloseInputStream", "full_name": "android.content.res.AssetFileDescriptor.AutoCloseInputStream"}, {"package_name": "android.content.res", "class_name": "AssetFileDescriptor.AutoCloseOutputStream", "full_name": "android.content.res.AssetFileDescriptor.AutoCloseOutputStream"}, {"package_name": "android.content.res", "class_name": "AssetManager", "full_name": "android.content.res.AssetManager"}, {"package_name": "android.content.res", "class_name": "AssetManager.AssetInputStream", "full_name": "android.content.res.AssetManager.AssetInputStream"}, {"package_name": "android.app.assist", "class_name": "AssistContent", "full_name": "android.app.assist.AssistContent"}, {"package_name": "android.app.assist", "class_name": "AssistStructure", "full_name": "android.app.assist.AssistStructure"}, {"package_name": "android.app.assist", "class_name": "AssistStructure.ViewNode", "full_name": "android.app.assist.AssistStructure.ViewNode"}, {"package_name": "android.app.assist", "class_name": "AssistStructure.WindowNode", "full_name": "android.app.assist.AssistStructure.WindowNode"}, {"package_name": "android.companion", "class_name": "AssociationRequest", "full_name": "android.companion.AssociationRequest"}, {"package_name": "android.companion", "class_name": "AssociationRequest.Builder", "full_name": "android.companion.AssociationRequest.Builder"}, {"package_name": "java.nio.channels", "class_name": "AsynchronousByteChannel", "full_name": "java.nio.channels.AsynchronousByteChannel"}, {"package_name": "java.nio.channels", "class_name": "AsynchronousChannel", "full_name": "java.nio.channels.AsynchronousChannel"}, {"package_name": "java.nio.channels", "class_name": "AsynchronousChannelGroup", "full_name": "java.nio.channels.AsynchronousChannelGroup"}, {"package_name": "java.nio.channels.spi", "class_name": "AsynchronousChannelProvider", "full_name": "java.nio.channels.spi.AsynchronousChannelProvider"}, {"package_name": "java.nio.channels", "class_name": "AsynchronousCloseException", "full_name": "java.nio.channels.AsynchronousCloseException"}, {"package_name": "java.nio.channels", "class_name": "AsynchronousFileChannel", "full_name": "java.nio.channels.AsynchronousFileChannel"}, {"package_name": "java.nio.channels", "class_name": "AsynchronousServerSocketChannel", "full_name": "java.nio.channels.AsynchronousServerSocketChannel"}, {"package_name": "java.nio.channels", "class_name": "AsynchronousSocketChannel", "full_name": "java.nio.channels.AsynchronousSocketChannel"}, {"package_name": "android.media", "class_name": "AsyncPlayer", "full_name": "android.media.AsyncPlayer"}, {"package_name": "android.content", "class_name": "AsyncQueryHandler", "full_name": "android.content.AsyncQueryHandler"}, {"package_name": "android.content", "class_name": "AsyncQueryHandler.WorkerArgs", "full_name": "android.content.AsyncQueryHandler.WorkerArgs"}, {"package_name": "android.content", "class_name": "AsyncQueryHandler.WorkerHandler", "full_name": "android.content.AsyncQueryHandler.WorkerHandler"}, {"package_name": "android.os", "class_name": "AsyncTask.Status", "full_name": "android.os.AsyncTask.Status"}, {"package_name": "java.util.concurrent.atomic", "class_name": "AtomicBoolean", "full_name": "java.util.concurrent.atomic.AtomicBoolean"}, {"package_name": "android.util", "class_name": "AtomicFile", "full_name": "android.util.AtomicFile"}, {"package_name": "java.util.concurrent.atomic", "class_name": "AtomicInteger", "full_name": "java.util.concurrent.atomic.AtomicInteger"}, {"package_name": "java.util.concurrent.atomic", "class_name": "AtomicIntegerArray", "full_name": "java.util.concurrent.atomic.AtomicIntegerArray"}, {"package_name": "java.util.concurrent.atomic", "class_name": "AtomicLong", "full_name": "java.util.concurrent.atomic.AtomicLong"}, {"package_name": "java.util.concurrent.atomic", "class_name": "AtomicLongArray", "full_name": "java.util.concurrent.atomic.AtomicLongArray"}, {"package_name": "java.nio.file", "class_name": "AtomicMoveNotSupportedException", "full_name": "java.nio.file.AtomicMoveNotSupportedException"}, {"package_name": "android.net.wifi.aware", "class_name": "AttachCallback", "full_name": "android.net.wifi.aware.AttachCallback"}, {"package_name": "android.security", "class_name": "AttestedKeyPair", "full_name": "android.security.AttestedKeyPair"}, {"package_name": "java.text", "class_name": "AttributedCharacterIterator", "full_name": "java.text.AttributedCharacterIterator"}, {"package_name": "java.text", "class_name": "AttributedCharacterIterator.Attribute", "full_name": "java.text.AttributedCharacterIterator.Attribute"}, {"package_name": "java.text", "class_name": "AttributedString", "full_name": "java.text.AttributedString"}, {"package_name": "org.xml.sax", "class_name": "AttributeList", "full_name": "org.xml.sax.AttributeList"}, {"package_name": "org.xml.sax.helpers", "class_name": "AttributeListImpl", "full_name": "org.xml.sax.helpers.AttributeListImpl"}, {"package_name": "java.util.jar", "class_name": "Attributes", "full_name": "java.util.jar.Attributes"}, {"package_name": "org.xml.sax", "class_name": "Attributes", "full_name": "org.xml.sax.Attributes"}, {"package_name": "java.util.jar", "class_name": "Attributes.Name", "full_name": "java.util.jar.Attributes.Name"}, {"package_name": "android.util", "class_name": "AttributeSet", "full_name": "android.util.AttributeSet"}, {"package_name": "org.xml.sax.helpers", "class_name": "AttributesImpl", "full_name": "org.xml.sax.helpers.AttributesImpl"}, {"package_name": "java.nio.file.attribute", "class_name": "AttributeView", "full_name": "java.nio.file.attribute.AttributeView"}, {"package_name": "android.media", "class_name": "AudioAttributes", "full_name": "android.media.AudioAttributes"}, {"package_name": "android.media", "class_name": "AudioAttributes.Builder", "full_name": "android.media.AudioAttributes.Builder"}, {"package_name": "android.net.rtp", "class_name": "AudioCodec", "full_name": "android.net.rtp.AudioCodec"}, {"package_name": "android.media", "class_name": "AudioDeviceCallback", "full_name": "android.media.AudioDeviceCallback"}, {"package_name": "android.media", "class_name": "AudioDeviceInfo", "full_name": "android.media.AudioDeviceInfo"}, {"package_name": "android.media.audiofx", "class_name": "AudioEffect", "full_name": "android.media.audiofx.AudioEffect"}, {"package_name": "android.media.audiofx", "class_name": "AudioEffect.Descriptor", "full_name": "android.media.audiofx.AudioEffect.Descriptor"}, {"package_name": "android.media.audiofx", "class_name": "AudioEffect.OnControlStatusChangeListener", "full_name": "android.media.audiofx.AudioEffect.OnControlStatusChangeListener"}, {"package_name": "android.media.audiofx", "class_name": "AudioEffect.OnEnableStatusChangeListener", "full_name": "android.media.audiofx.AudioEffect.OnEnableStatusChangeListener"}, {"package_name": "android.media", "class_name": "AudioFocusRequest", "full_name": "android.media.AudioFocusRequest"}, {"package_name": "android.media", "class_name": "AudioFocusRequest.Builder", "full_name": "android.media.AudioFocusRequest.Builder"}, {"package_name": "android.media", "class_name": "AudioFormat", "full_name": "android.media.AudioFormat"}, {"package_name": "android.media", "class_name": "AudioFormat.Builder", "full_name": "android.media.AudioFormat.Builder"}, {"package_name": "android.net.rtp", "class_name": "AudioGroup", "full_name": "android.net.rtp.AudioGroup"}, {"package_name": "android.media", "class_name": "AudioManager", "full_name": "android.media.AudioManager"}, {"package_name": "android.media", "class_name": "AudioManager.AudioPlaybackCallback", "full_name": "android.media.AudioManager.AudioPlaybackCallback"}, {"package_name": "android.media", "class_name": "AudioManager.AudioRecordingCallback", "full_name": "android.media.AudioManager.AudioRecordingCallback"}, {"package_name": "android.media", "class_name": "AudioManager.OnAudioFocusChangeListener", "full_name": "android.media.AudioManager.OnAudioFocusChangeListener"}, {"package_name": "android.media", "class_name": "AudioPlaybackConfiguration", "full_name": "android.media.AudioPlaybackConfiguration"}, {"package_name": "android.media", "class_name": "AudioPresentation", "full_name": "android.media.AudioPresentation"}, {"package_name": "android.media", "class_name": "AudioRecord", "full_name": "android.media.AudioRecord"}, {"package_name": "android.media", "class_name": "AudioRecord.Builder", "full_name": "android.media.AudioRecord.Builder"}, {"package_name": "android.media", "class_name": "AudioRecord.MetricsConstants", "full_name": "android.media.AudioRecord.MetricsConstants"}, {"package_name": "android.media", "class_name": "AudioRecord.OnRecordPositionUpdateListener", "full_name": "android.media.AudioRecord.OnRecordPositionUpdateListener"}, {"package_name": "android.media", "class_name": "AudioRecord.OnRoutingChangedListener", "full_name": "android.media.AudioRecord.OnRoutingChangedListener"}, {"package_name": "android.media", "class_name": "AudioRecordingConfiguration", "full_name": "android.media.AudioRecordingConfiguration"}, {"package_name": "android.media", "class_name": "AudioRouting", "full_name": "android.media.AudioRouting"}, {"package_name": "android.media", "class_name": "AudioRouting.OnRoutingChangedListener", "full_name": "android.media.AudioRouting.OnRoutingChangedListener"}, {"package_name": "android.net.rtp", "class_name": "AudioStream", "full_name": "android.net.rtp.AudioStream"}, {"package_name": "android.media", "class_name": "AudioTimestamp", "full_name": "android.media.AudioTimestamp"}, {"package_name": "android.media", "class_name": "AudioTrack", "full_name": "android.media.AudioTrack"}, {"package_name": "android.media", "class_name": "AudioTrack.Builder", "full_name": "android.media.AudioTrack.Builder"}, {"package_name": "android.media", "class_name": "AudioTrack.MetricsConstants", "full_name": "android.media.AudioTrack.MetricsConstants"}, {"package_name": "android.media", "class_name": "AudioTrack.OnPlaybackPositionUpdateListener", "full_name": "android.media.AudioTrack.OnPlaybackPositionUpdateListener"}, {"package_name": "android.media", "class_name": "AudioTrack.OnRoutingChangedListener", "full_name": "android.media.AudioTrack.OnRoutingChangedListener"}, {"package_name": "android.app", "class_name": "AuthenticationRequiredException", "full_name": "android.app.AuthenticationRequiredException"}, {"package_name": "java.net", "class_name": "Authenticator", "full_name": "java.net.Authenticator"}, {"package_name": "java.net", "class_name": "Authenticator.RequestorType", "full_name": "java.net.Authenticator.RequestorType"}, {"package_name": "android.accounts", "class_name": "AuthenticatorDescription", "full_name": "android.accounts.AuthenticatorDescription"}, {"package_name": "android.accounts", "class_name": "AuthenticatorException", "full_name": "android.accounts.AuthenticatorException"}, {"package_name": "javax.security.auth", "class_name": "AuthPermission", "full_name": "javax.security.auth.AuthPermission"}, {"package_name": "java.security", "class_name": "AuthProvider", "full_name": "java.security.AuthProvider"}, {"package_name": "java.lang", "class_name": "AutoCloseable", "full_name": "java.lang.AutoCloseable"}, {"package_name": "android.widget", "class_name": "AutoCompleteTextView", "full_name": "android.widget.AutoCompleteTextView"}, {"package_name": "android.widget", "class_name": "AutoCompleteTextView.OnDismissListener", "full_name": "android.widget.AutoCompleteTextView.OnDismissListener"}, {"package_name": "android.widget", "class_name": "AutoCompleteTextView.Validator", "full_name": "android.widget.AutoCompleteTextView.Validator"}, {"package_name": "android.view.autofill", "class_name": "AutofillId", "full_name": "android.view.autofill.AutofillId"}, {"package_name": "android.view.autofill", "class_name": "AutofillManager", "full_name": "android.view.autofill.AutofillManager"}, {"package_name": "android.view.autofill", "class_name": "AutofillManager.AutofillCallback", "full_name": "android.view.autofill.AutofillManager.AutofillCallback"}, {"package_name": "android.service.autofill", "class_name": "AutofillService", "full_name": "android.service.autofill.AutofillService"}, {"package_name": "android.view.autofill", "class_name": "AutofillValue", "full_name": "android.view.autofill.AutofillValue"}, {"package_name": "android.media.audiofx", "class_name": "AutomaticGainControl", "full_name": "android.media.audiofx.AutomaticGainControl"}, {"package_name": "android.app", "class_name": "AutomaticZenRule", "full_name": "android.app.AutomaticZenRule"}, {"package_name": "android.text", "class_name": "AutoText", "full_name": "android.text.AutoText"}, {"package_name": "android.transition", "class_name": "AutoTransition", "full_name": "android.transition.AutoTransition"}, {"package_name": "android.text.style", "class_name": "BackgroundColorSpan", "full_name": "android.text.style.BackgroundColorSpan"}, {"package_name": "java.util.prefs", "class_name": "BackingStoreException", "full_name": "java.util.prefs.BackingStoreException"}, {"package_name": "android.app.backup", "class_name": "BackupAgent", "full_name": "android.app.backup.BackupAgent"}, {"package_name": "android.app.backup", "class_name": "BackupAgentHelper", "full_name": "android.app.backup.BackupAgentHelper"}, {"package_name": "android.app.backup", "class_name": "BackupDataInput", "full_name": "android.app.backup.BackupDataInput"}, {"package_name": "android.app.backup", "class_name": "BackupDataInputStream", "full_name": "android.app.backup.BackupDataInputStream"}, {"package_name": "android.app.backup", "class_name": "BackupDataOutput", "full_name": "android.app.backup.BackupDataOutput"}, {"package_name": "android.app.backup", "class_name": "BackupHelper", "full_name": "android.app.backup.BackupHelper"}, {"package_name": "android.app.backup", "class_name": "BackupManager", "full_name": "android.app.backup.BackupManager"}, {"package_name": "javax.crypto", "class_name": "BadPaddingException", "full_name": "javax.crypto.BadPaddingException"}, {"package_name": "android.os", "class_name": "BadParcelableException", "full_name": "android.os.BadParcelableException"}, {"package_name": "android.widget", "class_name": "BaseAdapter", "full_name": "android.widget.BaseAdapter"}, {"package_name": "android.os", "class_name": "BaseBundle", "full_name": "android.os.BaseBundle"}, {"package_name": "android.provider", "class_name": "BaseColumns", "full_name": "android.provider.BaseColumns"}, {"package_name": "dalvik.system", "class_name": "BaseDexClassLoader", "full_name": "dalvik.system.BaseDexClassLoader"}, {"package_name": "android.widget", "class_name": "BaseExpandableListAdapter", "full_name": "android.widget.BaseExpandableListAdapter"}, {"package_name": "android.view.inputmethod", "class_name": "BaseInputConnection", "full_name": "android.view.inputmethod.BaseInputConnection"}, {"package_name": "android.view.animation", "class_name": "BaseInterpolator", "full_name": "android.view.animation.BaseInterpolator"}, {"package_name": "android.text.method", "class_name": "BaseKeyListener", "full_name": "android.text.method.BaseKeyListener"}, {"package_name": "android.text.method", "class_name": "BaseMovementMethod", "full_name": "android.text.method.BaseMovementMethod"}, {"package_name": "android.renderscript", "class_name": "BaseObj", "full_name": "android.renderscript.BaseObj"}, {"package_name": "junit.runner", "class_name": "BaseTestRunner", "full_name": "junit.runner.BaseTestRunner"}, {"package_name": "java.nio.file.attribute", "class_name": "BasicFileAttributes", "full_name": "java.nio.file.attribute.BasicFileAttributes"}, {"package_name": "java.nio.file.attribute", "class_name": "BasicFileAttributeView", "full_name": "java.nio.file.attribute.BasicFileAttributeView"}, {"package_name": "java.security", "class_name": "BasicPermission", "full_name": "java.security.BasicPermission"}, {"package_name": "android.media.audiofx", "class_name": "BassBoost", "full_name": "android.media.audiofx.BassBoost"}, {"package_name": "android.media.audiofx", "class_name": "BassBoost.OnParameterChangeListener", "full_name": "android.media.audiofx.BassBoost.OnParameterChangeListener"}, {"package_name": "android.media.audiofx", "class_name": "BassBoost.Settings", "full_name": "android.media.audiofx.BassBoost.Settings"}, {"package_name": "java.sql", "class_name": "BatchUpdateException", "full_name": "java.sql.BatchUpdateException"}, {"package_name": "android.service.autofill", "class_name": "BatchUpdates", "full_name": "android.service.autofill.BatchUpdates"}, {"package_name": "android.service.autofill", "class_name": "BatchUpdates.Builder", "full_name": "android.service.autofill.BatchUpdates.Builder"}, {"package_name": "android.os", "class_name": "BatteryManager", "full_name": "android.os.BatteryManager"}, {"package_name": "java.text", "class_name": "Bidi", "full_name": "java.text.Bidi"}, {"package_name": "android.text", "class_name": "BidiFormatter", "full_name": "android.text.BidiFormatter"}, {"package_name": "android.text", "class_name": "BidiFormatter.Builder", "full_name": "android.text.BidiFormatter.Builder"}, {"package_name": "android.icu.math", "class_name": "BigDecimal", "full_name": "android.icu.math.BigDecimal"}, {"package_name": "java.math", "class_name": "BigDecimal", "full_name": "java.math.BigDecimal"}, {"package_name": "java.math", "class_name": "BigInteger", "full_name": "java.math.BigInteger"}, {"package_name": "android.os", "class_name": "Binder", "full_name": "android.os.Binder"}, {"package_name": "java.net", "class_name": "BindException", "full_name": "java.net.BindException"}, {"package_name": "android.hardware.biometrics", "class_name": "BiometricPrompt", "full_name": "android.hardware.biometrics.BiometricPrompt"}, {"package_name": "android.hardware.biometrics", "class_name": "BiometricPrompt.AuthenticationCallback", "full_name": "android.hardware.biometrics.BiometricPrompt.AuthenticationCallback"}, {"package_name": "android.hardware.biometrics", "class_name": "BiometricPrompt.AuthenticationResult", "full_name": "android.hardware.biometrics.BiometricPrompt.AuthenticationResult"}, {"package_name": "android.hardware.biometrics", "class_name": "BiometricPrompt.Builder", "full_name": "android.hardware.biometrics.BiometricPrompt.Builder"}, {"package_name": "android.hardware.biometrics", "class_name": "BiometricPrompt.CryptoObject", "full_name": "android.hardware.biometrics.BiometricPrompt.CryptoObject"}, {"package_name": "android.graphics", "class_name": "Bitmap", "full_name": "android.graphics.Bitmap"}, {"package_name": "android.graphics", "class_name": "Bitmap.CompressFormat", "full_name": "android.graphics.Bitmap.CompressFormat"}, {"package_name": "android.graphics", "class_name": "Bitmap.Config", "full_name": "android.graphics.Bitmap.Config"}, {"package_name": "android.graphics.drawable", "class_name": "BitmapDrawable", "full_name": "android.graphics.drawable.BitmapDrawable"}, {"package_name": "android.graphics", "class_name": "BitmapFactory", "full_name": "android.graphics.BitmapFactory"}, {"package_name": "android.graphics", "class_name": "BitmapFactory.Options", "full_name": "android.graphics.BitmapFactory.Options"}, {"package_name": "android.graphics", "class_name": "BitmapRegionDecoder", "full_name": "android.graphics.BitmapRegionDecoder"}, {"package_name": "android.graphics", "class_name": "BitmapShader", "full_name": "android.graphics.BitmapShader"}, {"package_name": "java.util", "class_name": "BitSet", "full_name": "java.util.BitSet"}, {"package_name": "java.sql", "class_name": "Blob", "full_name": "java.sql.Blob"}, {"package_name": "android.provider", "class_name": "BlockedNumberContract", "full_name": "android.provider.BlockedNumberContract"}, {"package_name": "android.provider", "class_name": "BlockedNumberContract.BlockedNumbers", "full_name": "android.provider.BlockedNumberContract.BlockedNumbers"}, {"package_name": "android.bluetooth", "class_name": "BluetoothAdapter", "full_name": "android.bluetooth.BluetoothAdapter"}, {"package_name": "android.bluetooth", "class_name": "BluetoothAdapter.LeScanCallback", "full_name": "android.bluetooth.BluetoothAdapter.LeScanCallback"}, {"package_name": "android.bluetooth", "class_name": "BluetoothAssignedNumbers", "full_name": "android.bluetooth.BluetoothAssignedNumbers"}, {"package_name": "android.bluetooth", "class_name": "BluetoothClass", "full_name": "android.bluetooth.BluetoothClass"}, {"package_name": "android.bluetooth", "class_name": "BluetoothClass.Device", "full_name": "android.bluetooth.BluetoothClass.Device"}, {"package_name": "android.bluetooth", "class_name": "BluetoothClass.Device.Major", "full_name": "android.bluetooth.BluetoothClass.Device.Major"}, {"package_name": "android.bluetooth", "class_name": "BluetoothClass.Service", "full_name": "android.bluetooth.BluetoothClass.Service"}, {"package_name": "android.bluetooth", "class_name": "BluetoothDevice", "full_name": "android.bluetooth.BluetoothDevice"}, {"package_name": "android.companion", "class_name": "BluetoothDeviceFilter", "full_name": "android.companion.BluetoothDeviceFilter"}, {"package_name": "android.companion", "class_name": "BluetoothDeviceFilter.Builder", "full_name": "android.companion.BluetoothDeviceFilter.Builder"}, {"package_name": "android.bluetooth", "class_name": "BluetoothGatt", "full_name": "android.bluetooth.BluetoothGatt"}, {"package_name": "android.bluetooth", "class_name": "BluetoothGattCallback", "full_name": "android.bluetooth.BluetoothGattCallback"}, {"package_name": "android.bluetooth", "class_name": "BluetoothGattCharacteristic", "full_name": "android.bluetooth.BluetoothGattCharacteristic"}, {"package_name": "android.bluetooth", "class_name": "BluetoothGattDescriptor", "full_name": "android.bluetooth.BluetoothGattDescriptor"}, {"package_name": "android.bluetooth", "class_name": "BluetoothGattServer", "full_name": "android.bluetooth.BluetoothGattServer"}, {"package_name": "android.bluetooth", "class_name": "BluetoothGattServerCallback", "full_name": "android.bluetooth.BluetoothGattServerCallback"}, {"package_name": "android.bluetooth", "class_name": "BluetoothGattService", "full_name": "android.bluetooth.BluetoothGattService"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHeadset", "full_name": "android.bluetooth.BluetoothHeadset"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHealth", "full_name": "android.bluetooth.BluetoothHealth"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHealthAppConfiguration", "full_name": "android.bluetooth.BluetoothHealthAppConfiguration"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHealthCallback", "full_name": "android.bluetooth.BluetoothHealthCallback"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHidDevice", "full_name": "android.bluetooth.BluetoothHidDevice"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHidDevice.Callback", "full_name": "android.bluetooth.BluetoothHidDevice.Callback"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHidDeviceAppQosSettings", "full_name": "android.bluetooth.BluetoothHidDeviceAppQosSettings"}, {"package_name": "android.bluetooth", "class_name": "BluetoothHidDeviceAppSdpSettings", "full_name": "android.bluetooth.BluetoothHidDeviceAppSdpSettings"}, {"package_name": "android.bluetooth.le", "class_name": "BluetoothLeAdvertiser", "full_name": "android.bluetooth.le.BluetoothLeAdvertiser"}, {"package_name": "android.companion", "class_name": "BluetoothLeDeviceFilter", "full_name": "android.companion.BluetoothLeDeviceFilter"}, {"package_name": "android.companion", "class_name": "BluetoothLeDeviceFilter.Builder", "full_name": "android.companion.BluetoothLeDeviceFilter.Builder"}, {"package_name": "android.bluetooth.le", "class_name": "BluetoothLeScanner", "full_name": "android.bluetooth.le.BluetoothLeScanner"}, {"package_name": "android.bluetooth", "class_name": "BluetoothManager", "full_name": "android.bluetooth.BluetoothManager"}, {"package_name": "android.bluetooth", "class_name": "BluetoothProfile", "full_name": "android.bluetooth.BluetoothProfile"}, {"package_name": "android.bluetooth", "class_name": "BluetoothProfile.ServiceListener", "full_name": "android.bluetooth.BluetoothProfile.ServiceListener"}, {"package_name": "android.bluetooth", "class_name": "BluetoothServerSocket", "full_name": "android.bluetooth.BluetoothServerSocket"}, {"package_name": "android.bluetooth", "class_name": "BluetoothSocket", "full_name": "android.bluetooth.BluetoothSocket"}, {"package_name": "android.graphics", "class_name": "BlurMaskFilter", "full_name": "android.graphics.BlurMaskFilter"}, {"package_name": "android.graphics", "class_name": "BlurMaskFilter.Blur", "full_name": "android.graphics.BlurMaskFilter.Blur"}, {"package_name": "java.lang", "class_name": "Boolean", "full_name": "java.lang.Boolean"}, {"package_name": "java.util.function", "class_name": "BooleanSupplier", "full_name": "java.util.function.BooleanSupplier"}, {"package_name": "java.lang", "class_name": "BootstrapMethodError", "full_name": "java.lang.BootstrapMethodError"}, {"package_name": "android.text", "class_name": "BoringLayout", "full_name": "android.text.BoringLayout"}, {"package_name": "android.text", "class_name": "BoringLayout.Metrics", "full_name": "android.text.BoringLayout.Metrics"}, {"package_name": "android.view.animation", "class_name": "BounceInterpolator", "full_name": "android.view.animation.BounceInterpolator"}, {"package_name": "android.icu.text", "class_name": "BreakIterator", "full_name": "android.icu.text.BreakIterator"}, {"package_name": "java.text", "class_name": "BreakIterator", "full_name": "java.text.BreakIterator"}, {"package_name": "android.content", "class_name": "BroadcastReceiver", "full_name": "android.content.BroadcastReceiver"}, {"package_name": "android.content", "class_name": "BroadcastReceiver.PendingResult", "full_name": "android.content.BroadcastReceiver.PendingResult"}, {"package_name": "java.util.concurrent", "class_name": "BrokenBarrierException", "full_name": "java.util.concurrent.BrokenBarrierException"}, {"package_name": "android.provider", "class_name": "Browser", "full_name": "android.provider.Browser"}, {"package_name": "org.apache.http.conn.ssl", "class_name": "BrowserCompatHostnameVerifier", "full_name": "org.apache.http.conn.ssl.BrowserCompatHostnameVerifier"}, {"package_name": "android.icu.util", "class_name": "BuddhistCalendar", "full_name": "android.icu.util.BuddhistCalendar"}, {"package_name": "java.nio", "class_name": "Buffer", "full_name": "java.nio.Buffer"}, {"package_name": "java.io", "class_name": "BufferedInputStream", "full_name": "java.io.BufferedInputStream"}, {"package_name": "java.io", "class_name": "BufferedOutputStream", "full_name": "java.io.BufferedOutputStream"}, {"package_name": "java.io", "class_name": "BufferedReader", "full_name": "java.io.BufferedReader"}, {"package_name": "java.io", "class_name": "BufferedWriter", "full_name": "java.io.BufferedWriter"}, {"package_name": "java.nio", "class_name": "BufferOverflowException", "full_name": "java.nio.BufferOverflowException"}, {"package_name": "java.nio", "class_name": "BufferUnderflowException", "full_name": "java.nio.BufferUnderflowException"}, {"package_name": "android.os", "class_name": "Build", "full_name": "android.os.Build"}, {"package_name": "android.os", "class_name": "Build.VERSION", "full_name": "android.os.Build.VERSION"}, {"package_name": "android.os", "class_name": "Build.VERSION_CODES", "full_name": "android.os.Build.VERSION_CODES"}, {"package_name": "android.text.style", "class_name": "BulletSpan", "full_name": "android.text.style.BulletSpan"}, {"package_name": "android.os", "class_name": "Bundle", "full_name": "android.os.Bundle"}, {"package_name": "android.widget", "class_name": "Button", "full_name": "android.widget.Button"}, {"package_name": "java.lang", "class_name": "Byte", "full_name": "java.lang.Byte"}, {"package_name": "java.io", "class_name": "ByteArrayInputStream", "full_name": "java.io.ByteArrayInputStream"}, {"package_name": "java.io", "class_name": "ByteArrayOutputStream", "full_name": "java.io.ByteArrayOutputStream"}, {"package_name": "java.nio", "class_name": "ByteBuffer", "full_name": "java.nio.ByteBuffer"}, {"package_name": "java.nio.channels", "class_name": "ByteChannel", "full_name": "java.nio.channels.ByteChannel"}, {"package_name": "java.nio", "class_name": "ByteOrder", "full_name": "java.nio.ByteOrder"}, {"package_name": "java.net", "class_name": "CacheRequest", "full_name": "java.net.CacheRequest"}, {"package_name": "java.net", "class_name": "CacheResponse", "full_name": "java.net.CacheResponse"}, {"package_name": "android.icu.util", "class_name": "Calendar", "full_name": "android.icu.util.Calendar"}, {"package_name": "java.util", "class_name": "Calendar", "full_name": "java.util.Calendar"}, {"package_name": "java.util", "class_name": "Calendar.Builder", "full_name": "java.util.Calendar.Builder"}, {"package_name": "android.icu.util", "class_name": "Calendar.WeekData", "full_name": "android.icu.util.Calendar.WeekData"}, {"package_name": "android.provider", "class_name": "CalendarContract", "full_name": "android.provider.CalendarContract"}, {"package_name": "android.provider", "class_name": "CalendarContract.Attendees", "full_name": "android.provider.CalendarContract.Attendees"}, {"package_name": "android.provider", "class_name": "CalendarContract.AttendeesColumns", "full_name": "android.provider.CalendarContract.AttendeesColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.CalendarAlerts", "full_name": "android.provider.CalendarContract.CalendarAlerts"}, {"package_name": "android.provider", "class_name": "CalendarContract.CalendarAlertsColumns", "full_name": "android.provider.CalendarContract.CalendarAlertsColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.CalendarCache", "full_name": "android.provider.CalendarContract.CalendarCache"}, {"package_name": "android.provider", "class_name": "CalendarContract.CalendarCacheColumns", "full_name": "android.provider.CalendarContract.CalendarCacheColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.CalendarColumns", "full_name": "android.provider.CalendarContract.CalendarColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.CalendarEntity", "full_name": "android.provider.CalendarContract.CalendarEntity"}, {"package_name": "android.provider", "class_name": "CalendarContract.Calendars", "full_name": "android.provider.CalendarContract.Calendars"}, {"package_name": "android.provider", "class_name": "CalendarContract.CalendarSyncColumns", "full_name": "android.provider.CalendarContract.CalendarSyncColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.Colors", "full_name": "android.provider.CalendarContract.Colors"}, {"package_name": "android.provider", "class_name": "CalendarContract.ColorsColumns", "full_name": "android.provider.CalendarContract.ColorsColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.EventDays", "full_name": "android.provider.CalendarContract.EventDays"}, {"package_name": "android.provider", "class_name": "CalendarContract.EventDaysColumns", "full_name": "android.provider.CalendarContract.EventDaysColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.Events", "full_name": "android.provider.CalendarContract.Events"}, {"package_name": "android.provider", "class_name": "CalendarContract.EventsColumns", "full_name": "android.provider.CalendarContract.EventsColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.EventsEntity", "full_name": "android.provider.CalendarContract.EventsEntity"}, {"package_name": "android.provider", "class_name": "CalendarContract.ExtendedProperties", "full_name": "android.provider.CalendarContract.ExtendedProperties"}, {"package_name": "android.provider", "class_name": "CalendarContract.ExtendedPropertiesColumns", "full_name": "android.provider.CalendarContract.ExtendedPropertiesColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.Instances", "full_name": "android.provider.CalendarContract.Instances"}, {"package_name": "android.provider", "class_name": "CalendarContract.Reminders", "full_name": "android.provider.CalendarContract.Reminders"}, {"package_name": "android.provider", "class_name": "CalendarContract.RemindersColumns", "full_name": "android.provider.CalendarContract.RemindersColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.SyncColumns", "full_name": "android.provider.CalendarContract.SyncColumns"}, {"package_name": "android.provider", "class_name": "CalendarContract.SyncState", "full_name": "android.provider.CalendarContract.SyncState"}, {"package_name": "android.widget", "class_name": "CalendarView", "full_name": "android.widget.CalendarView"}, {"package_name": "android.widget", "class_name": "CalendarView.OnDateChangeListener", "full_name": "android.widget.CalendarView.OnDateChangeListener"}, {"package_name": "android.telecom", "class_name": "Call", "full_name": "android.telecom.Call"}, {"package_name": "android.telecom", "class_name": "Call.Callback", "full_name": "android.telecom.Call.Callback"}, {"package_name": "android.telecom", "class_name": "Call.Details", "full_name": "android.telecom.Call.Details"}, {"package_name": "android.telecom", "class_name": "Call.RttCall", "full_name": "android.telecom.Call.RttCall"}, {"package_name": "java.sql", "class_name": "CallableStatement", "full_name": "java.sql.CallableStatement"}, {"package_name": "android.telecom", "class_name": "CallAudioState", "full_name": "android.telecom.CallAudioState"}, {"package_name": "javax.security.auth.callback", "class_name": "Callback", "full_name": "javax.security.auth.callback.Callback"}, {"package_name": "javax.security.auth.callback", "class_name": "CallbackHandler", "full_name": "javax.security.auth.callback.CallbackHandler"}, {"package_name": "android.provider", "class_name": "CallLog", "full_name": "android.provider.CallLog"}, {"package_name": "android.provider", "class_name": "CallLog.Calls", "full_name": "android.provider.CallLog.Calls"}, {"package_name": "android.telecom", "class_name": "CallScreeningService", "full_name": "android.telecom.CallScreeningService"}, {"package_name": "android.telecom", "class_name": "CallScreeningService.CallResponse", "full_name": "android.telecom.CallScreeningService.CallResponse"}, {"package_name": "android.telecom", "class_name": "CallScreeningService.CallResponse.Builder", "full_name": "android.telecom.CallScreeningService.CallResponse.Builder"}, {"package_name": "java.lang.invoke", "class_name": "CallSite", "full_name": "java.lang.invoke.CallSite"}, {"package_name": "android.media", "class_name": "CamcorderProfile", "full_name": "android.media.CamcorderProfile"}, {"package_name": "android.graphics", "class_name": "Camera", "full_name": "android.graphics.Camera"}, {"package_name": "android.hardware", "class_name": "Camera", "full_name": "android.hardware.Camera"}, {"package_name": "android.hardware", "class_name": "Camera.Area", "full_name": "android.hardware.Camera.Area"}, {"package_name": "android.hardware", "class_name": "Camera.AutoFocusCallback", "full_name": "android.hardware.Camera.AutoFocusCallback"}, {"package_name": "android.hardware", "class_name": "Camera.AutoFocusMoveCallback", "full_name": "android.hardware.Camera.AutoFocusMoveCallback"}, {"package_name": "android.hardware", "class_name": "Camera.CameraInfo", "full_name": "android.hardware.Camera.CameraInfo"}, {"package_name": "android.hardware", "class_name": "Camera.ErrorCallback", "full_name": "android.hardware.Camera.ErrorCallback"}, {"package_name": "android.hardware", "class_name": "Camera.Face", "full_name": "android.hardware.Camera.Face"}, {"package_name": "android.hardware", "class_name": "Camera.FaceDetectionListener", "full_name": "android.hardware.Camera.FaceDetectionListener"}, {"package_name": "android.hardware", "class_name": "Camera.OnZoomChangeListener", "full_name": "android.hardware.Camera.OnZoomChangeListener"}, {"package_name": "android.hardware", "class_name": "Camera.Parameters", "full_name": "android.hardware.Camera.Parameters"}, {"package_name": "android.hardware", "class_name": "Camera.PictureCallback", "full_name": "android.hardware.Camera.PictureCallback"}, {"package_name": "android.hardware", "class_name": "Camera.PreviewCallback", "full_name": "android.hardware.Camera.PreviewCallback"}, {"package_name": "android.hardware", "class_name": "Camera.ShutterCallback", "full_name": "android.hardware.Camera.ShutterCallback"}, {"package_name": "android.hardware", "class_name": "Camera.Size", "full_name": "android.hardware.Camera.Size"}, {"package_name": "android.service.media", "class_name": "CameraPrewarmService", "full_name": "android.service.media.CameraPrewarmService"}, {"package_name": "android.media", "class_name": "CameraProfile", "full_name": "android.media.CameraProfile"}, {"package_name": "java.util.concurrent", "class_name": "CancellationException", "full_name": "java.util.concurrent.CancellationException"}, {"package_name": "android.os", "class_name": "CancellationSignal", "full_name": "android.os.CancellationSignal"}, {"package_name": "android.os", "class_name": "CancellationSignal.OnCancelListener", "full_name": "android.os.CancellationSignal.OnCancelListener"}, {"package_name": "java.nio.channels", "class_name": "CancelledKeyException", "full_name": "java.nio.channels.CancelledKeyException"}, {"package_name": "android.graphics", "class_name": "Canvas", "full_name": "android.graphics.Canvas"}, {"package_name": "android.graphics", "class_name": "Canvas.EdgeType", "full_name": "android.graphics.Canvas.EdgeType"}, {"package_name": "android.graphics", "class_name": "Canvas.VertexMode", "full_name": "android.graphics.Canvas.VertexMode"}, {"package_name": "android.view.accessibility", "class_name": "CaptioningManager", "full_name": "android.view.accessibility.CaptioningManager"}, {"package_name": "android.view.accessibility", "class_name": "CaptioningManager.CaptioningChangeListener", "full_name": "android.view.accessibility.CaptioningManager.CaptioningChangeListener"}, {"package_name": "android.view.accessibility", "class_name": "CaptioningManager.CaptionStyle", "full_name": "android.view.accessibility.CaptioningManager.CaptionStyle"}, {"package_name": "android.net", "class_name": "CaptivePortal", "full_name": "android.net.CaptivePortal"}, {"package_name": "android.nfc.cardemulation", "class_name": "CardEmulation", "full_name": "android.nfc.cardemulation.CardEmulation"}, {"package_name": "android.telephony", "class_name": "CarrierConfigManager", "full_name": "android.telephony.CarrierConfigManager"}, {"package_name": "android.service.carrier", "class_name": "CarrierIdentifier", "full_name": "android.service.carrier.CarrierIdentifier"}, {"package_name": "android.service.carrier", "class_name": "CarrierMessagingService", "full_name": "android.service.carrier.CarrierMessagingService"}, {"package_name": "android.service.carrier", "class_name": "CarrierMessagingService.SendMmsResult", "full_name": "android.service.carrier.CarrierMessagingService.SendMmsResult"}, {"package_name": "android.service.carrier", "class_name": "CarrierMessagingService.SendMultipartSmsResult", "full_name": "android.service.carrier.CarrierMessagingService.SendMultipartSmsResult"}, {"package_name": "android.service.carrier", "class_name": "CarrierMessagingService.SendSmsResult", "full_name": "android.service.carrier.CarrierMessagingService.SendSmsResult"}, {"package_name": "android.service.carrier", "class_name": "CarrierService", "full_name": "android.service.carrier.CarrierService"}, {"package_name": "android.telephony.cdma", "class_name": "CdmaCellLocation", "full_name": "android.telephony.cdma.CdmaCellLocation"}, {"package_name": "android.telephony", "class_name": "CellIdentity", "full_name": "android.telephony.CellIdentity"}, {"package_name": "android.telephony", "class_name": "CellIdentityCdma", "full_name": "android.telephony.CellIdentityCdma"}, {"package_name": "android.telephony", "class_name": "CellIdentityGsm", "full_name": "android.telephony.CellIdentityGsm"}, {"package_name": "android.telephony", "class_name": "CellIdentityLte", "full_name": "android.telephony.CellIdentityLte"}, {"package_name": "android.telephony", "class_name": "CellIdentityTdscdma", "full_name": "android.telephony.CellIdentityTdscdma"}, {"package_name": "android.telephony", "class_name": "CellIdentityWcdma", "full_name": "android.telephony.CellIdentityWcdma"}, {"package_name": "android.telephony", "class_name": "CellInfo", "full_name": "android.telephony.CellInfo"}, {"package_name": "android.telephony", "class_name": "CellInfoCdma", "full_name": "android.telephony.CellInfoCdma"}, {"package_name": "android.telephony", "class_name": "CellInfoGsm", "full_name": "android.telephony.CellInfoGsm"}, {"package_name": "android.telephony", "class_name": "CellInfoLte", "full_name": "android.telephony.CellInfoLte"}, {"package_name": "android.telephony", "class_name": "CellInfoWcdma", "full_name": "android.telephony.CellInfoWcdma"}, {"package_name": "android.telephony", "class_name": "CellLocation", "full_name": "android.telephony.CellLocation"}, {"package_name": "android.telephony", "class_name": "CellSignalStrength", "full_name": "android.telephony.CellSignalStrength"}, {"package_name": "android.telephony", "class_name": "CellSignalStrengthCdma", "full_name": "android.telephony.CellSignalStrengthCdma"}, {"package_name": "android.telephony", "class_name": "CellSignalStrengthGsm", "full_name": "android.telephony.CellSignalStrengthGsm"}, {"package_name": "android.telephony", "class_name": "CellSignalStrengthLte", "full_name": "android.telephony.CellSignalStrengthLte"}, {"package_name": "android.telephony", "class_name": "CellSignalStrengthWcdma", "full_name": "android.telephony.CellSignalStrengthWcdma"}, {"package_name": "java.security", "class_name": "Certificate", "full_name": "java.security.Certificate"}, {"package_name": "java.security.cert", "class_name": "Certificate", "full_name": "java.security.cert.Certificate"}, {"package_name": "javax.security.cert", "class_name": "Certificate", "full_name": "javax.security.cert.Certificate"}, {"package_name": "java.security.cert", "class_name": "Certificate.CertificateRep", "full_name": "java.security.cert.Certificate.CertificateRep"}, {"package_name": "java.security.cert", "class_name": "CertificateEncodingException", "full_name": "java.security.cert.CertificateEncodingException"}, {"package_name": "javax.security.cert", "class_name": "CertificateEncodingException", "full_name": "javax.security.cert.CertificateEncodingException"}, {"package_name": "java.security.cert", "class_name": "CertificateException", "full_name": "java.security.cert.CertificateException"}, {"package_name": "javax.security.cert", "class_name": "CertificateException", "full_name": "javax.security.cert.CertificateException"}, {"package_name": "java.security.cert", "class_name": "CertificateExpiredException", "full_name": "java.security.cert.CertificateExpiredException"}, {"package_name": "javax.security.cert", "class_name": "CertificateExpiredException", "full_name": "javax.security.cert.CertificateExpiredException"}, {"package_name": "java.security.cert", "class_name": "CertificateFactory", "full_name": "java.security.cert.CertificateFactory"}, {"package_name": "java.security.cert", "class_name": "CertificateFactorySpi", "full_name": "java.security.cert.CertificateFactorySpi"}, {"package_name": "java.security.cert", "class_name": "CertificateNotYetValidException", "full_name": "java.security.cert.CertificateNotYetValidException"}, {"package_name": "javax.security.cert", "class_name": "CertificateNotYetValidException", "full_name": "javax.security.cert.CertificateNotYetValidException"}, {"package_name": "java.security.cert", "class_name": "CertificateParsingException", "full_name": "java.security.cert.CertificateParsingException"}, {"package_name": "javax.security.cert", "class_name": "CertificateParsingException", "full_name": "javax.security.cert.CertificateParsingException"}, {"package_name": "java.security.cert", "class_name": "CertificateRevokedException", "full_name": "java.security.cert.CertificateRevokedException"}, {"package_name": "java.security.cert", "class_name": "CertPath", "full_name": "java.security.cert.CertPath"}, {"package_name": "java.security.cert", "class_name": "CertPath.CertPathRep", "full_name": "java.security.cert.CertPath.CertPathRep"}, {"package_name": "java.security.cert", "class_name": "CertPathBuilder", "full_name": "java.security.cert.CertPathBuilder"}, {"package_name": "java.security.cert", "class_name": "CertPathBuilderException", "full_name": "java.security.cert.CertPathBuilderException"}, {"package_name": "java.security.cert", "class_name": "CertPathBuilderResult", "full_name": "java.security.cert.CertPathBuilderResult"}, {"package_name": "java.security.cert", "class_name": "CertPathBuilderSpi", "full_name": "java.security.cert.CertPathBuilderSpi"}, {"package_name": "java.security.cert", "class_name": "CertPathChecker", "full_name": "java.security.cert.CertPathChecker"}, {"package_name": "java.security.cert", "class_name": "CertPathParameters", "full_name": "java.security.cert.CertPathParameters"}, {"package_name": "javax.net.ssl", "class_name": "CertPathTrustManagerParameters", "full_name": "javax.net.ssl.CertPathTrustManagerParameters"}, {"package_name": "java.security.cert", "class_name": "CertPathValidator", "full_name": "java.security.cert.CertPathValidator"}, {"package_name": "java.security.cert", "class_name": "CertPathValidatorException", "full_name": "java.security.cert.CertPathValidatorException"}, {"package_name": "java.security.cert", "class_name": "CertPathValidatorException.BasicReason", "full_name": "java.security.cert.CertPathValidatorException.BasicReason"}, {"package_name": "java.security.cert", "class_name": "CertPathValidatorException.Reason", "full_name": "java.security.cert.CertPathValidatorException.Reason"}, {"package_name": "java.security.cert", "class_name": "CertPathValidatorResult", "full_name": "java.security.cert.CertPathValidatorResult"}, {"package_name": "java.security.cert", "class_name": "CertPathValidatorSpi", "full_name": "java.security.cert.CertPathValidatorSpi"}, {"package_name": "java.security.cert", "class_name": "CertSelector", "full_name": "java.security.cert.CertSelector"}, {"package_name": "java.security.cert", "class_name": "CertStore", "full_name": "java.security.cert.CertStore"}, {"package_name": "java.security.cert", "class_name": "CertStoreException", "full_name": "java.security.cert.CertStoreException"}, {"package_name": "java.security.cert", "class_name": "CertStoreParameters", "full_name": "java.security.cert.CertStoreParameters"}, {"package_name": "java.security.cert", "class_name": "CertStoreSpi", "full_name": "java.security.cert.CertStoreSpi"}, {"package_name": "android.transition", "class_name": "ChangeBounds", "full_name": "android.transition.ChangeBounds"}, {"package_name": "android.transition", "class_name": "ChangeClipBounds", "full_name": "android.transition.ChangeClipBounds"}, {"package_name": "android.content.pm", "class_name": "ChangedPackages", "full_name": "android.content.pm.ChangedPackages"}, {"package_name": "android.transition", "class_name": "ChangeImageTransform", "full_name": "android.transition.ChangeImageTransform"}, {"package_name": "android.transition", "class_name": "ChangeScroll", "full_name": "android.transition.ChangeScroll"}, {"package_name": "android.transition", "class_name": "ChangeTransform", "full_name": "android.transition.ChangeTransform"}, {"package_name": "android.se.omapi", "class_name": "Channel", "full_name": "android.se.omapi.Channel"}, {"package_name": "java.nio.channels", "class_name": "Channel", "full_name": "java.nio.channels.Channel"}, {"package_name": "java.nio.channels", "class_name": "Channels", "full_name": "java.nio.channels.Channels"}, {"package_name": "java.lang", "class_name": "Character", "full_name": "java.lang.Character"}, {"package_name": "java.lang", "class_name": "Character.Subset", "full_name": "java.lang.Character.Subset"}, {"package_name": "java.lang", "class_name": "Character.UnicodeBlock", "full_name": "java.lang.Character.UnicodeBlock"}, {"package_name": "java.lang", "class_name": "Character.UnicodeScript", "full_name": "java.lang.Character.UnicodeScript"}, {"package_name": "java.nio.charset", "class_name": "CharacterCodingException", "full_name": "java.nio.charset.CharacterCodingException"}, {"package_name": "android.net.wifi.aware", "class_name": "Characteristics", "full_name": "android.net.wifi.aware.Characteristics"}, {"package_name": "java.text", "class_name": "CharacterIterator", "full_name": "java.text.CharacterIterator"}, {"package_name": "android.text.method", "class_name": "CharacterPickerDialog", "full_name": "android.text.method.CharacterPickerDialog"}, {"package_name": "android.text.style", "class_name": "CharacterStyle", "full_name": "android.text.style.CharacterStyle"}, {"package_name": "android.database", "class_name": "CharArrayBuffer", "full_name": "android.database.CharArrayBuffer"}, {"package_name": "java.io", "class_name": "CharArrayReader", "full_name": "java.io.CharArrayReader"}, {"package_name": "java.io", "class_name": "CharArrayWriter", "full_name": "java.io.CharArrayWriter"}, {"package_name": "java.nio", "class_name": "CharBuffer", "full_name": "java.nio.CharBuffer"}, {"package_name": "java.io", "class_name": "CharConversionException", "full_name": "java.io.CharConversionException"}, {"package_name": "java.lang", "class_name": "CharSequence", "full_name": "java.lang.CharSequence"}, {"package_name": "android.service.autofill", "class_name": "CharSequenceTransformation", "full_name": "android.service.autofill.CharSequenceTransformation"}, {"package_name": "android.service.autofill", "class_name": "CharSequenceTransformation.Builder", "full_name": "android.service.autofill.CharSequenceTransformation.Builder"}, {"package_name": "java.nio.charset", "class_name": "Charset", "full_name": "java.nio.charset.Charset"}, {"package_name": "java.nio.charset", "class_name": "CharsetDecoder", "full_name": "java.nio.charset.CharsetDecoder"}, {"package_name": "java.nio.charset", "class_name": "CharsetEncoder", "full_name": "java.nio.charset.CharsetEncoder"}, {"package_name": "java.nio.charset.spi", "class_name": "CharsetProvider", "full_name": "java.nio.charset.spi.CharsetProvider"}, {"package_name": "android.widget", "class_name": "Checkable", "full_name": "android.widget.Checkable"}, {"package_name": "android.widget", "class_name": "CheckBox", "full_name": "android.widget.CheckBox"}, {"package_name": "android.preference", "class_name": "CheckBoxPreference", "full_name": "android.preference.CheckBoxPreference"}, {"package_name": "java.util.zip", "class_name": "CheckedInputStream", "full_name": "java.util.zip.CheckedInputStream"}, {"package_name": "java.util.zip", "class_name": "CheckedOutputStream", "full_name": "java.util.zip.CheckedOutputStream"}, {"package_name": "android.widget", "class_name": "CheckedTextView", "full_name": "android.widget.CheckedTextView"}, {"package_name": "java.util.zip", "class_name": "Checksum", "full_name": "java.util.zip.Checksum"}, {"package_name": "android.icu.util", "class_name": "ChineseCalendar", "full_name": "android.icu.util.ChineseCalendar"}, {"package_name": "java.text", "class_name": "ChoiceFormat", "full_name": "java.text.ChoiceFormat"}, {"package_name": "android.service.chooser", "class_name": "ChooserTarget", "full_name": "android.service.chooser.ChooserTarget"}, {"package_name": "android.service.chooser", "class_name": "ChooserTargetService", "full_name": "android.service.chooser.ChooserTargetService"}, {"package_name": "android.view", "class_name": "Choreographer", "full_name": "android.view.Choreographer"}, {"package_name": "android.view", "class_name": "Choreographer.FrameCallback", "full_name": "android.view.Choreographer.FrameCallback"}, {"package_name": "java.time.temporal", "class_name": "ChronoField", "full_name": "java.time.temporal.ChronoField"}, {"package_name": "java.time.chrono", "class_name": "ChronoLocalDate", "full_name": "java.time.chrono.ChronoLocalDate"}, {"package_name": "java.time.chrono", "class_name": "Chronology", "full_name": "java.time.chrono.Chronology"}, {"package_name": "android.widget", "class_name": "Chronometer", "full_name": "android.widget.Chronometer"}, {"package_name": "android.widget", "class_name": "Chronometer.OnChronometerTickListener", "full_name": "android.widget.Chronometer.OnChronometerTickListener"}, {"package_name": "java.time.chrono", "class_name": "ChronoPeriod", "full_name": "java.time.chrono.ChronoPeriod"}, {"package_name": "java.time.temporal", "class_name": "ChronoUnit", "full_name": "java.time.temporal.ChronoUnit"}, {"package_name": "javax.crypto", "class_name": "Cipher", "full_name": "javax.crypto.Cipher"}, {"package_name": "javax.crypto", "class_name": "CipherInputStream", "full_name": "javax.crypto.CipherInputStream"}, {"package_name": "javax.crypto", "class_name": "CipherOutputStream", "full_name": "javax.crypto.CipherOutputStream"}, {"package_name": "javax.crypto", "class_name": "CipherSpi", "full_name": "javax.crypto.CipherSpi"}, {"package_name": "android.transition", "class_name": "CircularPropagation", "full_name": "android.transition.CircularPropagation"}, {"package_name": "java.lang", "class_name": "ClassCastException", "full_name": "java.lang.ClassCastException"}, {"package_name": "java.lang", "class_name": "ClassCircularityError", "full_name": "java.lang.ClassCircularityError"}, {"package_name": "java.lang", "class_name": "ClassFormatError", "full_name": "java.lang.ClassFormatError"}, {"package_name": "java.lang", "class_name": "ClassLoader", "full_name": "java.lang.ClassLoader"}, {"package_name": "java.lang", "class_name": "ClassNotFoundException", "full_name": "java.lang.ClassNotFoundException"}, {"package_name": "android.os.strictmode", "class_name": "CleartextNetworkViolation", "full_name": "android.os.strictmode.CleartextNetworkViolation"}, {"package_name": "android.text.style", "class_name": "ClickableSpan", "full_name": "android.text.style.ClickableSpan"}, {"package_name": "android.webkit", "class_name": "ClientCertRequest", "full_name": "android.webkit.ClientCertRequest"}, {"package_name": "java.sql", "class_name": "ClientInfoStatus", "full_name": "java.sql.ClientInfoStatus"}, {"package_name": "android.content", "class_name": "ClipboardManager", "full_name": "android.content.ClipboardManager"}, {"package_name": "android.text", "class_name": "ClipboardManager", "full_name": "android.text.ClipboardManager"}, {"package_name": "android.content", "class_name": "ClipboardManager.OnPrimaryClipChangedListener", "full_name": "android.content.ClipboardManager.OnPrimaryClipChangedListener"}, {"package_name": "android.content", "class_name": "ClipData", "full_name": "android.content.ClipData"}, {"package_name": "android.content", "class_name": "ClipData.Item", "full_name": "android.content.ClipData.Item"}, {"package_name": "android.content", "class_name": "ClipDescription", "full_name": "android.content.ClipDescription"}, {"package_name": "android.graphics.drawable", "class_name": "ClipDrawable", "full_name": "android.graphics.drawable.ClipDrawable"}, {"package_name": "java.sql", "class_name": "Clob", "full_name": "java.sql.Clob"}, {"package_name": "java.time", "class_name": "Clock", "full_name": "java.time.Clock"}, {"package_name": "java.lang", "class_name": "Cloneable", "full_name": "java.lang.Cloneable"}, {"package_name": "java.lang", "class_name": "CloneNotSupportedException", "full_name": "java.lang.CloneNotSupportedException"}, {"package_name": "java.io", "class_name": "Closeable", "full_name": "java.io.Closeable"}, {"package_name": "java.nio.channels", "class_name": "ClosedByInterruptException", "full_name": "java.nio.channels.ClosedByInterruptException"}, {"package_name": "java.nio.channels", "class_name": "ClosedChannelException", "full_name": "java.nio.channels.ClosedChannelException"}, {"package_name": "java.nio.file", "class_name": "ClosedDirectoryStreamException", "full_name": "java.nio.file.ClosedDirectoryStreamException"}, {"package_name": "java.nio.file", "class_name": "ClosedFileSystemException", "full_name": "java.nio.file.ClosedFileSystemException"}, {"package_name": "java.nio.channels", "class_name": "ClosedSelectorException", "full_name": "java.nio.channels.ClosedSelectorException"}, {"package_name": "java.nio.file", "class_name": "ClosedWatchServiceException", "full_name": "java.nio.file.ClosedWatchServiceException"}, {"package_name": "java.nio.charset", "class_name": "CoderMalfunctionError", "full_name": "java.nio.charset.CoderMalfunctionError"}, {"package_name": "java.nio.charset", "class_name": "CoderResult", "full_name": "java.nio.charset.CoderResult"}, {"package_name": "java.security", "class_name": "CodeSigner", "full_name": "java.security.CodeSigner"}, {"package_name": "java.security", "class_name": "CodeSource", "full_name": "java.security.CodeSource"}, {"package_name": "java.nio.charset", "class_name": "CodingErrorAction", "full_name": "java.nio.charset.CodingErrorAction"}, {"package_name": "android.view", "class_name": "CollapsibleActionView", "full_name": "android.view.CollapsibleActionView"}, {"package_name": "android.icu.text", "class_name": "CollationElementIterator", "full_name": "android.icu.text.CollationElementIterator"}, {"package_name": "java.text", "class_name": "CollationElementIterator", "full_name": "java.text.CollationElementIterator"}, {"package_name": "android.icu.text", "class_name": "CollationKey", "full_name": "android.icu.text.CollationKey"}, {"package_name": "java.text", "class_name": "CollationKey", "full_name": "java.text.CollationKey"}, {"package_name": "android.icu.text", "class_name": "CollationKey.BoundMode", "full_name": "android.icu.text.CollationKey.BoundMode"}, {"package_name": "android.icu.text", "class_name": "Collator", "full_name": "android.icu.text.Collator"}, {"package_name": "java.text", "class_name": "Collator", "full_name": "java.text.Collator"}, {"package_name": "android.icu.text", "class_name": "Collator.ReorderCodes", "full_name": "android.icu.text.Collator.ReorderCodes"}, {"package_name": "java.security.cert", "class_name": "CollectionCertStoreParameters", "full_name": "java.security.cert.CollectionCertStoreParameters"}, {"package_name": "java.util", "class_name": "Collections", "full_name": "java.util.Collections"}, {"package_name": "java.util.stream", "class_name": "Collector.Characteristics", "full_name": "java.util.stream.Collector.Characteristics"}, {"package_name": "java.util.stream", "class_name": "Collectors", "full_name": "java.util.stream.Collectors"}, {"package_name": "android.graphics", "class_name": "Color", "full_name": "android.graphics.Color"}, {"package_name": "android.graphics.drawable", "class_name": "ColorDrawable", "full_name": "android.graphics.drawable.ColorDrawable"}, {"package_name": "android.graphics", "class_name": "ColorFilter", "full_name": "android.graphics.ColorFilter"}, {"package_name": "android.graphics", "class_name": "ColorMatrix", "full_name": "android.graphics.ColorMatrix"}, {"package_name": "android.graphics", "class_name": "ColorMatrixColorFilter", "full_name": "android.graphics.ColorMatrixColorFilter"}, {"package_name": "android.graphics", "class_name": "ColorSpace", "full_name": "android.graphics.ColorSpace"}, {"package_name": "android.graphics", "class_name": "ColorSpace.Adaptation", "full_name": "android.graphics.ColorSpace.Adaptation"}, {"package_name": "android.graphics", "class_name": "ColorSpace.Connector", "full_name": "android.graphics.ColorSpace.Connector"}, {"package_name": "android.graphics", "class_name": "ColorSpace.Model", "full_name": "android.graphics.ColorSpace.Model"}, {"package_name": "android.graphics", "class_name": "ColorSpace.Named", "full_name": "android.graphics.ColorSpace.Named"}, {"package_name": "android.graphics", "class_name": "ColorSpace.RenderIntent", "full_name": "android.graphics.ColorSpace.RenderIntent"}, {"package_name": "android.graphics", "class_name": "ColorSpace.Rgb", "full_name": "android.graphics.ColorSpace.Rgb"}, {"package_name": "android.graphics", "class_name": "ColorSpace.Rgb.TransferParameters", "full_name": "android.graphics.ColorSpace.Rgb.TransferParameters"}, {"package_name": "android.content.res", "class_name": "ColorStateList", "full_name": "android.content.res.ColorStateList"}, {"package_name": "javax.sql", "class_name": "CommonDataSource", "full_name": "javax.sql.CommonDataSource"}, {"package_name": "android.icu.text", "class_name": "CompactDecimalFormat", "full_name": "android.icu.text.CompactDecimalFormat"}, {"package_name": "android.icu.text", "class_name": "CompactDecimalFormat.CompactStyle", "full_name": "android.icu.text.CompactDecimalFormat.CompactStyle"}, {"package_name": "android.companion", "class_name": "CompanionDeviceManager", "full_name": "android.companion.CompanionDeviceManager"}, {"package_name": "android.companion", "class_name": "CompanionDeviceManager.Callback", "full_name": "android.companion.CompanionDeviceManager.Callback"}, {"package_name": "android.test", "class_name": "ComparisonFailure", "full_name": "android.test.ComparisonFailure"}, {"package_name": "junit.framework", "class_name": "ComparisonFailure", "full_name": "junit.framework.ComparisonFailure"}, {"package_name": "java.lang", "class_name": "Compiler", "full_name": "java.lang.Compiler"}, {"package_name": "java.util.concurrent", "class_name": "CompletableFuture.AsynchronousCompletionTask", "full_name": "java.util.concurrent.CompletableFuture.AsynchronousCompletionTask"}, {"package_name": "java.util.concurrent", "class_name": "CompletionException", "full_name": "java.util.concurrent.CompletionException"}, {"package_name": "android.view.inputmethod", "class_name": "CompletionInfo", "full_name": "android.view.inputmethod.CompletionInfo"}, {"package_name": "android.content", "class_name": "ComponentCallbacks", "full_name": "android.content.ComponentCallbacks"}, {"package_name": "android.content.pm", "class_name": "ComponentInfo", "full_name": "android.content.pm.ComponentInfo"}, {"package_name": "android.content", "class_name": "ComponentName", "full_name": "android.content.ComponentName"}, {"package_name": "android.graphics", "class_name": "ComposePathEffect", "full_name": "android.graphics.ComposePathEffect"}, {"package_name": "android.graphics", "class_name": "ComposeShader", "full_name": "android.graphics.ComposeShader"}, {"package_name": "android.widget", "class_name": "CompoundButton", "full_name": "android.widget.CompoundButton"}, {"package_name": "android.widget", "class_name": "CompoundButton.OnCheckedChangeListener", "full_name": "android.widget.CompoundButton.OnCheckedChangeListener"}, {"package_name": "java.util", "class_name": "ConcurrentModificationException", "full_name": "java.util.ConcurrentModificationException"}, {"package_name": "android.service.notification", "class_name": "Condition", "full_name": "android.service.notification.Condition"}, {"package_name": "java.util.concurrent.locks", "class_name": "Condition", "full_name": "java.util.concurrent.locks.Condition"}, {"package_name": "android.service.notification", "class_name": "ConditionProviderService", "full_name": "android.service.notification.ConditionProviderService"}, {"package_name": "android.os", "class_name": "ConditionVariable", "full_name": "android.os.ConditionVariable"}, {"package_name": "android.telecom", "class_name": "Conference", "full_name": "android.telecom.Conference"}, {"package_name": "android.telecom", "class_name": "Conferenceable", "full_name": "android.telecom.Conferenceable"}, {"package_name": "android.util", "class_name": "Config", "full_name": "android.util.Config"}, {"package_name": "android.content.res", "class_name": "Configuration", "full_name": "android.content.res.Configuration"}, {"package_name": "android.content.pm", "class_name": "ConfigurationInfo", "full_name": "android.content.pm.ConfigurationInfo"}, {"package_name": "android.app.usage", "class_name": "ConfigurationStats", "full_name": "android.app.usage.ConfigurationStats"}, {"package_name": "android.security", "class_name": "ConfirmationAlreadyPresentingException", "full_name": "android.security.ConfirmationAlreadyPresentingException"}, {"package_name": "android.security", "class_name": "ConfirmationCallback", "full_name": "android.security.ConfirmationCallback"}, {"package_name": "android.security", "class_name": "ConfirmationNotAvailableException", "full_name": "android.security.ConfirmationNotAvailableException"}, {"package_name": "android.security", "class_name": "ConfirmationPrompt", "full_name": "android.security.ConfirmationPrompt"}, {"package_name": "android.security", "class_name": "ConfirmationPrompt.Builder", "full_name": "android.security.ConfirmationPrompt.Builder"}, {"package_name": "android.app.admin", "class_name": "ConnectEvent", "full_name": "android.app.admin.ConnectEvent"}, {"package_name": "java.net", "class_name": "ConnectException", "full_name": "java.net.ConnectException"}, {"package_name": "android.telecom", "class_name": "Connection", "full_name": "android.telecom.Connection"}, {"package_name": "java.sql", "class_name": "Connection", "full_name": "java.sql.Connection"}, {"package_name": "android.telecom", "class_name": "Connection.RttModifyStatus", "full_name": "android.telecom.Connection.RttModifyStatus"}, {"package_name": "android.telecom", "class_name": "Connection.RttTextStream", "full_name": "android.telecom.Connection.RttTextStream"}, {"package_name": "android.telecom", "class_name": "Connection.VideoProvider", "full_name": "android.telecom.Connection.VideoProvider"}, {"package_name": "javax.sql", "class_name": "ConnectionEvent", "full_name": "javax.sql.ConnectionEvent"}, {"package_name": "javax.sql", "class_name": "ConnectionEventListener", "full_name": "javax.sql.ConnectionEventListener"}, {"package_name": "java.nio.channels", "class_name": "ConnectionPendingException", "full_name": "java.nio.channels.ConnectionPendingException"}, {"package_name": "javax.sql", "class_name": "ConnectionPoolDataSource", "full_name": "javax.sql.ConnectionPoolDataSource"}, {"package_name": "android.telecom", "class_name": "ConnectionRequest", "full_name": "android.telecom.ConnectionRequest"}, {"package_name": "android.telecom", "class_name": "ConnectionService", "full_name": "android.telecom.ConnectionService"}, {"package_name": "android.net", "class_name": "ConnectivityManager", "full_name": "android.net.ConnectivityManager"}, {"package_name": "android.net", "class_name": "ConnectivityManager.NetworkCallback", "full_name": "android.net.ConnectivityManager.NetworkCallback"}, {"package_name": "android.net", "class_name": "ConnectivityManager.OnNetworkActiveListener", "full_name": "android.net.ConnectivityManager.OnNetworkActiveListener"}, {"package_name": "org.apache.http.conn", "class_name": "ConnectTimeoutException", "full_name": "org.apache.http.conn.ConnectTimeoutException"}, {"package_name": "java.io", "class_name": "Console", "full_name": "java.io.Console"}, {"package_name": "java.util.logging", "class_name": "ConsoleHandler", "full_name": "java.util.logging.ConsoleHandler"}, {"package_name": "android.webkit", "class_name": "ConsoleMessage", "full_name": "android.webkit.ConsoleMessage"}, {"package_name": "android.webkit", "class_name": "ConsoleMessage.MessageLevel", "full_name": "android.webkit.ConsoleMessage.MessageLevel"}, {"package_name": "java.lang.invoke", "class_name": "ConstantCallSite", "full_name": "java.lang.invoke.ConstantCallSite"}, {"package_name": "android.hardware", "class_name": "ConsumerIrManager", "full_name": "android.hardware.ConsumerIrManager"}, {"package_name": "android.hardware", "class_name": "ConsumerIrManager.CarrierFrequencyRange", "full_name": "android.hardware.ConsumerIrManager.CarrierFrequencyRange"}, {"package_name": "android.provider", "class_name": "Contacts", "full_name": "android.provider.Contacts"}, {"package_name": "android.provider", "class_name": "Contacts.ContactMethods", "full_name": "android.provider.Contacts.ContactMethods"}, {"package_name": "android.provider", "class_name": "Contacts.ContactMethodsColumns", "full_name": "android.provider.Contacts.ContactMethodsColumns"}, {"package_name": "android.provider", "class_name": "Contacts.Extensions", "full_name": "android.provider.Contacts.Extensions"}, {"package_name": "android.provider", "class_name": "Contacts.ExtensionsColumns", "full_name": "android.provider.Contacts.ExtensionsColumns"}, {"package_name": "android.provider", "class_name": "Contacts.GroupMembership", "full_name": "android.provider.Contacts.GroupMembership"}, {"package_name": "android.provider", "class_name": "Contacts.Groups", "full_name": "android.provider.Contacts.Groups"}, {"package_name": "android.provider", "class_name": "Contacts.GroupsColumns", "full_name": "android.provider.Contacts.GroupsColumns"}, {"package_name": "android.provider", "class_name": "Contacts.Intents", "full_name": "android.provider.Contacts.Intents"}, {"package_name": "android.provider", "class_name": "Contacts.Intents.Insert", "full_name": "android.provider.Contacts.Intents.Insert"}, {"package_name": "android.provider", "class_name": "Contacts.Intents.UI", "full_name": "android.provider.Contacts.Intents.UI"}, {"package_name": "android.provider", "class_name": "Contacts.OrganizationColumns", "full_name": "android.provider.Contacts.OrganizationColumns"}, {"package_name": "android.provider", "class_name": "Contacts.Organizations", "full_name": "android.provider.Contacts.Organizations"}, {"package_name": "android.provider", "class_name": "Contacts.People", "full_name": "android.provider.Contacts.People"}, {"package_name": "android.provider", "class_name": "Contacts.People.ContactMethods", "full_name": "android.provider.Contacts.People.ContactMethods"}, {"package_name": "android.provider", "class_name": "Contacts.People.Extensions", "full_name": "android.provider.Contacts.People.Extensions"}, {"package_name": "android.provider", "class_name": "Contacts.People.Phones", "full_name": "android.provider.Contacts.People.Phones"}, {"package_name": "android.provider", "class_name": "Contacts.PeopleColumns", "full_name": "android.provider.Contacts.PeopleColumns"}, {"package_name": "android.provider", "class_name": "Contacts.Phones", "full_name": "android.provider.Contacts.Phones"}, {"package_name": "android.provider", "class_name": "Contacts.PhonesColumns", "full_name": "android.provider.Contacts.PhonesColumns"}, {"package_name": "android.provider", "class_name": "Contacts.Photos", "full_name": "android.provider.Contacts.Photos"}, {"package_name": "android.provider", "class_name": "Contacts.PhotosColumns", "full_name": "android.provider.Contacts.PhotosColumns"}, {"package_name": "android.provider", "class_name": "Contacts.PresenceColumns", "full_name": "android.provider.Contacts.PresenceColumns"}, {"package_name": "android.provider", "class_name": "Contacts.Settings", "full_name": "android.provider.Contacts.Settings"}, {"package_name": "android.provider", "class_name": "Contacts.SettingsColumns", "full_name": "android.provider.Contacts.SettingsColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract", "full_name": "android.provider.ContactsContract"}, {"package_name": "android.provider", "class_name": "ContactsContract.AggregationExceptions", "full_name": "android.provider.ContactsContract.AggregationExceptions"}, {"package_name": "android.provider", "class_name": "ContactsContract.BaseSyncColumns", "full_name": "android.provider.ContactsContract.BaseSyncColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds", "full_name": "android.provider.ContactsContract.CommonDataKinds"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.BaseTypes", "full_name": "android.provider.ContactsContract.CommonDataKinds.BaseTypes"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Callable", "full_name": "android.provider.ContactsContract.CommonDataKinds.Callable"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.CommonColumns", "full_name": "android.provider.ContactsContract.CommonDataKinds.CommonColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Contactables", "full_name": "android.provider.ContactsContract.CommonDataKinds.Contactables"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Email", "full_name": "android.provider.ContactsContract.CommonDataKinds.Email"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Event", "full_name": "android.provider.ContactsContract.CommonDataKinds.Event"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.GroupMembership", "full_name": "android.provider.ContactsContract.CommonDataKinds.GroupMembership"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Identity", "full_name": "android.provider.ContactsContract.CommonDataKinds.Identity"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Im", "full_name": "android.provider.ContactsContract.CommonDataKinds.Im"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Nickname", "full_name": "android.provider.ContactsContract.CommonDataKinds.Nickname"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Note", "full_name": "android.provider.ContactsContract.CommonDataKinds.Note"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Organization", "full_name": "android.provider.ContactsContract.CommonDataKinds.Organization"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Phone", "full_name": "android.provider.ContactsContract.CommonDataKinds.Phone"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Photo", "full_name": "android.provider.ContactsContract.CommonDataKinds.Photo"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Relation", "full_name": "android.provider.ContactsContract.CommonDataKinds.Relation"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.SipAddress", "full_name": "android.provider.ContactsContract.CommonDataKinds.SipAddress"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.StructuredName", "full_name": "android.provider.ContactsContract.CommonDataKinds.StructuredName"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.StructuredPostal", "full_name": "android.provider.ContactsContract.CommonDataKinds.StructuredPostal"}, {"package_name": "android.provider", "class_name": "ContactsContract.CommonDataKinds.Website", "full_name": "android.provider.ContactsContract.CommonDataKinds.Website"}, {"package_name": "android.provider", "class_name": "ContactsContract.ContactNameColumns", "full_name": "android.provider.ContactsContract.ContactNameColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.ContactOptionsColumns", "full_name": "android.provider.ContactsContract.ContactOptionsColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.Contacts", "full_name": "android.provider.ContactsContract.Contacts"}, {"package_name": "android.provider", "class_name": "ContactsContract.Contacts.AggregationSuggestions", "full_name": "android.provider.ContactsContract.Contacts.AggregationSuggestions"}, {"package_name": "android.provider", "class_name": "ContactsContract.Contacts.AggregationSuggestions.Builder", "full_name": "android.provider.ContactsContract.Contacts.AggregationSuggestions.Builder"}, {"package_name": "android.provider", "class_name": "ContactsContract.Contacts.Data", "full_name": "android.provider.ContactsContract.Contacts.Data"}, {"package_name": "android.provider", "class_name": "ContactsContract.Contacts.Entity", "full_name": "android.provider.ContactsContract.Contacts.Entity"}, {"package_name": "android.provider", "class_name": "ContactsContract.Contacts.Photo", "full_name": "android.provider.ContactsContract.Contacts.Photo"}, {"package_name": "android.provider", "class_name": "ContactsContract.ContactsColumns", "full_name": "android.provider.ContactsContract.ContactsColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.ContactStatusColumns", "full_name": "android.provider.ContactsContract.ContactStatusColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.Data", "full_name": "android.provider.ContactsContract.Data"}, {"package_name": "android.provider", "class_name": "ContactsContract.DataColumns", "full_name": "android.provider.ContactsContract.DataColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.DataColumnsWithJoins", "full_name": "android.provider.ContactsContract.DataColumnsWithJoins"}, {"package_name": "android.provider", "class_name": "ContactsContract.DataUsageFeedback", "full_name": "android.provider.ContactsContract.DataUsageFeedback"}, {"package_name": "android.provider", "class_name": "ContactsContract.DataUsageStatColumns", "full_name": "android.provider.ContactsContract.DataUsageStatColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.DeletedContacts", "full_name": "android.provider.ContactsContract.DeletedContacts"}, {"package_name": "android.provider", "class_name": "ContactsContract.DeletedContactsColumns", "full_name": "android.provider.ContactsContract.DeletedContactsColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.Directory", "full_name": "android.provider.ContactsContract.Directory"}, {"package_name": "android.provider", "class_name": "ContactsContract.DisplayNameSources", "full_name": "android.provider.ContactsContract.DisplayNameSources"}, {"package_name": "android.provider", "class_name": "ContactsContract.DisplayPhoto", "full_name": "android.provider.ContactsContract.DisplayPhoto"}, {"package_name": "android.provider", "class_name": "ContactsContract.FullNameStyle", "full_name": "android.provider.ContactsContract.FullNameStyle"}, {"package_name": "android.provider", "class_name": "ContactsContract.Groups", "full_name": "android.provider.ContactsContract.Groups"}, {"package_name": "android.provider", "class_name": "ContactsContract.GroupsColumns", "full_name": "android.provider.ContactsContract.GroupsColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.Intents", "full_name": "android.provider.ContactsContract.Intents"}, {"package_name": "android.provider", "class_name": "ContactsContract.Intents.Insert", "full_name": "android.provider.ContactsContract.Intents.Insert"}, {"package_name": "android.provider", "class_name": "ContactsContract.PhoneLookup", "full_name": "android.provider.ContactsContract.PhoneLookup"}, {"package_name": "android.provider", "class_name": "ContactsContract.PhoneLookupColumns", "full_name": "android.provider.ContactsContract.PhoneLookupColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.PhoneticNameStyle", "full_name": "android.provider.ContactsContract.PhoneticNameStyle"}, {"package_name": "android.provider", "class_name": "ContactsContract.PinnedPositions", "full_name": "android.provider.ContactsContract.PinnedPositions"}, {"package_name": "android.provider", "class_name": "ContactsContract.Presence", "full_name": "android.provider.ContactsContract.Presence"}, {"package_name": "android.provider", "class_name": "ContactsContract.PresenceColumns", "full_name": "android.provider.ContactsContract.PresenceColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.Profile", "full_name": "android.provider.ContactsContract.Profile"}, {"package_name": "android.provider", "class_name": "ContactsContract.ProfileSyncState", "full_name": "android.provider.ContactsContract.ProfileSyncState"}, {"package_name": "android.provider", "class_name": "ContactsContract.ProviderStatus", "full_name": "android.provider.ContactsContract.ProviderStatus"}, {"package_name": "android.provider", "class_name": "ContactsContract.QuickContact", "full_name": "android.provider.ContactsContract.QuickContact"}, {"package_name": "android.provider", "class_name": "ContactsContract.RawContacts", "full_name": "android.provider.ContactsContract.RawContacts"}, {"package_name": "android.provider", "class_name": "ContactsContract.RawContacts.Data", "full_name": "android.provider.ContactsContract.RawContacts.Data"}, {"package_name": "android.provider", "class_name": "ContactsContract.RawContacts.DisplayPhoto", "full_name": "android.provider.ContactsContract.RawContacts.DisplayPhoto"}, {"package_name": "android.provider", "class_name": "ContactsContract.RawContacts.Entity", "full_name": "android.provider.ContactsContract.RawContacts.Entity"}, {"package_name": "android.provider", "class_name": "ContactsContract.RawContactsColumns", "full_name": "android.provider.ContactsContract.RawContactsColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.RawContactsEntity", "full_name": "android.provider.ContactsContract.RawContactsEntity"}, {"package_name": "android.provider", "class_name": "ContactsContract.SearchSnippets", "full_name": "android.provider.ContactsContract.SearchSnippets"}, {"package_name": "android.provider", "class_name": "ContactsContract.Settings", "full_name": "android.provider.ContactsContract.Settings"}, {"package_name": "android.provider", "class_name": "ContactsContract.SettingsColumns", "full_name": "android.provider.ContactsContract.SettingsColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.StatusColumns", "full_name": "android.provider.ContactsContract.StatusColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.StatusUpdates", "full_name": "android.provider.ContactsContract.StatusUpdates"}, {"package_name": "android.provider", "class_name": "ContactsContract.SyncColumns", "full_name": "android.provider.ContactsContract.SyncColumns"}, {"package_name": "android.provider", "class_name": "ContactsContract.SyncState", "full_name": "android.provider.ContactsContract.SyncState"}, {"package_name": "java.net", "class_name": "ContentHandler", "full_name": "java.net.ContentHandler"}, {"package_name": "org.xml.sax", "class_name": "ContentHandler", "full_name": "org.xml.sax.ContentHandler"}, {"package_name": "java.net", "class_name": "ContentHandlerFactory", "full_name": "java.net.ContentHandlerFactory"}, {"package_name": "android.database", "class_name": "ContentObservable", "full_name": "android.database.ContentObservable"}, {"package_name": "android.database", "class_name": "ContentObserver", "full_name": "android.database.ContentObserver"}, {"package_name": "android.content", "class_name": "ContentProvider", "full_name": "android.content.ContentProvider"}, {"package_name": "android.content", "class_name": "ContentProviderClient", "full_name": "android.content.ContentProviderClient"}, {"package_name": "android.content", "class_name": "ContentProviderOperation", "full_name": "android.content.ContentProviderOperation"}, {"package_name": "android.content", "class_name": "ContentProviderOperation.Builder", "full_name": "android.content.ContentProviderOperation.Builder"}, {"package_name": "android.content", "class_name": "ContentProviderResult", "full_name": "android.content.ContentProviderResult"}, {"package_name": "android.content", "class_name": "ContentQueryMap", "full_name": "android.content.ContentQueryMap"}, {"package_name": "android.content", "class_name": "ContentResolver", "full_name": "android.content.ContentResolver"}, {"package_name": "android.content", "class_name": "ContentUris", "full_name": "android.content.ContentUris"}, {"package_name": "android.os.strictmode", "class_name": "ContentUriWithoutPermissionViolation", "full_name": "android.os.strictmode.ContentUriWithoutPermissionViolation"}, {"package_name": "android.content", "class_name": "ContentValues", "full_name": "android.content.ContentValues"}, {"package_name": "android.content", "class_name": "Context", "full_name": "android.content.Context"}, {"package_name": "android.view", "class_name": "ContextMenu", "full_name": "android.view.ContextMenu"}, {"package_name": "android.view", "class_name": "ContextMenu.ContextMenuInfo", "full_name": "android.view.ContextMenu.ContextMenuInfo"}, {"package_name": "android.view", "class_name": "ContextThemeWrapper", "full_name": "android.view.ContextThemeWrapper"}, {"package_name": "android.content", "class_name": "ContextWrapper", "full_name": "android.content.ContextWrapper"}, {"package_name": "java.net", "class_name": "CookieHandler", "full_name": "java.net.CookieHandler"}, {"package_name": "android.webkit", "class_name": "CookieManager", "full_name": "android.webkit.CookieManager"}, {"package_name": "java.net", "class_name": "CookieManager", "full_name": "java.net.CookieManager"}, {"package_name": "java.net", "class_name": "CookiePolicy", "full_name": "java.net.CookiePolicy"}, {"package_name": "java.net", "class_name": "CookieStore", "full_name": "java.net.CookieStore"}, {"package_name": "android.webkit", "class_name": "CookieSyncManager", "full_name": "android.webkit.CookieSyncManager"}, {"package_name": "android.icu.util", "class_name": "CopticCalendar", "full_name": "android.icu.util.CopticCalendar"}, {"package_name": "java.nio.file", "class_name": "CopyOption", "full_name": "java.nio.file.CopyOption"}, {"package_name": "org.apache.http.params", "class_name": "CoreConnectionPNames", "full_name": "org.apache.http.params.CoreConnectionPNames"}, {"package_name": "android.graphics", "class_name": "CornerPathEffect", "full_name": "android.graphics.CornerPathEffect"}, {"package_name": "android.view.inputmethod", "class_name": "CorrectionInfo", "full_name": "android.view.inputmethod.CorrectionInfo"}, {"package_name": "java.util.concurrent", "class_name": "CountDownLatch", "full_name": "java.util.concurrent.CountDownLatch"}, {"package_name": "android.os", "class_name": "CountDownTimer", "full_name": "android.os.CountDownTimer"}, {"package_name": "android.os", "class_name": "CpuUsageInfo", "full_name": "android.os.CpuUsageInfo"}, {"package_name": "android.net", "class_name": "Credentials", "full_name": "android.net.Credentials"}, {"package_name": "android.location", "class_name": "Criteria", "full_name": "android.location.Criteria"}, {"package_name": "java.security.cert", "class_name": "CRL", "full_name": "java.security.cert.CRL"}, {"package_name": "java.security.cert", "class_name": "CRLException", "full_name": "java.security.cert.CRLException"}, {"package_name": "java.security.cert", "class_name": "CRLReason", "full_name": "java.security.cert.CRLReason"}, {"package_name": "java.security.cert", "class_name": "CRLSelector", "full_name": "java.security.cert.CRLSelector"}, {"package_name": "android.database", "class_name": "CrossProcessCursor", "full_name": "android.database.CrossProcessCursor"}, {"package_name": "android.database", "class_name": "CrossProcessCursorWrapper", "full_name": "android.database.CrossProcessCursorWrapper"}, {"package_name": "android.content.pm", "class_name": "CrossProfileApps", "full_name": "android.content.pm.CrossProfileApps"}, {"package_name": "java.security", "class_name": "CryptoPrimitive", "full_name": "java.security.CryptoPrimitive"}, {"package_name": "android.icu.util", "class_name": "Currency", "full_name": "android.icu.util.Currency"}, {"package_name": "java.util", "class_name": "Currency", "full_name": "java.util.Currency"}, {"package_name": "android.icu.util", "class_name": "Currency.CurrencyUsage", "full_name": "android.icu.util.Currency.CurrencyUsage"}, {"package_name": "android.icu.util", "class_name": "CurrencyAmount", "full_name": "android.icu.util.CurrencyAmount"}, {"package_name": "android.icu.text", "class_name": "CurrencyPluralInfo", "full_name": "android.icu.text.CurrencyPluralInfo"}, {"package_name": "android.database", "class_name": "Cursor", "full_name": "android.database.Cursor"}, {"package_name": "android.widget", "class_name": "CursorAdapter", "full_name": "android.widget.CursorAdapter"}, {"package_name": "android.view.inputmethod", "class_name": "CursorAnchorInfo", "full_name": "android.view.inputmethod.CursorAnchorInfo"}, {"package_name": "android.view.inputmethod", "class_name": "CursorAnchorInfo.Builder", "full_name": "android.view.inputmethod.CursorAnchorInfo.Builder"}, {"package_name": "android.database", "class_name": "CursorIndexOutOfBoundsException", "full_name": "android.database.CursorIndexOutOfBoundsException"}, {"package_name": "android.database", "class_name": "CursorJoiner", "full_name": "android.database.CursorJoiner"}, {"package_name": "android.database", "class_name": "CursorJoiner.Result", "full_name": "android.database.CursorJoiner.Result"}, {"package_name": "android.content", "class_name": "CursorLoader", "full_name": "android.content.CursorLoader"}, {"package_name": "android.widget", "class_name": "CursorTreeAdapter", "full_name": "android.widget.CursorTreeAdapter"}, {"package_name": "android.database", "class_name": "CursorWindow", "full_name": "android.database.CursorWindow"}, {"package_name": "android.database", "class_name": "CursorWrapper", "full_name": "android.database.CursorWrapper"}, {"package_name": "android.service.autofill", "class_name": "CustomDescription", "full_name": "android.service.autofill.CustomDescription"}, {"package_name": "android.service.autofill", "class_name": "CustomDescription.Builder", "full_name": "android.service.autofill.CustomDescription.Builder"}, {"package_name": "android.printservice", "class_name": "CustomPrinterIconCallback", "full_name": "android.printservice.CustomPrinterIconCallback"}, {"package_name": "android.os.strictmode", "class_name": "CustomViolation", "full_name": "android.os.strictmode.CustomViolation"}, {"package_name": "android.view.animation", "class_name": "CycleInterpolator", "full_name": "android.view.animation.CycleInterpolator"}, {"package_name": "java.util.concurrent", "class_name": "CyclicBarrier", "full_name": "java.util.concurrent.CyclicBarrier"}, {"package_name": "android.graphics", "class_name": "DashPathEffect", "full_name": "android.graphics.DashPathEffect"}, {"package_name": "android.database", "class_name": "DatabaseErrorHandler", "full_name": "android.database.DatabaseErrorHandler"}, {"package_name": "java.sql", "class_name": "DatabaseMetaData", "full_name": "java.sql.DatabaseMetaData"}, {"package_name": "android.database", "class_name": "DatabaseUtils", "full_name": "android.database.DatabaseUtils"}, {"package_name": "android.database", "class_name": "DatabaseUtils.InsertHelper", "full_name": "android.database.DatabaseUtils.InsertHelper"}, {"package_name": "java.util.zip", "class_name": "DataFormatException", "full_name": "java.util.zip.DataFormatException"}, {"package_name": "java.nio.channels", "class_name": "DatagramChannel", "full_name": "java.nio.channels.DatagramChannel"}, {"package_name": "java.net", "class_name": "DatagramPacket", "full_name": "java.net.DatagramPacket"}, {"package_name": "java.net", "class_name": "DatagramSocket", "full_name": "java.net.DatagramSocket"}, {"package_name": "java.net", "class_name": "DatagramSocketImpl", "full_name": "java.net.DatagramSocketImpl"}, {"package_name": "java.net", "class_name": "DatagramSocketImplFactory", "full_name": "java.net.DatagramSocketImplFactory"}, {"package_name": "java.io", "class_name": "DataInput", "full_name": "java.io.DataInput"}, {"package_name": "java.io", "class_name": "DataInputStream", "full_name": "java.io.DataInputStream"}, {"package_name": "java.io", "class_name": "DataOutput", "full_name": "java.io.DataOutput"}, {"package_name": "java.io", "class_name": "DataOutputStream", "full_name": "java.io.DataOutputStream"}, {"package_name": "android.service.autofill", "class_name": "Dataset", "full_name": "android.service.autofill.Dataset"}, {"package_name": "android.service.autofill", "class_name": "Dataset.Builder", "full_name": "android.service.autofill.Dataset.Builder"}, {"package_name": "android.database", "class_name": "DataSetObservable", "full_name": "android.database.DataSetObservable"}, {"package_name": "android.database", "class_name": "DataSetObserver", "full_name": "android.database.DataSetObserver"}, {"package_name": "javax.sql", "class_name": "DataSource", "full_name": "javax.sql.DataSource"}, {"package_name": "java.sql", "class_name": "DataTruncation", "full_name": "java.sql.DataTruncation"}, {"package_name": "javax.xml.datatype", "class_name": "DatatypeConfigurationException", "full_name": "javax.xml.datatype.DatatypeConfigurationException"}, {"package_name": "javax.xml.datatype", "class_name": "DatatypeConstants", "full_name": "javax.xml.datatype.DatatypeConstants"}, {"package_name": "javax.xml.datatype", "class_name": "DatatypeConstants.Field", "full_name": "javax.xml.datatype.DatatypeConstants.Field"}, {"package_name": "javax.xml.datatype", "class_name": "DatatypeFactory", "full_name": "javax.xml.datatype.DatatypeFactory"}, {"package_name": "java.sql", "class_name": "Date", "full_name": "java.sql.Date"}, {"package_name": "java.util", "class_name": "Date", "full_name": "java.util.Date"}, {"package_name": "android.icu.text", "class_name": "DateFormat", "full_name": "android.icu.text.DateFormat"}, {"package_name": "android.text.format", "class_name": "DateFormat", "full_name": "android.text.format.DateFormat"}, {"package_name": "java.text", "class_name": "DateFormat", "full_name": "java.text.DateFormat"}, {"package_name": "android.icu.text", "class_name": "DateFormat.BooleanAttribute", "full_name": "android.icu.text.DateFormat.BooleanAttribute"}, {"package_name": "android.icu.text", "class_name": "DateFormat.Field", "full_name": "android.icu.text.DateFormat.Field"}, {"package_name": "java.text", "class_name": "DateFormat.Field", "full_name": "java.text.DateFormat.Field"}, {"package_name": "android.icu.text", "class_name": "DateFormatSymbols", "full_name": "android.icu.text.DateFormatSymbols"}, {"package_name": "java.text", "class_name": "DateFormatSymbols", "full_name": "java.text.DateFormatSymbols"}, {"package_name": "android.icu.util", "class_name": "DateInterval", "full_name": "android.icu.util.DateInterval"}, {"package_name": "android.icu.text", "class_name": "DateIntervalFormat", "full_name": "android.icu.text.DateIntervalFormat"}, {"package_name": "android.icu.text", "class_name": "DateIntervalInfo", "full_name": "android.icu.text.DateIntervalInfo"}, {"package_name": "android.icu.text", "class_name": "DateIntervalInfo.PatternInfo", "full_name": "android.icu.text.DateIntervalInfo.PatternInfo"}, {"package_name": "android.text.method", "class_name": "DateKeyListener", "full_name": "android.text.method.DateKeyListener"}, {"package_name": "android.widget", "class_name": "DatePicker", "full_name": "android.widget.DatePicker"}, {"package_name": "android.widget", "class_name": "DatePicker.OnDateChangedListener", "full_name": "android.widget.DatePicker.OnDateChangedListener"}, {"package_name": "android.app", "class_name": "DatePickerDialog", "full_name": "android.app.DatePickerDialog"}, {"package_name": "android.app", "class_name": "DatePickerDialog.OnDateSetListener", "full_name": "android.app.DatePickerDialog.OnDateSetListener"}, {"package_name": "android.webkit", "class_name": "DateSorter", "full_name": "android.webkit.DateSorter"}, {"package_name": "java.time", "class_name": "DateTimeException", "full_name": "java.time.DateTimeException"}, {"package_name": "java.time.format", "class_name": "DateTimeFormatter", "full_name": "java.time.format.DateTimeFormatter"}, {"package_name": "java.time.format", "class_name": "DateTimeFormatterBuilder", "full_name": "java.time.format.DateTimeFormatterBuilder"}, {"package_name": "android.text.method", "class_name": "DateTimeKeyListener", "full_name": "android.text.method.DateTimeKeyListener"}, {"package_name": "java.time.format", "class_name": "DateTimeParseException", "full_name": "java.time.format.DateTimeParseException"}, {"package_name": "android.icu.text", "class_name": "DateTimePatternGenerator", "full_name": "android.icu.text.DateTimePatternGenerator"}, {"package_name": "android.icu.text", "class_name": "DateTimePatternGenerator.PatternInfo", "full_name": "android.icu.text.DateTimePatternGenerator.PatternInfo"}, {"package_name": "android.service.autofill", "class_name": "DateTransformation", "full_name": "android.service.autofill.DateTransformation"}, {"package_name": "android.text.format", "class_name": "DateUtils", "full_name": "android.text.format.DateUtils"}, {"package_name": "android.service.autofill", "class_name": "DateValueSanitizer", "full_name": "android.service.autofill.DateValueSanitizer"}, {"package_name": "java.time", "class_name": "DayOfWeek", "full_name": "java.time.DayOfWeek"}, {"package_name": "android.os", "class_name": "DeadObjectException", "full_name": "android.os.DeadObjectException"}, {"package_name": "android.os", "class_name": "DeadSystemException", "full_name": "android.os.DeadSystemException"}, {"package_name": "android.os", "class_name": "Debug", "full_name": "android.os.Debug"}, {"package_name": "android.os", "class_name": "Debug.InstructionCount", "full_name": "android.os.Debug.InstructionCount"}, {"package_name": "android.os", "class_name": "Debug.MemoryInfo", "full_name": "android.os.Debug.MemoryInfo"}, {"package_name": "android.util", "class_name": "DebugUtils", "full_name": "android.util.DebugUtils"}, {"package_name": "android.view.animation", "class_name": "DecelerateInterpolator", "full_name": "android.view.animation.DecelerateInterpolator"}, {"package_name": "android.icu.text", "class_name": "DecimalFormat", "full_name": "android.icu.text.DecimalFormat"}, {"package_name": "java.text", "class_name": "DecimalFormat", "full_name": "java.text.DecimalFormat"}, {"package_name": "android.icu.text", "class_name": "DecimalFormatSymbols", "full_name": "android.icu.text.DecimalFormatSymbols"}, {"package_name": "java.text", "class_name": "DecimalFormatSymbols", "full_name": "java.text.DecimalFormatSymbols"}, {"package_name": "java.time.format", "class_name": "DecimalStyle", "full_name": "java.time.format.DecimalStyle"}, {"package_name": "org.xml.sax.ext", "class_name": "DeclHandler", "full_name": "org.xml.sax.ext.DeclHandler"}, {"package_name": "android.database", "class_name": "DefaultDatabaseErrorHandler", "full_name": "android.database.DefaultDatabaseErrorHandler"}, {"package_name": "org.xml.sax.helpers", "class_name": "DefaultHandler", "full_name": "org.xml.sax.helpers.DefaultHandler"}, {"package_name": "java.util.zip", "class_name": "Deflater", "full_name": "java.util.zip.Deflater"}, {"package_name": "java.util.zip", "class_name": "DeflaterInputStream", "full_name": "java.util.zip.DeflaterInputStream"}, {"package_name": "java.util.zip", "class_name": "DeflaterOutputStream", "full_name": "java.util.zip.DeflaterOutputStream"}, {"package_name": "java.util.concurrent", "class_name": "Delayed", "full_name": "java.util.concurrent.Delayed"}, {"package_name": "dalvik.system", "class_name": "DelegateLastClassLoader", "full_name": "dalvik.system.DelegateLastClassLoader"}, {"package_name": "android.media", "class_name": "DeniedByServerException", "full_name": "android.media.DeniedByServerException"}, {"package_name": "java.lang", "class_name": "Deprecated", "full_name": "java.lang.Deprecated"}, {"package_name": "javax.crypto.spec", "class_name": "DESedeKeySpec", "full_name": "javax.crypto.spec.DESedeKeySpec"}, {"package_name": "javax.crypto.spec", "class_name": "DESKeySpec", "full_name": "javax.crypto.spec.DESKeySpec"}, {"package_name": "javax.security.auth", "class_name": "Destroyable", "full_name": "javax.security.auth.Destroyable"}, {"package_name": "javax.security.auth", "class_name": "DestroyFailedException", "full_name": "javax.security.auth.DestroyFailedException"}, {"package_name": "android.app.admin", "class_name": "DeviceAdminInfo", "full_name": "android.app.admin.DeviceAdminInfo"}, {"package_name": "android.app.admin", "class_name": "DeviceAdminReceiver", "full_name": "android.app.admin.DeviceAdminReceiver"}, {"package_name": "android.app.admin", "class_name": "DeviceAdminService", "full_name": "android.app.admin.DeviceAdminService"}, {"package_name": "android.app.admin", "class_name": "DevicePolicyManager", "full_name": "android.app.admin.DevicePolicyManager"}, {"package_name": "android.app.admin", "class_name": "DevicePolicyManager.OnClearApplicationUserDataListener", "full_name": "android.app.admin.DevicePolicyManager.OnClearApplicationUserDataListener"}, {"package_name": "dalvik.system", "class_name": "DexClassLoader", "full_name": "dalvik.system.DexClassLoader"}, {"package_name": "dalvik.system", "class_name": "DexFile", "full_name": "dalvik.system.DexFile"}, {"package_name": "android.net", "class_name": "DhcpInfo", "full_name": "android.net.DhcpInfo"}, {"package_name": "javax.crypto.spec", "class_name": "DHGenParameterSpec", "full_name": "javax.crypto.spec.DHGenParameterSpec"}, {"package_name": "javax.crypto.interfaces", "class_name": "DHKey", "full_name": "javax.crypto.interfaces.DHKey"}, {"package_name": "javax.crypto.spec", "class_name": "DHParameterSpec", "full_name": "javax.crypto.spec.DHParameterSpec"}, {"package_name": "javax.crypto.interfaces", "class_name": "DHPrivateKey", "full_name": "javax.crypto.interfaces.DHPrivateKey"}, {"package_name": "javax.crypto.spec", "class_name": "DHPrivateKeySpec", "full_name": "javax.crypto.spec.DHPrivateKeySpec"}, {"package_name": "javax.crypto.interfaces", "class_name": "DHPublicKey", "full_name": "javax.crypto.interfaces.DHPublicKey"}, {"package_name": "javax.crypto.spec", "class_name": "DHPublicKeySpec", "full_name": "javax.crypto.spec.DHPublicKeySpec"}, {"package_name": "android.widget", "class_name": "DialerFilter", "full_name": "android.widget.DialerFilter"}, {"package_name": "android.text.method", "class_name": "DialerKeyListener", "full_name": "android.text.method.DialerKeyListener"}, {"package_name": "android.app", "class_name": "Dialog", "full_name": "android.app.Dialog"}, {"package_name": "android.app", "class_name": "DialogFragment", "full_name": "android.app.DialogFragment"}, {"package_name": "android.content", "class_name": "DialogInterface", "full_name": "android.content.DialogInterface"}, {"package_name": "android.content", "class_name": "DialogInterface.OnCancelListener", "full_name": "android.content.DialogInterface.OnCancelListener"}, {"package_name": "android.content", "class_name": "DialogInterface.OnClickListener", "full_name": "android.content.DialogInterface.OnClickListener"}, {"package_name": "android.content", "class_name": "DialogInterface.OnDismissListener", "full_name": "android.content.DialogInterface.OnDismissListener"}, {"package_name": "android.content", "class_name": "DialogInterface.OnKeyListener", "full_name": "android.content.DialogInterface.OnKeyListener"}, {"package_name": "android.content", "class_name": "DialogInterface.OnMultiChoiceClickListener", "full_name": "android.content.DialogInterface.OnMultiChoiceClickListener"}, {"package_name": "android.content", "class_name": "DialogInterface.OnShowListener", "full_name": "android.content.DialogInterface.OnShowListener"}, {"package_name": "android.preference", "class_name": "DialogPreference", "full_name": "android.preference.DialogPreference"}, {"package_name": "java.security", "class_name": "DigestException", "full_name": "java.security.DigestException"}, {"package_name": "java.security", "class_name": "DigestInputStream", "full_name": "java.security.DigestInputStream"}, {"package_name": "java.security", "class_name": "DigestOutputStream", "full_name": "java.security.DigestOutputStream"}, {"package_name": "android.widget", "class_name": "DigitalClock", "full_name": "android.widget.DigitalClock"}, {"package_name": "android.text.method", "class_name": "DigitsKeyListener", "full_name": "android.text.method.DigitsKeyListener"}, {"package_name": "java.nio.file", "class_name": "DirectoryIteratorException", "full_name": "java.nio.file.DirectoryIteratorException"}, {"package_name": "java.nio.file", "class_name": "DirectoryNotEmptyException", "full_name": "java.nio.file.DirectoryNotEmptyException"}, {"package_name": "android.telecom", "class_name": "DisconnectCause", "full_name": "android.telecom.DisconnectCause"}, {"package_name": "android.net.wifi.aware", "class_name": "DiscoverySession", "full_name": "android.net.wifi.aware.DiscoverySession"}, {"package_name": "android.net.wifi.aware", "class_name": "DiscoverySessionCallback", "full_name": "android.net.wifi.aware.DiscoverySessionCallback"}, {"package_name": "android.graphics", "class_name": "DiscretePathEffect", "full_name": "android.graphics.DiscretePathEffect"}, {"package_name": "android.os.strictmode", "class_name": "DiskReadViolation", "full_name": "android.os.strictmode.DiskReadViolation"}, {"package_name": "android.os.strictmode", "class_name": "DiskWriteViolation", "full_name": "android.os.strictmode.DiskWriteViolation"}, {"package_name": "android.view", "class_name": "Display", "full_name": "android.view.Display"}, {"package_name": "android.view", "class_name": "Display.HdrCapabilities", "full_name": "android.view.Display.HdrCapabilities"}, {"package_name": "android.view", "class_name": "Display.Mode", "full_name": "android.view.Display.Mode"}, {"package_name": "android.icu.text", "class_name": "DisplayContext", "full_name": "android.icu.text.DisplayContext"}, {"package_name": "android.icu.text", "class_name": "DisplayContext.Type", "full_name": "android.icu.text.DisplayContext.Type"}, {"package_name": "android.view", "class_name": "DisplayCutout", "full_name": "android.view.DisplayCutout"}, {"package_name": "android.hardware.display", "class_name": "DisplayManager", "full_name": "android.hardware.display.DisplayManager"}, {"package_name": "android.hardware.display", "class_name": "DisplayManager.DisplayListener", "full_name": "android.hardware.display.DisplayManager.DisplayListener"}, {"package_name": "android.util", "class_name": "DisplayMetrics", "full_name": "android.util.DisplayMetrics"}, {"package_name": "android.app.admin", "class_name": "DnsEvent", "full_name": "android.app.admin.DnsEvent"}, {"package_name": "javax.xml.parsers", "class_name": "DocumentBuilder", "full_name": "javax.xml.parsers.DocumentBuilder"}, {"package_name": "javax.xml.parsers", "class_name": "DocumentBuilderFactory", "full_name": "javax.xml.parsers.DocumentBuilderFactory"}, {"package_name": "java.lang.annotation", "class_name": "Documented", "full_name": "java.lang.annotation.Documented"}, {"package_name": "org.xml.sax", "class_name": "DocumentHandler", "full_name": "org.xml.sax.DocumentHandler"}, {"package_name": "android.provider", "class_name": "DocumentsContract", "full_name": "android.provider.DocumentsContract"}, {"package_name": "android.provider", "class_name": "DocumentsContract.Document", "full_name": "android.provider.DocumentsContract.Document"}, {"package_name": "android.provider", "class_name": "DocumentsContract.Path", "full_name": "android.provider.DocumentsContract.Path"}, {"package_name": "android.provider", "class_name": "DocumentsContract.Root", "full_name": "android.provider.DocumentsContract.Root"}, {"package_name": "android.provider", "class_name": "DocumentsProvider", "full_name": "android.provider.DocumentsProvider"}, {"package_name": "java.security", "class_name": "DomainCombiner", "full_name": "java.security.DomainCombiner"}, {"package_name": "java.security", "class_name": "DomainLoadStoreParameter", "full_name": "java.security.DomainLoadStoreParameter"}, {"package_name": "javax.xml.transform.dom", "class_name": "DOMLocator", "full_name": "javax.xml.transform.dom.DOMLocator"}, {"package_name": "javax.xml.transform.dom", "class_name": "DOMResult", "full_name": "javax.xml.transform.dom.DOMResult"}, {"package_name": "javax.xml.transform.dom", "class_name": "DOMSource", "full_name": "javax.xml.transform.dom.DOMSource"}, {"package_name": "java.nio.file.attribute", "class_name": "DosFileAttributes", "full_name": "java.nio.file.attribute.DosFileAttributes"}, {"package_name": "java.nio.file.attribute", "class_name": "DosFileAttributeView", "full_name": "java.nio.file.attribute.DosFileAttributeView"}, {"package_name": "java.lang", "class_name": "Double", "full_name": "java.lang.Double"}, {"package_name": "java.util.concurrent.atomic", "class_name": "DoubleAccumulator", "full_name": "java.util.concurrent.atomic.DoubleAccumulator"}, {"package_name": "java.util.concurrent.atomic", "class_name": "DoubleAdder", "full_name": "java.util.concurrent.atomic.DoubleAdder"}, {"package_name": "java.util.function", "class_name": "DoubleBinaryOperator", "full_name": "java.util.function.DoubleBinaryOperator"}, {"package_name": "java.nio", "class_name": "DoubleBuffer", "full_name": "java.nio.DoubleBuffer"}, {"package_name": "java.util.function", "class_name": "DoubleConsumer", "full_name": "java.util.function.DoubleConsumer"}, {"package_name": "java.util.function", "class_name": "DoublePredicate", "full_name": "java.util.function.DoublePredicate"}, {"package_name": "java.util.stream", "class_name": "DoubleStream", "full_name": "java.util.stream.DoubleStream"}, {"package_name": "java.util.stream", "class_name": "DoubleStream.Builder", "full_name": "java.util.stream.DoubleStream.Builder"}, {"package_name": "java.util", "class_name": "DoubleSummaryStatistics", "full_name": "java.util.DoubleSummaryStatistics"}, {"package_name": "java.util.function", "class_name": "DoubleSupplier", "full_name": "java.util.function.DoubleSupplier"}, {"package_name": "java.util.function", "class_name": "DoubleToIntFunction", "full_name": "java.util.function.DoubleToIntFunction"}, {"package_name": "java.util.function", "class_name": "DoubleToLongFunction", "full_name": "java.util.function.DoubleToLongFunction"}, {"package_name": "java.util.function", "class_name": "DoubleUnaryOperator", "full_name": "java.util.function.DoubleUnaryOperator"}, {"package_name": "android.telephony.euicc", "class_name": "DownloadableSubscription", "full_name": "android.telephony.euicc.DownloadableSubscription"}, {"package_name": "android.webkit", "class_name": "DownloadListener", "full_name": "android.webkit.DownloadListener"}, {"package_name": "android.app", "class_name": "DownloadManager", "full_name": "android.app.DownloadManager"}, {"package_name": "android.app", "class_name": "DownloadManager.Query", "full_name": "android.app.DownloadManager.Query"}, {"package_name": "android.app", "class_name": "DownloadManager.Request", "full_name": "android.app.DownloadManager.Request"}, {"package_name": "android.telephony.mbms", "class_name": "DownloadProgressListener", "full_name": "android.telephony.mbms.DownloadProgressListener"}, {"package_name": "android.telephony.mbms", "class_name": "DownloadRequest", "full_name": "android.telephony.mbms.DownloadRequest"}, {"package_name": "android.telephony.mbms", "class_name": "DownloadRequest.Builder", "full_name": "android.telephony.mbms.DownloadRequest.Builder"}, {"package_name": "android.telephony.mbms", "class_name": "DownloadStatusListener", "full_name": "android.telephony.mbms.DownloadStatusListener"}, {"package_name": "android.view", "class_name": "DragAndDropPermissions", "full_name": "android.view.DragAndDropPermissions"}, {"package_name": "android.view", "class_name": "DragEvent", "full_name": "android.view.DragEvent"}, {"package_name": "android.graphics.drawable", "class_name": "Drawable", "full_name": "android.graphics.drawable.Drawable"}, {"package_name": "android.graphics.drawable", "class_name": "Drawable.Callback", "full_name": "android.graphics.drawable.Drawable.Callback"}, {"package_name": "android.graphics.drawable", "class_name": "Drawable.ConstantState", "full_name": "android.graphics.drawable.Drawable.ConstantState"}, {"package_name": "android.graphics.drawable", "class_name": "DrawableContainer", "full_name": "android.graphics.drawable.DrawableContainer"}, {"package_name": "android.graphics.drawable", "class_name": "DrawableContainer.DrawableContainerState", "full_name": "android.graphics.drawable.DrawableContainer.DrawableContainerState"}, {"package_name": "android.text.style", "class_name": "DrawableMarginSpan", "full_name": "android.text.style.DrawableMarginSpan"}, {"package_name": "android.graphics.drawable", "class_name": "DrawableWrapper", "full_name": "android.graphics.drawable.DrawableWrapper"}, {"package_name": "android.graphics", "class_name": "DrawFilter", "full_name": "android.graphics.DrawFilter"}, {"package_name": "android.service.dreams", "class_name": "DreamService", "full_name": "android.service.dreams.DreamService"}, {"package_name": "java.sql", "class_name": "Driver", "full_name": "java.sql.Driver"}, {"package_name": "java.sql", "class_name": "DriverManager", "full_name": "java.sql.DriverManager"}, {"package_name": "java.sql", "class_name": "DriverPropertyInfo", "full_name": "java.sql.DriverPropertyInfo"}, {"package_name": "android.drm", "class_name": "DrmConvertedStatus", "full_name": "android.drm.DrmConvertedStatus"}, {"package_name": "android.drm", "class_name": "DrmErrorEvent", "full_name": "android.drm.DrmErrorEvent"}, {"package_name": "android.drm", "class_name": "DrmEvent", "full_name": "android.drm.DrmEvent"}, {"package_name": "android.drm", "class_name": "DrmInfo", "full_name": "android.drm.DrmInfo"}, {"package_name": "android.drm", "class_name": "DrmInfoEvent", "full_name": "android.drm.DrmInfoEvent"}, {"package_name": "android.drm", "class_name": "DrmInfoRequest", "full_name": "android.drm.DrmInfoRequest"}, {"package_name": "android.drm", "class_name": "DrmInfoStatus", "full_name": "android.drm.DrmInfoStatus"}, {"package_name": "android.media", "class_name": "DrmInitData", "full_name": "android.media.DrmInitData"}, {"package_name": "android.media", "class_name": "DrmInitData.SchemeInitData", "full_name": "android.media.DrmInitData.SchemeInitData"}, {"package_name": "android.drm", "class_name": "DrmManagerClient", "full_name": "android.drm.DrmManagerClient"}, {"package_name": "android.drm", "class_name": "DrmManagerClient.OnErrorListener", "full_name": "android.drm.DrmManagerClient.OnErrorListener"}, {"package_name": "android.drm", "class_name": "DrmManagerClient.OnEventListener", "full_name": "android.drm.DrmManagerClient.OnEventListener"}, {"package_name": "android.drm", "class_name": "DrmManagerClient.OnInfoListener", "full_name": "android.drm.DrmManagerClient.OnInfoListener"}, {"package_name": "android.drm", "class_name": "DrmRights", "full_name": "android.drm.DrmRights"}, {"package_name": "android.drm", "class_name": "DrmStore", "full_name": "android.drm.DrmStore"}, {"package_name": "android.drm", "class_name": "DrmStore.Action", "full_name": "android.drm.DrmStore.Action"}, {"package_name": "android.drm", "class_name": "DrmStore.ConstraintsColumns", "full_name": "android.drm.DrmStore.ConstraintsColumns"}, {"package_name": "android.drm", "class_name": "DrmStore.DrmObjectType", "full_name": "android.drm.DrmStore.DrmObjectType"}, {"package_name": "android.drm", "class_name": "DrmStore.Playback", "full_name": "android.drm.DrmStore.Playback"}, {"package_name": "android.drm", "class_name": "DrmStore.RightsStatus", "full_name": "android.drm.DrmStore.RightsStatus"}, {"package_name": "android.drm", "class_name": "DrmSupportInfo", "full_name": "android.drm.DrmSupportInfo"}, {"package_name": "android.drm", "class_name": "DrmUtils", "full_name": "android.drm.DrmUtils"}, {"package_name": "android.drm", "class_name": "DrmUtils.ExtendedMetadataParser", "full_name": "android.drm.DrmUtils.ExtendedMetadataParser"}, {"package_name": "android.os", "class_name": "DropBoxManager", "full_name": "android.os.DropBoxManager"}, {"package_name": "android.os", "class_name": "DropBoxManager.Entry", "full_name": "android.os.DropBoxManager.Entry"}, {"package_name": "java.security.interfaces", "class_name": "DSAKey", "full_name": "java.security.interfaces.DSAKey"}, {"package_name": "java.security.interfaces", "class_name": "DSAKeyPairGenerator", "full_name": "java.security.interfaces.DSAKeyPairGenerator"}, {"package_name": "java.security.spec", "class_name": "DSAParameterSpec", "full_name": "java.security.spec.DSAParameterSpec"}, {"package_name": "java.security.interfaces", "class_name": "DSAParams", "full_name": "java.security.interfaces.DSAParams"}, {"package_name": "java.security.interfaces", "class_name": "DSAPrivateKey", "full_name": "java.security.interfaces.DSAPrivateKey"}, {"package_name": "java.security.spec", "class_name": "DSAPrivateKeySpec", "full_name": "java.security.spec.DSAPrivateKeySpec"}, {"package_name": "java.security.interfaces", "class_name": "DSAPublicKey", "full_name": "java.security.interfaces.DSAPublicKey"}, {"package_name": "java.security.spec", "class_name": "DSAPublicKeySpec", "full_name": "java.security.spec.DSAPublicKeySpec"}, {"package_name": "org.xml.sax", "class_name": "DTDHandler", "full_name": "org.xml.sax.DTDHandler"}, {"package_name": "java.util", "class_name": "DuplicateFormatFlagsException", "full_name": "java.util.DuplicateFormatFlagsException"}, {"package_name": "java.time", "class_name": "Duration", "full_name": "java.time.Duration"}, {"package_name": "javax.xml.datatype", "class_name": "Duration", "full_name": "javax.xml.datatype.Duration"}, {"package_name": "android.text.style", "class_name": "DynamicDrawableSpan", "full_name": "android.text.style.DynamicDrawableSpan"}, {"package_name": "android.text", "class_name": "DynamicLayout", "full_name": "android.text.DynamicLayout"}, {"package_name": "android.text", "class_name": "DynamicLayout.Builder", "full_name": "android.text.DynamicLayout.Builder"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing", "full_name": "android.media.audiofx.DynamicsProcessing"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.BandBase", "full_name": "android.media.audiofx.DynamicsProcessing.BandBase"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.BandStage", "full_name": "android.media.audiofx.DynamicsProcessing.BandStage"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.Channel", "full_name": "android.media.audiofx.DynamicsProcessing.Channel"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.Config", "full_name": "android.media.audiofx.DynamicsProcessing.Config"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.Config.Builder", "full_name": "android.media.audiofx.DynamicsProcessing.Config.Builder"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.Eq", "full_name": "android.media.audiofx.DynamicsProcessing.Eq"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.EqBand", "full_name": "android.media.audiofx.DynamicsProcessing.EqBand"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.Limiter", "full_name": "android.media.audiofx.DynamicsProcessing.Limiter"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.Mbc", "full_name": "android.media.audiofx.DynamicsProcessing.Mbc"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.MbcBand", "full_name": "android.media.audiofx.DynamicsProcessing.MbcBand"}, {"package_name": "android.media.audiofx", "class_name": "DynamicsProcessing.Stage", "full_name": "android.media.audiofx.DynamicsProcessing.Stage"}, {"package_name": "android.text.style", "class_name": "EasyEditSpan", "full_name": "android.text.style.EasyEditSpan"}, {"package_name": "java.security.spec", "class_name": "ECField", "full_name": "java.security.spec.ECField"}, {"package_name": "java.security.spec", "class_name": "ECFieldFp", "full_name": "java.security.spec.ECFieldFp"}, {"package_name": "java.security.spec", "class_name": "ECGenParameterSpec", "full_name": "java.security.spec.ECGenParameterSpec"}, {"package_name": "java.security.interfaces", "class_name": "ECKey", "full_name": "java.security.interfaces.ECKey"}, {"package_name": "java.security.spec", "class_name": "ECParameterSpec", "full_name": "java.security.spec.ECParameterSpec"}, {"package_name": "java.security.spec", "class_name": "ECPoint", "full_name": "java.security.spec.ECPoint"}, {"package_name": "java.security.interfaces", "class_name": "ECPrivateKey", "full_name": "java.security.interfaces.ECPrivateKey"}, {"package_name": "java.security.spec", "class_name": "ECPrivateKeySpec", "full_name": "java.security.spec.ECPrivateKeySpec"}, {"package_name": "java.security.interfaces", "class_name": "ECPublicKey", "full_name": "java.security.interfaces.ECPublicKey"}, {"package_name": "java.security.spec", "class_name": "ECPublicKeySpec", "full_name": "java.security.spec.ECPublicKeySpec"}, {"package_name": "android.widget", "class_name": "EdgeEffect", "full_name": "android.widget.EdgeEffect"}, {"package_name": "android.text", "class_name": "Editable", "full_name": "android.text.Editable"}, {"package_name": "android.text", "class_name": "Editable.Factory", "full_name": "android.text.Editable.Factory"}, {"package_name": "android.view.inputmethod", "class_name": "EditorInfo", "full_name": "android.view.inputmethod.EditorInfo"}, {"package_name": "android.widget", "class_name": "EditText", "full_name": "android.widget.EditText"}, {"package_name": "android.preference", "class_name": "EditTextPreference", "full_name": "android.preference.EditTextPreference"}, {"package_name": "android.media.effect", "class_name": "Effect", "full_name": "android.media.effect.Effect"}, {"package_name": "android.media.effect", "class_name": "EffectContext", "full_name": "android.media.effect.EffectContext"}, {"package_name": "android.media.effect", "class_name": "EffectFactory", "full_name": "android.media.effect.EffectFactory"}, {"package_name": "android.media.effect", "class_name": "EffectUpdateListener", "full_name": "android.media.effect.EffectUpdateListener"}, {"package_name": "javax.microedition.khronos.egl", "class_name": "EGL", "full_name": "javax.microedition.khronos.egl.EGL"}, {"package_name": "android.opengl", "class_name": "EGLConfig", "full_name": "android.opengl.EGLConfig"}, {"package_name": "javax.microedition.khronos.egl", "class_name": "EGLConfig", "full_name": "javax.microedition.khronos.egl.EGLConfig"}, {"package_name": "android.opengl", "class_name": "EGLContext", "full_name": "android.opengl.EGLContext"}, {"package_name": "javax.microedition.khronos.egl", "class_name": "EGLContext", "full_name": "javax.microedition.khronos.egl.EGLContext"}, {"package_name": "android.opengl", "class_name": "EGLDisplay", "full_name": "android.opengl.EGLDisplay"}, {"package_name": "javax.microedition.khronos.egl", "class_name": "EGLDisplay", "full_name": "javax.microedition.khronos.egl.EGLDisplay"}, {"package_name": "android.opengl", "class_name": "EGLExt", "full_name": "android.opengl.EGLExt"}, {"package_name": "android.opengl", "class_name": "EGLObjectHandle", "full_name": "android.opengl.EGLObjectHandle"}, {"package_name": "android.opengl", "class_name": "EGLSurface", "full_name": "android.opengl.EGLSurface"}, {"package_name": "javax.microedition.khronos.egl", "class_name": "EGLSurface", "full_name": "javax.microedition.khronos.egl.EGLSurface"}, {"package_name": "android.renderscript", "class_name": "Element", "full_name": "android.renderscript.Element"}, {"package_name": "android.sax", "class_name": "Element", "full_name": "android.sax.Element"}, {"package_name": "android.renderscript", "class_name": "Element.Builder", "full_name": "android.renderscript.Element.Builder"}, {"package_name": "android.renderscript", "class_name": "Element.DataKind", "full_name": "android.renderscript.Element.DataKind"}, {"package_name": "android.renderscript", "class_name": "Element.DataType", "full_name": "android.renderscript.Element.DataType"}, {"package_name": "android.sax", "class_name": "ElementListener", "full_name": "android.sax.ElementListener"}, {"package_name": "java.lang.annotation", "class_name": "ElementType", "full_name": "java.lang.annotation.ElementType"}, {"package_name": "java.security.spec", "class_name": "EllipticCurve", "full_name": "java.security.spec.EllipticCurve"}, {"package_name": "android.graphics", "class_name": "EmbossMaskFilter", "full_name": "android.graphics.EmbossMaskFilter"}, {"package_name": "java.util", "class_name": "EmptyStackException", "full_name": "java.util.EmptyStackException"}, {"package_name": "java.security.spec", "class_name": "EncodedKeySpec", "full_name": "java.security.spec.EncodedKeySpec"}, {"package_name": "javax.crypto", "class_name": "EncryptedPrivateKeyInfo", "full_name": "javax.crypto.EncryptedPrivateKeyInfo"}, {"package_name": "android.sax", "class_name": "EndElementListener", "full_name": "android.sax.EndElementListener"}, {"package_name": "android.sax", "class_name": "EndTextElementListener", "full_name": "android.sax.EndTextElementListener"}, {"package_name": "android.content", "class_name": "Entity", "full_name": "android.content.Entity"}, {"package_name": "android.content", "class_name": "Entity.NamedContentValues", "full_name": "android.content.Entity.NamedContentValues"}, {"package_name": "android.content", "class_name": "EntityIterator", "full_name": "android.content.EntityIterator"}, {"package_name": "org.xml.sax", "class_name": "EntityResolver", "full_name": "org.xml.sax.EntityResolver"}, {"package_name": "java.lang", "class_name": "EnumConstantNotPresentException", "full_name": "java.lang.EnumConstantNotPresentException"}, {"package_name": "android.os", "class_name": "Environment", "full_name": "android.os.Environment"}, {"package_name": "android.media.audiofx", "class_name": "EnvironmentalReverb", "full_name": "android.media.audiofx.EnvironmentalReverb"}, {"package_name": "android.media.audiofx", "class_name": "EnvironmentalReverb.OnParameterChangeListener", "full_name": "android.media.audiofx.EnvironmentalReverb.OnParameterChangeListener"}, {"package_name": "android.media.audiofx", "class_name": "EnvironmentalReverb.Settings", "full_name": "android.media.audiofx.EnvironmentalReverb.Settings"}, {"package_name": "java.io", "class_name": "EOFException", "full_name": "java.io.EOFException"}, {"package_name": "android.media.audiofx", "class_name": "Equalizer", "full_name": "android.media.audiofx.Equalizer"}, {"package_name": "android.media.audiofx", "class_name": "Equalizer.OnParameterChangeListener", "full_name": "android.media.audiofx.Equalizer.OnParameterChangeListener"}, {"package_name": "android.media.audiofx", "class_name": "Equalizer.Settings", "full_name": "android.media.audiofx.Equalizer.Settings"}, {"package_name": "java.time.chrono", "class_name": "Era", "full_name": "java.time.chrono.Era"}, {"package_name": "android.system", "class_name": "ErrnoException", "full_name": "android.system.ErrnoException"}, {"package_name": "java.lang", "class_name": "Error", "full_name": "java.lang.Error"}, {"package_name": "org.xml.sax", "class_name": "ErrorHandler", "full_name": "org.xml.sax.ErrorHandler"}, {"package_name": "javax.xml.transform", "class_name": "ErrorListener", "full_name": "javax.xml.transform.ErrorListener"}, {"package_name": "java.util.logging", "class_name": "ErrorManager", "full_name": "java.util.logging.ErrorManager"}, {"package_name": "android.icu.util", "class_name": "EthiopicCalendar", "full_name": "android.icu.util.EthiopicCalendar"}, {"package_name": "android.telephony.euicc", "class_name": "EuiccInfo", "full_name": "android.telephony.euicc.EuiccInfo"}, {"package_name": "android.telephony.euicc", "class_name": "EuiccManager", "full_name": "android.telephony.euicc.EuiccManager"}, {"package_name": "java.util", "class_name": "EventListener", "full_name": "java.util.EventListener"}, {"package_name": "android.util", "class_name": "EventLog", "full_name": "android.util.EventLog"}, {"package_name": "android.util", "class_name": "EventLog.Event", "full_name": "android.util.EventLog.Event"}, {"package_name": "android.util", "class_name": "EventLogTags", "full_name": "android.util.EventLogTags"}, {"package_name": "android.util", "class_name": "EventLogTags.Description", "full_name": "android.util.EventLogTags.Description"}, {"package_name": "java.util", "class_name": "EventObject", "full_name": "java.util.EventObject"}, {"package_name": "android.app.usage", "class_name": "EventStats", "full_name": "android.app.usage.EventStats"}, {"package_name": "java.lang", "class_name": "Exception", "full_name": "java.lang.Exception"}, {"package_name": "java.lang", "class_name": "ExceptionInInitializerError", "full_name": "java.lang.ExceptionInInitializerError"}, {"package_name": "java.lang.reflect", "class_name": "Executable", "full_name": "java.lang.reflect.Executable"}, {"package_name": "java.util.concurrent", "class_name": "ExecutionException", "full_name": "java.util.concurrent.ExecutionException"}, {"package_name": "java.util.concurrent", "class_name": "Executor", "full_name": "java.util.concurrent.Executor"}, {"package_name": "java.util.concurrent", "class_name": "Executors", "full_name": "java.util.concurrent.Executors"}, {"package_name": "java.util.concurrent", "class_name": "ExecutorService", "full_name": "java.util.concurrent.ExecutorService"}, {"package_name": "javax.crypto", "class_name": "ExemptionMechanism", "full_name": "javax.crypto.ExemptionMechanism"}, {"package_name": "javax.crypto", "class_name": "ExemptionMechanismException", "full_name": "javax.crypto.ExemptionMechanismException"}, {"package_name": "javax.crypto", "class_name": "ExemptionMechanismSpi", "full_name": "javax.crypto.ExemptionMechanismSpi"}, {"package_name": "android.media", "class_name": "ExifInterface", "full_name": "android.media.ExifInterface"}, {"package_name": "android.app", "class_name": "ExpandableListActivity", "full_name": "android.app.ExpandableListActivity"}, {"package_name": "android.widget", "class_name": "ExpandableListAdapter", "full_name": "android.widget.ExpandableListAdapter"}, {"package_name": "android.widget", "class_name": "ExpandableListView", "full_name": "android.widget.ExpandableListView"}, {"package_name": "android.widget", "class_name": "ExpandableListView.ExpandableListContextMenuInfo", "full_name": "android.widget.ExpandableListView.ExpandableListContextMenuInfo"}, {"package_name": "android.widget", "class_name": "ExpandableListView.OnChildClickListener", "full_name": "android.widget.ExpandableListView.OnChildClickListener"}, {"package_name": "android.widget", "class_name": "ExpandableListView.OnGroupClickListener", "full_name": "android.widget.ExpandableListView.OnGroupClickListener"}, {"package_name": "android.widget", "class_name": "ExpandableListView.OnGroupCollapseListener", "full_name": "android.widget.ExpandableListView.OnGroupCollapseListener"}, {"package_name": "android.widget", "class_name": "ExpandableListView.OnGroupExpandListener", "full_name": "android.widget.ExpandableListView.OnGroupExpandListener"}, {"package_name": "android.transition", "class_name": "Explode", "full_name": "android.transition.Explode"}, {"package_name": "javax.net.ssl", "class_name": "ExtendedSSLSession", "full_name": "javax.net.ssl.ExtendedSSLSession"}, {"package_name": "java.security.cert", "class_name": "Extension", "full_name": "java.security.cert.Extension"}, {"package_name": "java.io", "class_name": "Externalizable", "full_name": "java.io.Externalizable"}, {"package_name": "android.app.usage", "class_name": "ExternalStorageStats", "full_name": "android.app.usage.ExternalStorageStats"}, {"package_name": "android.inputmethodservice", "class_name": "ExtractEditText", "full_name": "android.inputmethodservice.ExtractEditText"}, {"package_name": "android.view.inputmethod", "class_name": "ExtractedText", "full_name": "android.view.inputmethod.ExtractedText"}, {"package_name": "android.view.inputmethod", "class_name": "ExtractedTextRequest", "full_name": "android.view.inputmethod.ExtractedTextRequest"}, {"package_name": "android.media", "class_name": "FaceDetector", "full_name": "android.media.FaceDetector"}, {"package_name": "android.media", "class_name": "FaceDetector.Face", "full_name": "android.media.FaceDetector.Face"}, {"package_name": "javax.xml.parsers", "class_name": "FactoryConfigurationError", "full_name": "javax.xml.parsers.FactoryConfigurationError"}, {"package_name": "android.transition", "class_name": "Fade", "full_name": "android.transition.Fade"}, {"package_name": "android.content.pm", "class_name": "FeatureGroupInfo", "full_name": "android.content.pm.FeatureGroupInfo"}, {"package_name": "android.content.pm", "class_name": "FeatureInfo", "full_name": "android.content.pm.FeatureInfo"}, {"package_name": "java.lang.reflect", "class_name": "Field", "full_name": "java.lang.reflect.Field"}, {"package_name": "android.service.autofill", "class_name": "FieldClassification", "full_name": "android.service.autofill.FieldClassification"}, {"package_name": "android.service.autofill", "class_name": "FieldClassification.Match", "full_name": "android.service.autofill.FieldClassification.Match"}, {"package_name": "android.renderscript", "class_name": "FieldPacker", "full_name": "android.renderscript.FieldPacker"}, {"package_name": "java.text", "class_name": "FieldPosition", "full_name": "java.text.FieldPosition"}, {"package_name": "java.io", "class_name": "File", "full_name": "java.io.File"}, {"package_name": "java.nio.file", "class_name": "FileAlreadyExistsException", "full_name": "java.nio.file.FileAlreadyExistsException"}, {"package_name": "java.nio.file.attribute", "class_name": "FileAttributeView", "full_name": "java.nio.file.attribute.FileAttributeView"}, {"package_name": "android.app.backup", "class_name": "FileBackupHelper", "full_name": "android.app.backup.FileBackupHelper"}, {"package_name": "java.nio.channels", "class_name": "FileChannel", "full_name": "java.nio.channels.FileChannel"}, {"package_name": "java.nio.channels", "class_name": "FileChannel.MapMode", "full_name": "java.nio.channels.FileChannel.MapMode"}, {"package_name": "java.io", "class_name": "FileDescriptor", "full_name": "java.io.FileDescriptor"}, {"package_name": "java.io", "class_name": "FileFilter", "full_name": "java.io.FileFilter"}, {"package_name": "java.util.logging", "class_name": "FileHandler", "full_name": "java.util.logging.FileHandler"}, {"package_name": "android.telephony.mbms", "class_name": "FileInfo", "full_name": "android.telephony.mbms.FileInfo"}, {"package_name": "java.io", "class_name": "FileInputStream", "full_name": "java.io.FileInputStream"}, {"package_name": "java.nio.channels", "class_name": "FileLock", "full_name": "java.nio.channels.FileLock"}, {"package_name": "java.nio.channels", "class_name": "FileLockInterruptionException", "full_name": "java.nio.channels.FileLockInterruptionException"}, {"package_name": "java.io", "class_name": "FilenameFilter", "full_name": "java.io.FilenameFilter"}, {"package_name": "java.net", "class_name": "FileNameMap", "full_name": "java.net.FileNameMap"}, {"package_name": "java.io", "class_name": "FileNotFoundException", "full_name": "java.io.FileNotFoundException"}, {"package_name": "android.os", "class_name": "FileObserver", "full_name": "android.os.FileObserver"}, {"package_name": "java.io", "class_name": "FileOutputStream", "full_name": "java.io.FileOutputStream"}, {"package_name": "java.nio.file.attribute", "class_name": "FileOwnerAttributeView", "full_name": "java.nio.file.attribute.FileOwnerAttributeView"}, {"package_name": "java.io", "class_name": "FilePermission", "full_name": "java.io.FilePermission"}, {"package_name": "java.io", "class_name": "FileReader", "full_name": "java.io.FileReader"}, {"package_name": "java.nio.file", "class_name": "Files", "full_name": "java.nio.file.Files"}, {"package_name": "android.telephony.mbms", "class_name": "FileServiceInfo", "full_name": "android.telephony.mbms.FileServiceInfo"}, {"package_name": "java.nio.file", "class_name": "FileStore", "full_name": "java.nio.file.FileStore"}, {"package_name": "java.nio.file.attribute", "class_name": "FileStoreAttributeView", "full_name": "java.nio.file.attribute.FileStoreAttributeView"}, {"package_name": "java.nio.file", "class_name": "FileSystem", "full_name": "java.nio.file.FileSystem"}, {"package_name": "java.nio.file", "class_name": "FileSystemAlreadyExistsException", "full_name": "java.nio.file.FileSystemAlreadyExistsException"}, {"package_name": "java.nio.file", "class_name": "FileSystemException", "full_name": "java.nio.file.FileSystemException"}, {"package_name": "java.nio.file", "class_name": "FileSystemLoopException", "full_name": "java.nio.file.FileSystemLoopException"}, {"package_name": "java.nio.file", "class_name": "FileSystemNotFoundException", "full_name": "java.nio.file.FileSystemNotFoundException"}, {"package_name": "java.nio.file.spi", "class_name": "FileSystemProvider", "full_name": "java.nio.file.spi.FileSystemProvider"}, {"package_name": "java.nio.file", "class_name": "FileSystems", "full_name": "java.nio.file.FileSystems"}, {"package_name": "java.nio.file.attribute", "class_name": "FileTime", "full_name": "java.nio.file.attribute.FileTime"}, {"package_name": "java.nio.file.spi", "class_name": "FileTypeDetector", "full_name": "java.nio.file.spi.FileTypeDetector"}, {"package_name": "android.os", "class_name": "FileUriExposedException", "full_name": "android.os.FileUriExposedException"}, {"package_name": "android.os.strictmode", "class_name": "FileUriExposedViolation", "full_name": "android.os.strictmode.FileUriExposedViolation"}, {"package_name": "java.nio.file", "class_name": "FileVisitOption", "full_name": "java.nio.file.FileVisitOption"}, {"package_name": "java.nio.file", "class_name": "FileVisitResult", "full_name": "java.nio.file.FileVisitResult"}, {"package_name": "java.io", "class_name": "FileWriter", "full_name": "java.io.FileWriter"}, {"package_name": "android.service.autofill", "class_name": "FillCallback", "full_name": "android.service.autofill.FillCallback"}, {"package_name": "android.service.autofill", "class_name": "FillContext", "full_name": "android.service.autofill.FillContext"}, {"package_name": "android.service.autofill", "class_name": "FillEventHistory", "full_name": "android.service.autofill.FillEventHistory"}, {"package_name": "android.service.autofill", "class_name": "FillEventHistory.Event", "full_name": "android.service.autofill.FillEventHistory.Event"}, {"package_name": "android.service.autofill", "class_name": "FillRequest", "full_name": "android.service.autofill.FillRequest"}, {"package_name": "android.service.autofill", "class_name": "FillResponse", "full_name": "android.service.autofill.FillResponse"}, {"package_name": "android.service.autofill", "class_name": "FillResponse.Builder", "full_name": "android.service.autofill.FillResponse.Builder"}, {"package_name": "android.widget", "class_name": "Filter", "full_name": "android.widget.Filter"}, {"package_name": "java.util.logging", "class_name": "Filter", "full_name": "java.util.logging.Filter"}, {"package_name": "android.widget", "class_name": "Filter.FilterListener", "full_name": "android.widget.Filter.FilterListener"}, {"package_name": "android.widget", "class_name": "Filter.FilterResults", "full_name": "android.widget.Filter.FilterResults"}, {"package_name": "android.widget", "class_name": "Filterable", "full_name": "android.widget.Filterable"}, {"package_name": "java.io", "class_name": "FilterInputStream", "full_name": "java.io.FilterInputStream"}, {"package_name": "java.io", "class_name": "FilterOutputStream", "full_name": "java.io.FilterOutputStream"}, {"package_name": "android.widget", "class_name": "FilterQueryProvider", "full_name": "android.widget.FilterQueryProvider"}, {"package_name": "java.io", "class_name": "FilterReader", "full_name": "java.io.FilterReader"}, {"package_name": "java.io", "class_name": "FilterWriter", "full_name": "java.io.FilterWriter"}, {"package_name": "android.accessibilityservice", "class_name": "FingerprintGestureController", "full_name": "android.accessibilityservice.FingerprintGestureController"}, {"package_name": "android.accessibilityservice", "class_name": "FingerprintGestureController.FingerprintGestureCallback", "full_name": "android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback"}, {"package_name": "android.hardware.fingerprint", "class_name": "FingerprintManager", "full_name": "android.hardware.fingerprint.FingerprintManager"}, {"package_name": "android.hardware.fingerprint", "class_name": "FingerprintManager.AuthenticationCallback", "full_name": "android.hardware.fingerprint.FingerprintManager.AuthenticationCallback"}, {"package_name": "android.hardware.fingerprint", "class_name": "FingerprintManager.AuthenticationResult", "full_name": "android.hardware.fingerprint.FingerprintManager.AuthenticationResult"}, {"package_name": "android.hardware.fingerprint", "class_name": "FingerprintManager.CryptoObject", "full_name": "android.hardware.fingerprint.FingerprintManager.CryptoObject"}, {"package_name": "android.test", "class_name": "FlakyTest", "full_name": "android.test.FlakyTest"}, {"package_name": "java.lang", "class_name": "Float", "full_name": "java.lang.Float"}, {"package_name": "android.animation", "class_name": "FloatArrayEvaluator", "full_name": "android.animation.FloatArrayEvaluator"}, {"package_name": "java.nio", "class_name": "FloatBuffer", "full_name": "java.nio.FloatBuffer"}, {"package_name": "android.animation", "class_name": "FloatEvaluator", "full_name": "android.animation.FloatEvaluator"}, {"package_name": "android.util", "class_name": "FloatMath", "full_name": "android.util.FloatMath"}, {"package_name": "java.io", "class_name": "Flushable", "full_name": "java.io.Flushable"}, {"package_name": "android.view", "class_name": "FocusFinder", "full_name": "android.view.FocusFinder"}, {"package_name": "android.provider", "class_name": "FontRequest", "full_name": "android.provider.FontRequest"}, {"package_name": "android.provider", "class_name": "FontsContract", "full_name": "android.provider.FontsContract"}, {"package_name": "android.provider", "class_name": "FontsContract.Columns", "full_name": "android.provider.FontsContract.Columns"}, {"package_name": "android.provider", "class_name": "FontsContract.FontFamilyResult", "full_name": "android.provider.FontsContract.FontFamilyResult"}, {"package_name": "android.provider", "class_name": "FontsContract.FontInfo", "full_name": "android.provider.FontsContract.FontInfo"}, {"package_name": "android.provider", "class_name": "FontsContract.FontRequestCallback", "full_name": "android.provider.FontsContract.FontRequestCallback"}, {"package_name": "android.graphics.fonts", "class_name": "FontVariationAxis", "full_name": "android.graphics.fonts.FontVariationAxis"}, {"package_name": "android.text.style", "class_name": "ForegroundColorSpan", "full_name": "android.text.style.ForegroundColorSpan"}, {"package_name": "java.util.concurrent", "class_name": "ForkJoinPool", "full_name": "java.util.concurrent.ForkJoinPool"}, {"package_name": "java.util.concurrent", "class_name": "ForkJoinPool.ForkJoinWorkerThreadFactory", "full_name": "java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory"}, {"package_name": "java.util.concurrent", "class_name": "ForkJoinPool.ManagedBlocker", "full_name": "java.util.concurrent.ForkJoinPool.ManagedBlocker"}, {"package_name": "java.util.concurrent", "class_name": "ForkJoinWorkerThread", "full_name": "java.util.concurrent.ForkJoinWorkerThread"}, {"package_name": "java.text", "class_name": "Format", "full_name": "java.text.Format"}, {"package_name": "java.text", "class_name": "Format.Field", "full_name": "java.text.Format.Field"}, {"package_name": "android.nfc", "class_name": "FormatException", "full_name": "android.nfc.FormatException"}, {"package_name": "java.util", "class_name": "FormatFlagsConversionMismatchException", "full_name": "java.util.FormatFlagsConversionMismatchException"}, {"package_name": "java.time.format", "class_name": "FormatStyle", "full_name": "java.time.format.FormatStyle"}, {"package_name": "java.util", "class_name": "Formattable", "full_name": "java.util.Formattable"}, {"package_name": "java.util", "class_name": "FormattableFlags", "full_name": "java.util.FormattableFlags"}, {"package_name": "android.text.format", "class_name": "Formatter", "full_name": "android.text.format.Formatter"}, {"package_name": "java.util", "class_name": "Formatter", "full_name": "java.util.Formatter"}, {"package_name": "java.util.logging", "class_name": "Formatter", "full_name": "java.util.logging.Formatter"}, {"package_name": "java.util", "class_name": "Formatter.BigDecimalLayoutForm", "full_name": "java.util.Formatter.BigDecimalLayoutForm"}, {"package_name": "java.util", "class_name": "FormatterClosedException", "full_name": "java.util.FormatterClosedException"}, {"package_name": "android.app", "class_name": "Fragment", "full_name": "android.app.Fragment"}, {"package_name": "android.app", "class_name": "Fragment.InstantiationException", "full_name": "android.app.Fragment.InstantiationException"}, {"package_name": "android.app", "class_name": "Fragment.SavedState", "full_name": "android.app.Fragment.SavedState"}, {"package_name": "android.app", "class_name": "FragmentBreadCrumbs", "full_name": "android.app.FragmentBreadCrumbs"}, {"package_name": "android.app", "class_name": "FragmentBreadCrumbs.OnBreadCrumbClickListener", "full_name": "android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener"}, {"package_name": "android.app", "class_name": "FragmentContainer", "full_name": "android.app.FragmentContainer"}, {"package_name": "android.app", "class_name": "FragmentController", "full_name": "android.app.FragmentController"}, {"package_name": "android.app", "class_name": "FragmentManager", "full_name": "android.app.FragmentManager"}, {"package_name": "android.app", "class_name": "FragmentManager.BackStackEntry", "full_name": "android.app.FragmentManager.BackStackEntry"}, {"package_name": "android.app", "class_name": "FragmentManager.FragmentLifecycleCallbacks", "full_name": "android.app.FragmentManager.FragmentLifecycleCallbacks"}, {"package_name": "android.app", "class_name": "FragmentManager.OnBackStackChangedListener", "full_name": "android.app.FragmentManager.OnBackStackChangedListener"}, {"package_name": "android.app", "class_name": "FragmentManagerNonConfig", "full_name": "android.app.FragmentManagerNonConfig"}, {"package_name": "android.app", "class_name": "FragmentTransaction", "full_name": "android.app.FragmentTransaction"}, {"package_name": "android.widget", "class_name": "FrameLayout", "full_name": "android.widget.FrameLayout"}, {"package_name": "android.widget", "class_name": "FrameLayout.LayoutParams", "full_name": "android.widget.FrameLayout.LayoutParams"}, {"package_name": "android.view", "class_name": "FrameMetrics", "full_name": "android.view.FrameMetrics"}, {"package_name": "android.view", "class_name": "FrameStats", "full_name": "android.view.FrameStats"}, {"package_name": "android.app.admin", "class_name": "FreezePeriod", "full_name": "android.app.admin.FreezePeriod"}, {"package_name": "android.app.backup", "class_name": "FullBackupDataOutput", "full_name": "android.app.backup.FullBackupDataOutput"}, {"package_name": "java.lang", "class_name": "FunctionalInterface", "full_name": "java.lang.FunctionalInterface"}, {"package_name": "android.widget", "class_name": "Gallery", "full_name": "android.widget.Gallery"}, {"package_name": "android.widget", "class_name": "Gallery.LayoutParams", "full_name": "android.widget.Gallery.LayoutParams"}, {"package_name": "android.telecom", "class_name": "GatewayInfo", "full_name": "android.telecom.GatewayInfo"}, {"package_name": "java.nio.channels", "class_name": "GatheringByteChannel", "full_name": "java.nio.channels.GatheringByteChannel"}, {"package_name": "javax.crypto.spec", "class_name": "GCMParameterSpec", "full_name": "javax.crypto.spec.GCMParameterSpec"}, {"package_name": "java.security", "class_name": "GeneralSecurityException", "full_name": "java.security.GeneralSecurityException"}, {"package_name": "java.lang.reflect", "class_name": "GenericArrayType", "full_name": "java.lang.reflect.GenericArrayType"}, {"package_name": "java.lang.reflect", "class_name": "GenericDeclaration", "full_name": "java.lang.reflect.GenericDeclaration"}, {"package_name": "java.lang.reflect", "class_name": "GenericSignatureFormatError", "full_name": "java.lang.reflect.GenericSignatureFormatError"}, {"package_name": "android.location", "class_name": "Geocoder", "full_name": "android.location.Geocoder"}, {"package_name": "android.webkit", "class_name": "GeolocationPermissions", "full_name": "android.webkit.GeolocationPermissions"}, {"package_name": "android.webkit", "class_name": "GeolocationPermissions.Callback", "full_name": "android.webkit.GeolocationPermissions.Callback"}, {"package_name": "android.hardware", "class_name": "GeomagneticField", "full_name": "android.hardware.GeomagneticField"}, {"package_name": "android.gesture", "class_name": "Gesture", "full_name": "android.gesture.Gesture"}, {"package_name": "android.accessibilityservice", "class_name": "GestureDescription", "full_name": "android.accessibilityservice.GestureDescription"}, {"package_name": "android.accessibilityservice", "class_name": "GestureDescription.Builder", "full_name": "android.accessibilityservice.GestureDescription.Builder"}, {"package_name": "android.accessibilityservice", "class_name": "GestureDescription.StrokeDescription", "full_name": "android.accessibilityservice.GestureDescription.StrokeDescription"}, {"package_name": "android.view", "class_name": "GestureDetector", "full_name": "android.view.GestureDetector"}, {"package_name": "android.view", "class_name": "GestureDetector.OnContextClickListener", "full_name": "android.view.GestureDetector.OnContextClickListener"}, {"package_name": "android.view", "class_name": "GestureDetector.OnDoubleTapListener", "full_name": "android.view.GestureDetector.OnDoubleTapListener"}, {"package_name": "android.view", "class_name": "GestureDetector.OnGestureListener", "full_name": "android.view.GestureDetector.OnGestureListener"}, {"package_name": "android.view", "class_name": "GestureDetector.SimpleOnGestureListener", "full_name": "android.view.GestureDetector.SimpleOnGestureListener"}, {"package_name": "android.gesture", "class_name": "GestureLibraries", "full_name": "android.gesture.GestureLibraries"}, {"package_name": "android.gesture", "class_name": "GestureLibrary", "full_name": "android.gesture.GestureLibrary"}, {"package_name": "android.gesture", "class_name": "GestureOverlayView", "full_name": "android.gesture.GestureOverlayView"}, {"package_name": "android.gesture", "class_name": "GestureOverlayView.OnGestureListener", "full_name": "android.gesture.GestureOverlayView.OnGestureListener"}, {"package_name": "android.gesture", "class_name": "GestureOverlayView.OnGesturePerformedListener", "full_name": "android.gesture.GestureOverlayView.OnGesturePerformedListener"}, {"package_name": "android.gesture", "class_name": "GestureOverlayView.OnGesturingListener", "full_name": "android.gesture.GestureOverlayView.OnGesturingListener"}, {"package_name": "android.gesture", "class_name": "GesturePoint", "full_name": "android.gesture.GesturePoint"}, {"package_name": "android.gesture", "class_name": "GestureStore", "full_name": "android.gesture.GestureStore"}, {"package_name": "android.gesture", "class_name": "GestureStroke", "full_name": "android.gesture.GestureStroke"}, {"package_name": "android.gesture", "class_name": "GestureUtils", "full_name": "android.gesture.GestureUtils"}, {"package_name": "android.text", "class_name": "GetChars", "full_name": "android.text.GetChars"}, {"package_name": "javax.microedition.khronos.opengles", "class_name": "GL", "full_name": "javax.microedition.khronos.opengles.GL"}, {"package_name": "android.opengl", "class_name": "GLDebugHelper", "full_name": "android.opengl.GLDebugHelper"}, {"package_name": "android.opengl", "class_name": "GLException", "full_name": "android.opengl.GLException"}, {"package_name": "android.opengl", "class_name": "GLSurfaceView", "full_name": "android.opengl.GLSurfaceView"}, {"package_name": "android.opengl", "class_name": "GLSurfaceView.EGLConfigChooser", "full_name": "android.opengl.GLSurfaceView.EGLConfigChooser"}, {"package_name": "android.opengl", "class_name": "GLSurfaceView.EGLContextFactory", "full_name": "android.opengl.GLSurfaceView.EGLContextFactory"}, {"package_name": "android.opengl", "class_name": "GLSurfaceView.EGLWindowSurfaceFactory", "full_name": "android.opengl.GLSurfaceView.EGLWindowSurfaceFactory"}, {"package_name": "android.opengl", "class_name": "GLSurfaceView.GLWrapper", "full_name": "android.opengl.GLSurfaceView.GLWrapper"}, {"package_name": "android.opengl", "class_name": "GLSurfaceView.Renderer", "full_name": "android.opengl.GLSurfaceView.Renderer"}, {"package_name": "android.opengl", "class_name": "GLU", "full_name": "android.opengl.GLU"}, {"package_name": "android.opengl", "class_name": "GLUtils", "full_name": "android.opengl.GLUtils"}, {"package_name": "android.location", "class_name": "GnssClock", "full_name": "android.location.GnssClock"}, {"package_name": "android.location", "class_name": "GnssMeasurement", "full_name": "android.location.GnssMeasurement"}, {"package_name": "android.location", "class_name": "GnssMeasurementsEvent", "full_name": "android.location.GnssMeasurementsEvent"}, {"package_name": "android.location", "class_name": "GnssMeasurementsEvent.Callback", "full_name": "android.location.GnssMeasurementsEvent.Callback"}, {"package_name": "android.location", "class_name": "GnssNavigationMessage", "full_name": "android.location.GnssNavigationMessage"}, {"package_name": "android.location", "class_name": "GnssNavigationMessage.Callback", "full_name": "android.location.GnssNavigationMessage.Callback"}, {"package_name": "android.location", "class_name": "GnssStatus", "full_name": "android.location.GnssStatus"}, {"package_name": "android.location", "class_name": "GnssStatus.Callback", "full_name": "android.location.GnssStatus.Callback"}, {"package_name": "android.location", "class_name": "GpsSatellite", "full_name": "android.location.GpsSatellite"}, {"package_name": "android.location", "class_name": "GpsStatus", "full_name": "android.location.GpsStatus"}, {"package_name": "android.location", "class_name": "GpsStatus.Listener", "full_name": "android.location.GpsStatus.Listener"}, {"package_name": "android.location", "class_name": "GpsStatus.NmeaListener", "full_name": "android.location.GpsStatus.NmeaListener"}, {"package_name": "android.graphics.drawable", "class_name": "GradientDrawable", "full_name": "android.graphics.drawable.GradientDrawable"}, {"package_name": "android.graphics.drawable", "class_name": "GradientDrawable.Orientation", "full_name": "android.graphics.drawable.GradientDrawable.Orientation"}, {"package_name": "android.view", "class_name": "Gravity", "full_name": "android.view.Gravity"}, {"package_name": "android.icu.util", "class_name": "GregorianCalendar", "full_name": "android.icu.util.GregorianCalendar"}, {"package_name": "java.util", "class_name": "GregorianCalendar", "full_name": "java.util.GregorianCalendar"}, {"package_name": "android.widget", "class_name": "GridLayout", "full_name": "android.widget.GridLayout"}, {"package_name": "android.widget", "class_name": "GridLayout.Alignment", "full_name": "android.widget.GridLayout.Alignment"}, {"package_name": "android.widget", "class_name": "GridLayout.LayoutParams", "full_name": "android.widget.GridLayout.LayoutParams"}, {"package_name": "android.widget", "class_name": "GridLayout.Spec", "full_name": "android.widget.GridLayout.Spec"}, {"package_name": "android.view.animation", "class_name": "GridLayoutAnimationController", "full_name": "android.view.animation.GridLayoutAnimationController"}, {"package_name": "android.view.animation", "class_name": "GridLayoutAnimationController.AnimationParameters", "full_name": "android.view.animation.GridLayoutAnimationController.AnimationParameters"}, {"package_name": "android.widget", "class_name": "GridView", "full_name": "android.widget.GridView"}, {"package_name": "java.security.acl", "class_name": "Group", "full_name": "java.security.acl.Group"}, {"package_name": "java.nio.file.attribute", "class_name": "GroupPrincipal", "full_name": "java.nio.file.attribute.GroupPrincipal"}, {"package_name": "android.telephony.gsm", "class_name": "GsmCellLocation", "full_name": "android.telephony.gsm.GsmCellLocation"}, {"package_name": "java.security", "class_name": "Guard", "full_name": "java.security.Guard"}, {"package_name": "java.security", "class_name": "GuardedObject", "full_name": "java.security.GuardedObject"}, {"package_name": "java.util.zip", "class_name": "GZIPInputStream", "full_name": "java.util.zip.GZIPInputStream"}, {"package_name": "java.util.zip", "class_name": "GZIPOutputStream", "full_name": "java.util.zip.GZIPOutputStream"}, {"package_name": "android.util", "class_name": "Half", "full_name": "android.util.Half"}, {"package_name": "android.os", "class_name": "Handler", "full_name": "android.os.Handler"}, {"package_name": "java.util.logging", "class_name": "Handler", "full_name": "java.util.logging.Handler"}, {"package_name": "android.os", "class_name": "Handler.Callback", "full_name": "android.os.Handler.Callback"}, {"package_name": "org.xml.sax", "class_name": "HandlerBase", "full_name": "org.xml.sax.HandlerBase"}, {"package_name": "android.os", "class_name": "HandlerThread", "full_name": "android.os.HandlerThread"}, {"package_name": "javax.net.ssl", "class_name": "HandshakeCompletedEvent", "full_name": "javax.net.ssl.HandshakeCompletedEvent"}, {"package_name": "javax.net.ssl", "class_name": "HandshakeCompletedListener", "full_name": "javax.net.ssl.HandshakeCompletedListener"}, {"package_name": "android.view", "class_name": "HapticFeedbackConstants", "full_name": "android.view.HapticFeedbackConstants"}, {"package_name": "android.hardware", "class_name": "HardwareBuffer", "full_name": "android.hardware.HardwareBuffer"}, {"package_name": "android.os", "class_name": "HardwarePropertiesManager", "full_name": "android.os.HardwarePropertiesManager"}, {"package_name": "android.widget", "class_name": "HeaderViewListAdapter", "full_name": "android.widget.HeaderViewListAdapter"}, {"package_name": "android.os.health", "class_name": "HealthStats", "full_name": "android.os.health.HealthStats"}, {"package_name": "android.icu.util", "class_name": "HebrewCalendar", "full_name": "android.icu.util.HebrewCalendar"}, {"package_name": "android.widget", "class_name": "HeterogeneousExpandableList", "full_name": "android.widget.HeterogeneousExpandableList"}, {"package_name": "android.text.method", "class_name": "HideReturnsTransformationMethod", "full_name": "android.text.method.HideReturnsTransformationMethod"}, {"package_name": "java.time.chrono", "class_name": "HijrahChronology", "full_name": "java.time.chrono.HijrahChronology"}, {"package_name": "java.time.chrono", "class_name": "HijrahDate", "full_name": "java.time.chrono.HijrahDate"}, {"package_name": "java.time.chrono", "class_name": "HijrahEra", "full_name": "java.time.chrono.HijrahEra"}, {"package_name": "android.widget", "class_name": "HorizontalScrollView", "full_name": "android.widget.HorizontalScrollView"}, {"package_name": "android.nfc.cardemulation", "class_name": "HostApduService", "full_name": "android.nfc.cardemulation.HostApduService"}, {"package_name": "org.apache.http.conn.scheme", "class_name": "HostNameResolver", "full_name": "org.apache.http.conn.scheme.HostNameResolver"}, {"package_name": "javax.net.ssl", "class_name": "HostnameVerifier", "full_name": "javax.net.ssl.HostnameVerifier"}, {"package_name": "android.nfc.cardemulation", "class_name": "HostNfcFService", "full_name": "android.nfc.cardemulation.HostNfcFService"}, {"package_name": "android.text", "class_name": "Html", "full_name": "android.text.Html"}, {"package_name": "android.text", "class_name": "Html.ImageGetter", "full_name": "android.text.Html.ImageGetter"}, {"package_name": "android.text", "class_name": "Html.TagHandler", "full_name": "android.text.Html.TagHandler"}, {"package_name": "android.webkit", "class_name": "HttpAuthHandler", "full_name": "android.webkit.HttpAuthHandler"}, {"package_name": "org.apache.http.params", "class_name": "HttpConnectionParams", "full_name": "org.apache.http.params.HttpConnectionParams"}, {"package_name": "java.net", "class_name": "HttpCookie", "full_name": "java.net.HttpCookie"}, {"package_name": "org.apache.http.params", "class_name": "HttpParams", "full_name": "org.apache.http.params.HttpParams"}, {"package_name": "android.net.http", "class_name": "HttpResponseCache", "full_name": "android.net.http.HttpResponseCache"}, {"package_name": "java.net", "class_name": "HttpRetryException", "full_name": "java.net.HttpRetryException"}, {"package_name": "javax.net.ssl", "class_name": "HttpsURLConnection", "full_name": "javax.net.ssl.HttpsURLConnection"}, {"package_name": "java.net", "class_name": "HttpURLConnection", "full_name": "java.net.HttpURLConnection"}, {"package_name": "android.os", "class_name": "IBinder", "full_name": "android.os.IBinder"}, {"package_name": "android.os", "class_name": "IBinder.DeathRecipient", "full_name": "android.os.IBinder.DeathRecipient"}, {"package_name": "android.telephony", "class_name": "IccOpenLogicalChannelResponse", "full_name": "android.telephony.IccOpenLogicalChannelResponse"}, {"package_name": "android.graphics.drawable", "class_name": "Icon", "full_name": "android.graphics.drawable.Icon"}, {"package_name": "android.graphics.drawable", "class_name": "Icon.OnDrawableLoadedListener", "full_name": "android.graphics.drawable.Icon.OnDrawableLoadedListener"}, {"package_name": "android.text.style", "class_name": "IconMarginSpan", "full_name": "android.text.style.IconMarginSpan"}, {"package_name": "android.icu.util", "class_name": "ICUUncheckedIOException", "full_name": "android.icu.util.ICUUncheckedIOException"}, {"package_name": "java.security", "class_name": "Identity", "full_name": "java.security.Identity"}, {"package_name": "android.net.wifi.aware", "class_name": "IdentityChangedListener", "full_name": "android.net.wifi.aware.IdentityChangedListener"}, {"package_name": "java.security", "class_name": "IdentityScope", "full_name": "java.security.IdentityScope"}, {"package_name": "java.net", "class_name": "IDN", "full_name": "java.net.IDN"}, {"package_name": "android.icu.text", "class_name": "IDNA", "full_name": "android.icu.text.IDNA"}, {"package_name": "android.icu.text", "class_name": "IDNA.Error", "full_name": "android.icu.text.IDNA.Error"}, {"package_name": "android.icu.text", "class_name": "IDNA.Info", "full_name": "android.icu.text.IDNA.Info"}, {"package_name": "android.os", "class_name": "IInterface", "full_name": "android.os.IInterface"}, {"package_name": "java.lang", "class_name": "IllegalAccessError", "full_name": "java.lang.IllegalAccessError"}, {"package_name": "java.lang", "class_name": "IllegalAccessException", "full_name": "java.lang.IllegalAccessException"}, {"package_name": "java.lang", "class_name": "IllegalArgumentException", "full_name": "java.lang.IllegalArgumentException"}, {"package_name": "java.nio.channels", "class_name": "IllegalBlockingModeException", "full_name": "java.nio.channels.IllegalBlockingModeException"}, {"package_name": "javax.crypto", "class_name": "IllegalBlockSizeException", "full_name": "javax.crypto.IllegalBlockSizeException"}, {"package_name": "java.nio.channels", "class_name": "IllegalChannelGroupException", "full_name": "java.nio.channels.IllegalChannelGroupException"}, {"package_name": "java.nio.charset", "class_name": "IllegalCharsetNameException", "full_name": "java.nio.charset.IllegalCharsetNameException"}, {"package_name": "java.util", "class_name": "IllegalFormatCodePointException", "full_name": "java.util.IllegalFormatCodePointException"}, {"package_name": "java.util", "class_name": "IllegalFormatConversionException", "full_name": "java.util.IllegalFormatConversionException"}, {"package_name": "java.util", "class_name": "IllegalFormatException", "full_name": "java.util.IllegalFormatException"}, {"package_name": "java.util", "class_name": "IllegalFormatFlagsException", "full_name": "java.util.IllegalFormatFlagsException"}, {"package_name": "java.util", "class_name": "IllegalFormatPrecisionException", "full_name": "java.util.IllegalFormatPrecisionException"}, {"package_name": "java.util", "class_name": "IllegalFormatWidthException", "full_name": "java.util.IllegalFormatWidthException"}, {"package_name": "java.lang", "class_name": "IllegalMonitorStateException", "full_name": "java.lang.IllegalMonitorStateException"}, {"package_name": "java.nio.channels", "class_name": "IllegalSelectorException", "full_name": "java.nio.channels.IllegalSelectorException"}, {"package_name": "java.lang", "class_name": "IllegalStateException", "full_name": "java.lang.IllegalStateException"}, {"package_name": "java.lang", "class_name": "IllegalThreadStateException", "full_name": "java.lang.IllegalThreadStateException"}, {"package_name": "android.icu.util", "class_name": "IllformedLocaleException", "full_name": "android.icu.util.IllformedLocaleException"}, {"package_name": "java.util", "class_name": "IllformedLocaleException", "full_name": "java.util.IllformedLocaleException"}, {"package_name": "android.media", "class_name": "Image", "full_name": "android.media.Image"}, {"package_name": "android.media", "class_name": "Image.Plane", "full_name": "android.media.Image.Plane"}, {"package_name": "android.widget", "class_name": "ImageButton", "full_name": "android.widget.ImageButton"}, {"package_name": "android.graphics", "class_name": "ImageDecoder", "full_name": "android.graphics.ImageDecoder"}, {"package_name": "android.graphics", "class_name": "ImageDecoder.DecodeException", "full_name": "android.graphics.ImageDecoder.DecodeException"}, {"package_name": "android.graphics", "class_name": "ImageDecoder.ImageInfo", "full_name": "android.graphics.ImageDecoder.ImageInfo"}, {"package_name": "android.graphics", "class_name": "ImageDecoder.OnHeaderDecodedListener", "full_name": "android.graphics.ImageDecoder.OnHeaderDecodedListener"}, {"package_name": "android.graphics", "class_name": "ImageDecoder.OnPartialImageListener", "full_name": "android.graphics.ImageDecoder.OnPartialImageListener"}, {"package_name": "android.graphics", "class_name": "ImageDecoder.Source", "full_name": "android.graphics.ImageDecoder.Source"}, {"package_name": "android.graphics", "class_name": "ImageFormat", "full_name": "android.graphics.ImageFormat"}, {"package_name": "android.media", "class_name": "ImageReader", "full_name": "android.media.ImageReader"}, {"package_name": "android.media", "class_name": "ImageReader.OnImageAvailableListener", "full_name": "android.media.ImageReader.OnImageAvailableListener"}, {"package_name": "android.text.style", "class_name": "ImageSpan", "full_name": "android.text.style.ImageSpan"}, {"package_name": "android.widget", "class_name": "ImageSwitcher", "full_name": "android.widget.ImageSwitcher"}, {"package_name": "android.service.autofill", "class_name": "ImageTransformation", "full_name": "android.service.autofill.ImageTransformation"}, {"package_name": "android.service.autofill", "class_name": "ImageTransformation.Builder", "full_name": "android.service.autofill.ImageTransformation.Builder"}, {"package_name": "android.widget", "class_name": "ImageView", "full_name": "android.widget.ImageView"}, {"package_name": "android.widget", "class_name": "ImageView.ScaleType", "full_name": "android.widget.ImageView.ScaleType"}, {"package_name": "android.media", "class_name": "ImageWriter", "full_name": "android.media.ImageWriter"}, {"package_name": "android.media", "class_name": "ImageWriter.OnImageReleasedListener", "full_name": "android.media.ImageWriter.OnImageReleasedListener"}, {"package_name": "android.telecom", "class_name": "InCallService", "full_name": "android.telecom.InCallService"}, {"package_name": "android.telecom", "class_name": "InCallService.VideoCall", "full_name": "android.telecom.InCallService.VideoCall"}, {"package_name": "android.telecom", "class_name": "InCallService.VideoCall.Callback", "full_name": "android.telecom.InCallService.VideoCall.Callback"}, {"package_name": "java.lang", "class_name": "IncompatibleClassChangeError", "full_name": "java.lang.IncompatibleClassChangeError"}, {"package_name": "java.lang.annotation", "class_name": "IncompleteAnnotationException", "full_name": "java.lang.annotation.IncompleteAnnotationException"}, {"package_name": "java.beans", "class_name": "IndexedPropertyChangeEvent", "full_name": "java.beans.IndexedPropertyChangeEvent"}, {"package_name": "java.lang", "class_name": "IndexOutOfBoundsException", "full_name": "java.lang.IndexOutOfBoundsException"}, {"package_name": "android.icu.util", "class_name": "IndianCalendar", "full_name": "android.icu.util.IndianCalendar"}, {"package_name": "java.net", "class_name": "InetAddress", "full_name": "java.net.InetAddress"}, {"package_name": "java.net", "class_name": "InetSocketAddress", "full_name": "java.net.InetSocketAddress"}, {"package_name": "android.view", "class_name": "InflateException", "full_name": "android.view.InflateException"}, {"package_name": "java.util.zip", "class_name": "Inflater", "full_name": "java.util.zip.Inflater"}, {"package_name": "java.util.zip", "class_name": "InflaterInputStream", "full_name": "java.util.zip.InflaterInputStream"}, {"package_name": "java.util.zip", "class_name": "InflaterOutputStream", "full_name": "java.util.zip.InflaterOutputStream"}, {"package_name": "java.lang.annotation", "class_name": "Inherited", "full_name": "java.lang.annotation.Inherited"}, {"package_name": "dalvik.system", "class_name": "InMemoryDexClassLoader", "full_name": "dalvik.system.InMemoryDexClassLoader"}, {"package_name": "android.view.inputmethod", "class_name": "InputBinding", "full_name": "android.view.inputmethod.InputBinding"}, {"package_name": "android.view.inputmethod", "class_name": "InputConnection", "full_name": "android.view.inputmethod.InputConnection"}, {"package_name": "android.view.inputmethod", "class_name": "InputConnectionWrapper", "full_name": "android.view.inputmethod.InputConnectionWrapper"}, {"package_name": "android.view.inputmethod", "class_name": "InputContentInfo", "full_name": "android.view.inputmethod.InputContentInfo"}, {"package_name": "android.view", "class_name": "InputDevice", "full_name": "android.view.InputDevice"}, {"package_name": "android.view", "class_name": "InputDevice.MotionRange", "full_name": "android.view.InputDevice.MotionRange"}, {"package_name": "android.view", "class_name": "InputEvent", "full_name": "android.view.InputEvent"}, {"package_name": "android.text", "class_name": "InputFilter", "full_name": "android.text.InputFilter"}, {"package_name": "android.text", "class_name": "InputFilter.AllCaps", "full_name": "android.text.InputFilter.AllCaps"}, {"package_name": "android.text", "class_name": "InputFilter.LengthFilter", "full_name": "android.text.InputFilter.LengthFilter"}, {"package_name": "android.hardware.input", "class_name": "InputManager", "full_name": "android.hardware.input.InputManager"}, {"package_name": "android.hardware.input", "class_name": "InputManager.InputDeviceListener", "full_name": "android.hardware.input.InputManager.InputDeviceListener"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethod", "full_name": "android.view.inputmethod.InputMethod"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethod.SessionCallback", "full_name": "android.view.inputmethod.InputMethod.SessionCallback"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethodInfo", "full_name": "android.view.inputmethod.InputMethodInfo"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethodManager", "full_name": "android.view.inputmethod.InputMethodManager"}, {"package_name": "android.inputmethodservice", "class_name": "InputMethodService", "full_name": "android.inputmethodservice.InputMethodService"}, {"package_name": "android.inputmethodservice", "class_name": "InputMethodService.InputMethodImpl", "full_name": "android.inputmethodservice.InputMethodService.InputMethodImpl"}, {"package_name": "android.inputmethodservice", "class_name": "InputMethodService.InputMethodSessionImpl", "full_name": "android.inputmethodservice.InputMethodService.InputMethodSessionImpl"}, {"package_name": "android.inputmethodservice", "class_name": "InputMethodService.Insets", "full_name": "android.inputmethodservice.InputMethodService.Insets"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethodSession", "full_name": "android.view.inputmethod.InputMethodSession"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethodSession.EventCallback", "full_name": "android.view.inputmethod.InputMethodSession.EventCallback"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethodSubtype", "full_name": "android.view.inputmethod.InputMethodSubtype"}, {"package_name": "android.view.inputmethod", "class_name": "InputMethodSubtype.InputMethodSubtypeBuilder", "full_name": "android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder"}, {"package_name": "java.util", "class_name": "InputMismatchException", "full_name": "java.util.InputMismatchException"}, {"package_name": "android.view", "class_name": "InputQueue", "full_name": "android.view.InputQueue"}, {"package_name": "android.view", "class_name": "InputQueue.Callback", "full_name": "android.view.InputQueue.Callback"}, {"package_name": "org.xml.sax", "class_name": "InputSource", "full_name": "org.xml.sax.InputSource"}, {"package_name": "java.io", "class_name": "InputStream", "full_name": "java.io.InputStream"}, {"package_name": "java.io", "class_name": "InputStreamReader", "full_name": "java.io.InputStreamReader"}, {"package_name": "android.text", "class_name": "InputType", "full_name": "android.text.InputType"}, {"package_name": "android.graphics.drawable", "class_name": "InsetDrawable", "full_name": "android.graphics.drawable.InsetDrawable"}, {"package_name": "android.os.strictmode", "class_name": "InstanceCountViolation", "full_name": "android.os.strictmode.InstanceCountViolation"}, {"package_name": "java.time", "class_name": "Instant", "full_name": "java.time.Instant"}, {"package_name": "java.lang", "class_name": "InstantiationError", "full_name": "java.lang.InstantiationError"}, {"package_name": "java.lang", "class_name": "InstantiationException", "full_name": "java.lang.InstantiationException"}, {"package_name": "android.app", "class_name": "Instrumentation", "full_name": "android.app.Instrumentation"}, {"package_name": "android.app", "class_name": "Instrumentation.ActivityMonitor", "full_name": "android.app.Instrumentation.ActivityMonitor"}, {"package_name": "android.app", "class_name": "Instrumentation.ActivityResult", "full_name": "android.app.Instrumentation.ActivityResult"}, {"package_name": "android.content.pm", "class_name": "InstrumentationInfo", "full_name": "android.content.pm.InstrumentationInfo"}, {"package_name": "android.test", "class_name": "InstrumentationTestCase", "full_name": "android.test.InstrumentationTestCase"}, {"package_name": "android.test", "class_name": "InstrumentationTestRunner", "full_name": "android.test.InstrumentationTestRunner"}, {"package_name": "android.test", "class_name": "InstrumentationTestSuite", "full_name": "android.test.InstrumentationTestSuite"}, {"package_name": "android.animation", "class_name": "IntArrayEvaluator", "full_name": "android.animation.IntArrayEvaluator"}, {"package_name": "java.util.function", "class_name": "IntBinaryOperator", "full_name": "java.util.function.IntBinaryOperator"}, {"package_name": "java.nio", "class_name": "IntBuffer", "full_name": "java.nio.IntBuffer"}, {"package_name": "java.util.function", "class_name": "IntConsumer", "full_name": "java.util.function.IntConsumer"}, {"package_name": "java.lang", "class_name": "Integer", "full_name": "java.lang.Integer"}, {"package_name": "android.content", "class_name": "Intent", "full_name": "android.content.Intent"}, {"package_name": "android.content", "class_name": "Intent.FilterComparison", "full_name": "android.content.Intent.FilterComparison"}, {"package_name": "android.content", "class_name": "Intent.ShortcutIconResource", "full_name": "android.content.Intent.ShortcutIconResource"}, {"package_name": "android.content", "class_name": "IntentFilter", "full_name": "android.content.IntentFilter"}, {"package_name": "android.content", "class_name": "IntentFilter.AuthorityEntry", "full_name": "android.content.IntentFilter.AuthorityEntry"}, {"package_name": "android.content", "class_name": "IntentFilter.MalformedMimeTypeException", "full_name": "android.content.IntentFilter.MalformedMimeTypeException"}, {"package_name": "android.os.strictmode", "class_name": "IntentReceiverLeakedViolation", "full_name": "android.os.strictmode.IntentReceiverLeakedViolation"}, {"package_name": "android.content", "class_name": "IntentSender", "full_name": "android.content.IntentSender"}, {"package_name": "android.content", "class_name": "IntentSender.OnFinished", "full_name": "android.content.IntentSender.OnFinished"}, {"package_name": "android.content", "class_name": "IntentSender.SendIntentException", "full_name": "android.content.IntentSender.SendIntentException"}, {"package_name": "android.app", "class_name": "IntentService", "full_name": "android.app.IntentService"}, {"package_name": "java.net", "class_name": "InterfaceAddress", "full_name": "java.net.InterfaceAddress"}, {"package_name": "java.lang", "class_name": "InternalError", "full_name": "java.lang.InternalError"}, {"package_name": "android.graphics", "class_name": "Interpolator", "full_name": "android.graphics.Interpolator"}, {"package_name": "android.view.animation", "class_name": "Interpolator", "full_name": "android.view.animation.Interpolator"}, {"package_name": "android.graphics", "class_name": "Interpolator.Result", "full_name": "android.graphics.Interpolator.Result"}, {"package_name": "java.nio.channels", "class_name": "InterruptedByTimeoutException", "full_name": "java.nio.channels.InterruptedByTimeoutException"}, {"package_name": "java.lang", "class_name": "InterruptedException", "full_name": "java.lang.InterruptedException"}, {"package_name": "java.io", "class_name": "InterruptedIOException", "full_name": "java.io.InterruptedIOException"}, {"package_name": "java.nio.channels", "class_name": "InterruptibleChannel", "full_name": "java.nio.channels.InterruptibleChannel"}, {"package_name": "android.animation", "class_name": "IntEvaluator", "full_name": "android.animation.IntEvaluator"}, {"package_name": "java.util.function", "class_name": "IntPredicate", "full_name": "java.util.function.IntPredicate"}, {"package_name": "java.util.stream", "class_name": "IntStream", "full_name": "java.util.stream.IntStream"}, {"package_name": "java.util.stream", "class_name": "IntStream.Builder", "full_name": "java.util.stream.IntStream.Builder"}, {"package_name": "java.util", "class_name": "IntSummaryStatistics", "full_name": "java.util.IntSummaryStatistics"}, {"package_name": "java.util.function", "class_name": "IntSupplier", "full_name": "java.util.function.IntSupplier"}, {"package_name": "java.util.function", "class_name": "IntToDoubleFunction", "full_name": "java.util.function.IntToDoubleFunction"}, {"package_name": "java.util.function", "class_name": "IntToLongFunction", "full_name": "java.util.function.IntToLongFunction"}, {"package_name": "java.util.function", "class_name": "IntUnaryOperator", "full_name": "java.util.function.IntUnaryOperator"}, {"package_name": "java.security", "class_name": "InvalidAlgorithmParameterException", "full_name": "java.security.InvalidAlgorithmParameterException"}, {"package_name": "java.io", "class_name": "InvalidClassException", "full_name": "java.io.InvalidClassException"}, {"package_name": "java.security", "class_name": "InvalidKeyException", "full_name": "java.security.InvalidKeyException"}, {"package_name": "java.security.spec", "class_name": "InvalidKeySpecException", "full_name": "java.security.spec.InvalidKeySpecException"}, {"package_name": "java.nio", "class_name": "InvalidMarkException", "full_name": "java.nio.InvalidMarkException"}, {"package_name": "java.io", "class_name": "InvalidObjectException", "full_name": "java.io.InvalidObjectException"}, {"package_name": "java.security", "class_name": "InvalidParameterException", "full_name": "java.security.InvalidParameterException"}, {"package_name": "java.security.spec", "class_name": "InvalidParameterSpecException", "full_name": "java.security.spec.InvalidParameterSpecException"}, {"package_name": "java.nio.file", "class_name": "InvalidPathException", "full_name": "java.nio.file.InvalidPathException"}, {"package_name": "java.util.prefs", "class_name": "InvalidPreferencesFormatException", "full_name": "java.util.prefs.InvalidPreferencesFormatException"}, {"package_name": "java.util", "class_name": "InvalidPropertiesFormatException", "full_name": "java.util.InvalidPropertiesFormatException"}, {"package_name": "java.lang.reflect", "class_name": "InvocationHandler", "full_name": "java.lang.reflect.InvocationHandler"}, {"package_name": "java.lang.reflect", "class_name": "InvocationTargetException", "full_name": "java.lang.reflect.InvocationTargetException"}, {"package_name": "java.io", "class_name": "IOError", "full_name": "java.io.IOError"}, {"package_name": "java.io", "class_name": "IOException", "full_name": "java.io.IOException"}, {"package_name": "android.net", "class_name": "IpPrefix", "full_name": "android.net.IpPrefix"}, {"package_name": "android.net", "class_name": "IpSecAlgorithm", "full_name": "android.net.IpSecAlgorithm"}, {"package_name": "android.net", "class_name": "IpSecManager", "full_name": "android.net.IpSecManager"}, {"package_name": "android.net", "class_name": "IpSecManager.ResourceUnavailableException", "full_name": "android.net.IpSecManager.ResourceUnavailableException"}, {"package_name": "android.net", "class_name": "IpSecManager.SecurityParameterIndex", "full_name": "android.net.IpSecManager.SecurityParameterIndex"}, {"package_name": "android.net", "class_name": "IpSecManager.SpiUnavailableException", "full_name": "android.net.IpSecManager.SpiUnavailableException"}, {"package_name": "android.net", "class_name": "IpSecManager.UdpEncapsulationSocket", "full_name": "android.net.IpSecManager.UdpEncapsulationSocket"}, {"package_name": "android.net", "class_name": "IpSecTransform", "full_name": "android.net.IpSecTransform"}, {"package_name": "android.net", "class_name": "IpSecTransform.Builder", "full_name": "android.net.IpSecTransform.Builder"}, {"package_name": "android.icu.util", "class_name": "IslamicCalendar", "full_name": "android.icu.util.IslamicCalendar"}, {"package_name": "android.icu.util", "class_name": "IslamicCalendar.CalculationType", "full_name": "android.icu.util.IslamicCalendar.CalculationType"}, {"package_name": "java.time.chrono", "class_name": "IsoChronology", "full_name": "java.time.chrono.IsoChronology"}, {"package_name": "android.nfc.tech", "class_name": "IsoDep", "full_name": "android.nfc.tech.IsoDep"}, {"package_name": "java.time.chrono", "class_name": "IsoEra", "full_name": "java.time.chrono.IsoEra"}, {"package_name": "java.time.temporal", "class_name": "IsoFields", "full_name": "java.time.temporal.IsoFields"}, {"package_name": "android.test", "class_name": "IsolatedContext", "full_name": "android.test.IsolatedContext"}, {"package_name": "javax.crypto.spec", "class_name": "IvParameterSpec", "full_name": "javax.crypto.spec.IvParameterSpec"}, {"package_name": "android.icu.util", "class_name": "JapaneseCalendar", "full_name": "android.icu.util.JapaneseCalendar"}, {"package_name": "java.time.chrono", "class_name": "JapaneseChronology", "full_name": "java.time.chrono.JapaneseChronology"}, {"package_name": "java.time.chrono", "class_name": "JapaneseDate", "full_name": "java.time.chrono.JapaneseDate"}, {"package_name": "java.time.chrono", "class_name": "JapaneseEra", "full_name": "java.time.chrono.JapaneseEra"}, {"package_name": "java.util.jar", "class_name": "JarEntry", "full_name": "java.util.jar.JarEntry"}, {"package_name": "java.util.jar", "class_name": "JarException", "full_name": "java.util.jar.JarException"}, {"package_name": "java.util.jar", "class_name": "JarFile", "full_name": "java.util.jar.JarFile"}, {"package_name": "java.util.jar", "class_name": "JarInputStream", "full_name": "java.util.jar.JarInputStream"}, {"package_name": "java.util.jar", "class_name": "JarOutputStream", "full_name": "java.util.jar.JarOutputStream"}, {"package_name": "java.net", "class_name": "JarURLConnection", "full_name": "java.net.JarURLConnection"}, {"package_name": "android.webkit", "class_name": "JavascriptInterface", "full_name": "android.webkit.JavascriptInterface"}, {"package_name": "android.media", "class_name": "JetPlayer", "full_name": "android.media.JetPlayer"}, {"package_name": "android.media", "class_name": "JetPlayer.OnJetEventListener", "full_name": "android.media.JetPlayer.OnJetEventListener"}, {"package_name": "android.app.job", "class_name": "JobInfo", "full_name": "android.app.job.JobInfo"}, {"package_name": "android.app.job", "class_name": "JobInfo.Builder", "full_name": "android.app.job.JobInfo.Builder"}, {"package_name": "android.app.job", "class_name": "JobInfo.TriggerContentUri", "full_name": "android.app.job.JobInfo.TriggerContentUri"}, {"package_name": "android.app.job", "class_name": "JobParameters", "full_name": "android.app.job.JobParameters"}, {"package_name": "android.app.job", "class_name": "JobScheduler", "full_name": "android.app.job.JobScheduler"}, {"package_name": "android.app.job", "class_name": "JobService", "full_name": "android.app.job.JobService"}, {"package_name": "android.app.job", "class_name": "JobServiceEngine", "full_name": "android.app.job.JobServiceEngine"}, {"package_name": "android.app.job", "class_name": "JobWorkItem", "full_name": "android.app.job.JobWorkItem"}, {"package_name": "org.json", "class_name": "JSONArray", "full_name": "org.json.JSONArray"}, {"package_name": "org.json", "class_name": "JSONException", "full_name": "org.json.JSONException"}, {"package_name": "org.json", "class_name": "JSONObject", "full_name": "org.json.JSONObject"}, {"package_name": "android.util", "class_name": "JsonReader", "full_name": "android.util.JsonReader"}, {"package_name": "org.json", "class_name": "JSONStringer", "full_name": "org.json.JSONStringer"}, {"package_name": "android.util", "class_name": "JsonToken", "full_name": "android.util.JsonToken"}, {"package_name": "org.json", "class_name": "JSONTokener", "full_name": "org.json.JSONTokener"}, {"package_name": "android.util", "class_name": "JsonWriter", "full_name": "android.util.JsonWriter"}, {"package_name": "android.webkit", "class_name": "JsPromptResult", "full_name": "android.webkit.JsPromptResult"}, {"package_name": "android.webkit", "class_name": "JsResult", "full_name": "android.webkit.JsResult"}, {"package_name": "java.time.temporal", "class_name": "JulianFields", "full_name": "java.time.temporal.JulianFields"}, {"package_name": "java.security", "class_name": "Key", "full_name": "java.security.Key"}, {"package_name": "javax.crypto", "class_name": "KeyAgreement", "full_name": "javax.crypto.KeyAgreement"}, {"package_name": "javax.crypto", "class_name": "KeyAgreementSpi", "full_name": "javax.crypto.KeyAgreementSpi"}, {"package_name": "android.inputmethodservice", "class_name": "Keyboard", "full_name": "android.inputmethodservice.Keyboard"}, {"package_name": "android.inputmethodservice", "class_name": "Keyboard.Key", "full_name": "android.inputmethodservice.Keyboard.Key"}, {"package_name": "android.inputmethodservice", "class_name": "Keyboard.Row", "full_name": "android.inputmethodservice.Keyboard.Row"}, {"package_name": "android.view", "class_name": "KeyboardShortcutGroup", "full_name": "android.view.KeyboardShortcutGroup"}, {"package_name": "android.view", "class_name": "KeyboardShortcutInfo", "full_name": "android.view.KeyboardShortcutInfo"}, {"package_name": "android.inputmethodservice", "class_name": "KeyboardView", "full_name": "android.inputmethodservice.KeyboardView"}, {"package_name": "android.inputmethodservice", "class_name": "KeyboardView.OnKeyboardActionListener", "full_name": "android.inputmethodservice.KeyboardView.OnKeyboardActionListener"}, {"package_name": "android.security", "class_name": "KeyChain", "full_name": "android.security.KeyChain"}, {"package_name": "android.security", "class_name": "KeyChainAliasCallback", "full_name": "android.security.KeyChainAliasCallback"}, {"package_name": "android.security", "class_name": "KeyChainException", "full_name": "android.security.KeyChainException"}, {"package_name": "android.view", "class_name": "KeyCharacterMap", "full_name": "android.view.KeyCharacterMap"}, {"package_name": "android.view", "class_name": "KeyCharacterMap.KeyData", "full_name": "android.view.KeyCharacterMap.KeyData"}, {"package_name": "android.view", "class_name": "KeyCharacterMap.UnavailableException", "full_name": "android.view.KeyCharacterMap.UnavailableException"}, {"package_name": "android.view", "class_name": "KeyEvent", "full_name": "android.view.KeyEvent"}, {"package_name": "android.view", "class_name": "KeyEvent.Callback", "full_name": "android.view.KeyEvent.Callback"}, {"package_name": "android.view", "class_name": "KeyEvent.DispatcherState", "full_name": "android.view.KeyEvent.DispatcherState"}, {"package_name": "java.security", "class_name": "KeyException", "full_name": "java.security.KeyException"}, {"package_name": "android.security.keystore", "class_name": "KeyExpiredException", "full_name": "android.security.keystore.KeyExpiredException"}, {"package_name": "java.security", "class_name": "KeyFactory", "full_name": "java.security.KeyFactory"}, {"package_name": "java.security", "class_name": "KeyFactorySpi", "full_name": "java.security.KeyFactorySpi"}, {"package_name": "android.animation", "class_name": "Keyframe", "full_name": "android.animation.Keyframe"}, {"package_name": "javax.crypto", "class_name": "KeyGenerator", "full_name": "javax.crypto.KeyGenerator"}, {"package_name": "javax.crypto", "class_name": "KeyGeneratorSpi", "full_name": "javax.crypto.KeyGeneratorSpi"}, {"package_name": "android.security.keystore", "class_name": "KeyGenParameterSpec", "full_name": "android.security.keystore.KeyGenParameterSpec"}, {"package_name": "android.security.keystore", "class_name": "KeyGenParameterSpec.Builder", "full_name": "android.security.keystore.KeyGenParameterSpec.Builder"}, {"package_name": "android.app", "class_name": "KeyguardManager", "full_name": "android.app.KeyguardManager"}, {"package_name": "android.app", "class_name": "KeyguardManager.KeyguardDismissCallback", "full_name": "android.app.KeyguardManager.KeyguardDismissCallback"}, {"package_name": "android.app", "class_name": "KeyguardManager.KeyguardLock", "full_name": "android.app.KeyguardManager.KeyguardLock"}, {"package_name": "android.app", "class_name": "KeyguardManager.OnKeyguardExitResult", "full_name": "android.app.KeyguardManager.OnKeyguardExitResult"}, {"package_name": "android.security.keystore", "class_name": "KeyInfo", "full_name": "android.security.keystore.KeyInfo"}, {"package_name": "android.text.method", "class_name": "KeyListener", "full_name": "android.text.method.KeyListener"}, {"package_name": "java.security", "class_name": "KeyManagementException", "full_name": "java.security.KeyManagementException"}, {"package_name": "javax.net.ssl", "class_name": "KeyManager", "full_name": "javax.net.ssl.KeyManager"}, {"package_name": "javax.net.ssl", "class_name": "KeyManagerFactory", "full_name": "javax.net.ssl.KeyManagerFactory"}, {"package_name": "javax.net.ssl", "class_name": "KeyManagerFactorySpi", "full_name": "javax.net.ssl.KeyManagerFactorySpi"}, {"package_name": "android.security.keystore", "class_name": "KeyNotYetValidException", "full_name": "android.security.keystore.KeyNotYetValidException"}, {"package_name": "java.security", "class_name": "KeyPair", "full_name": "java.security.KeyPair"}, {"package_name": "java.security", "class_name": "KeyPairGenerator", "full_name": "java.security.KeyPairGenerator"}, {"package_name": "android.security", "class_name": "KeyPairGeneratorSpec", "full_name": "android.security.KeyPairGeneratorSpec"}, {"package_name": "android.security", "class_name": "KeyPairGeneratorSpec.Builder", "full_name": "android.security.KeyPairGeneratorSpec.Builder"}, {"package_name": "java.security", "class_name": "KeyPairGeneratorSpi", "full_name": "java.security.KeyPairGeneratorSpi"}, {"package_name": "android.security.keystore", "class_name": "KeyPermanentlyInvalidatedException", "full_name": "android.security.keystore.KeyPermanentlyInvalidatedException"}, {"package_name": "android.security.keystore", "class_name": "KeyProperties", "full_name": "android.security.keystore.KeyProperties"}, {"package_name": "android.security.keystore", "class_name": "KeyProtection", "full_name": "android.security.keystore.KeyProtection"}, {"package_name": "android.security.keystore", "class_name": "KeyProtection.Builder", "full_name": "android.security.keystore.KeyProtection.Builder"}, {"package_name": "java.security", "class_name": "KeyRep", "full_name": "java.security.KeyRep"}, {"package_name": "java.security", "class_name": "KeyRep.Type", "full_name": "java.security.KeyRep.Type"}, {"package_name": "java.security.spec", "class_name": "KeySpec", "full_name": "java.security.spec.KeySpec"}, {"package_name": "java.security", "class_name": "KeyStore", "full_name": "java.security.KeyStore"}, {"package_name": "java.security", "class_name": "KeyStore.Builder", "full_name": "java.security.KeyStore.Builder"}, {"package_name": "java.security", "class_name": "KeyStore.CallbackHandlerProtection", "full_name": "java.security.KeyStore.CallbackHandlerProtection"}, {"package_name": "java.security", "class_name": "KeyStore.Entry", "full_name": "java.security.KeyStore.Entry"}, {"package_name": "java.security", "class_name": "KeyStore.Entry.Attribute", "full_name": "java.security.KeyStore.Entry.Attribute"}, {"package_name": "java.security", "class_name": "KeyStore.LoadStoreParameter", "full_name": "java.security.KeyStore.LoadStoreParameter"}, {"package_name": "java.security", "class_name": "KeyStore.PasswordProtection", "full_name": "java.security.KeyStore.PasswordProtection"}, {"package_name": "java.security", "class_name": "KeyStore.PrivateKeyEntry", "full_name": "java.security.KeyStore.PrivateKeyEntry"}, {"package_name": "java.security", "class_name": "KeyStore.ProtectionParameter", "full_name": "java.security.KeyStore.ProtectionParameter"}, {"package_name": "java.security", "class_name": "KeyStore.SecretKeyEntry", "full_name": "java.security.KeyStore.SecretKeyEntry"}, {"package_name": "java.security", "class_name": "KeyStore.TrustedCertificateEntry", "full_name": "java.security.KeyStore.TrustedCertificateEntry"}, {"package_name": "javax.net.ssl", "class_name": "KeyStoreBuilderParameters", "full_name": "javax.net.ssl.KeyStoreBuilderParameters"}, {"package_name": "java.security", "class_name": "KeyStoreException", "full_name": "java.security.KeyStoreException"}, {"package_name": "android.security", "class_name": "KeyStoreParameter", "full_name": "android.security.KeyStoreParameter"}, {"package_name": "android.security", "class_name": "KeyStoreParameter.Builder", "full_name": "android.security.KeyStoreParameter.Builder"}, {"package_name": "java.security", "class_name": "KeyStoreSpi", "full_name": "java.security.KeyStoreSpi"}, {"package_name": "android.content.pm", "class_name": "LabeledIntent", "full_name": "android.content.pm.LabeledIntent"}, {"package_name": "java.lang.invoke", "class_name": "LambdaConversionException", "full_name": "java.lang.invoke.LambdaConversionException"}, {"package_name": "android.test.suitebuilder.annotation", "class_name": "LargeTest", "full_name": "android.test.suitebuilder.annotation.LargeTest"}, {"package_name": "java.security.acl", "class_name": "LastOwnerException", "full_name": "java.security.acl.LastOwnerException"}, {"package_name": "android.app", "class_name": "LauncherActivity", "full_name": "android.app.LauncherActivity"}, {"package_name": "android.app", "class_name": "LauncherActivity.IconResizer", "full_name": "android.app.LauncherActivity.IconResizer"}, {"package_name": "android.app", "class_name": "LauncherActivity.ListItem", "full_name": "android.app.LauncherActivity.ListItem"}, {"package_name": "android.content.pm", "class_name": "LauncherActivityInfo", "full_name": "android.content.pm.LauncherActivityInfo"}, {"package_name": "android.content.pm", "class_name": "LauncherApps", "full_name": "android.content.pm.LauncherApps"}, {"package_name": "android.content.pm", "class_name": "LauncherApps.Callback", "full_name": "android.content.pm.LauncherApps.Callback"}, {"package_name": "android.content.pm", "class_name": "LauncherApps.PinItemRequest", "full_name": "android.content.pm.LauncherApps.PinItemRequest"}, {"package_name": "android.content.pm", "class_name": "LauncherApps.ShortcutQuery", "full_name": "android.content.pm.LauncherApps.ShortcutQuery"}, {"package_name": "android.graphics.drawable", "class_name": "LayerDrawable", "full_name": "android.graphics.drawable.LayerDrawable"}, {"package_name": "org.apache.http.conn.scheme", "class_name": "LayeredSocketFactory", "full_name": "org.apache.http.conn.scheme.LayeredSocketFactory"}, {"package_name": "android.text", "class_name": "Layout", "full_name": "android.text.Layout"}, {"package_name": "android.text", "class_name": "Layout.Alignment", "full_name": "android.text.Layout.Alignment"}, {"package_name": "android.text", "class_name": "Layout.Directions", "full_name": "android.text.Layout.Directions"}, {"package_name": "android.view.animation", "class_name": "LayoutAnimationController", "full_name": "android.view.animation.LayoutAnimationController"}, {"package_name": "android.view.animation", "class_name": "LayoutAnimationController.AnimationParameters", "full_name": "android.view.animation.LayoutAnimationController.AnimationParameters"}, {"package_name": "android.util", "class_name": "LayoutDirection", "full_name": "android.util.LayoutDirection"}, {"package_name": "android.view", "class_name": "LayoutInflater", "full_name": "android.view.LayoutInflater"}, {"package_name": "android.view", "class_name": "LayoutInflater.Factory", "full_name": "android.view.LayoutInflater.Factory"}, {"package_name": "android.view", "class_name": "LayoutInflater.Filter", "full_name": "android.view.LayoutInflater.Filter"}, {"package_name": "android.animation", "class_name": "LayoutTransition", "full_name": "android.animation.LayoutTransition"}, {"package_name": "android.animation", "class_name": "LayoutTransition.TransitionListener", "full_name": "android.animation.LayoutTransition.TransitionListener"}, {"package_name": "java.security.cert", "class_name": "LDAPCertStoreParameters", "full_name": "java.security.cert.LDAPCertStoreParameters"}, {"package_name": "android.text.style", "class_name": "LeadingMarginSpan", "full_name": "android.text.style.LeadingMarginSpan"}, {"package_name": "android.text.style", "class_name": "LeadingMarginSpan.Standard", "full_name": "android.text.style.LeadingMarginSpan.Standard"}, {"package_name": "android.os.strictmode", "class_name": "LeakedClosableViolation", "full_name": "android.os.strictmode.LeakedClosableViolation"}, {"package_name": "java.util.logging", "class_name": "Level", "full_name": "java.util.logging.Level"}, {"package_name": "android.graphics.drawable", "class_name": "LevelListDrawable", "full_name": "android.graphics.drawable.LevelListDrawable"}, {"package_name": "org.xml.sax.ext", "class_name": "LexicalHandler", "full_name": "org.xml.sax.ext.LexicalHandler"}, {"package_name": "android.graphics", "class_name": "LightingColorFilter", "full_name": "android.graphics.LightingColorFilter"}, {"package_name": "android.graphics", "class_name": "LinearGradient", "full_name": "android.graphics.LinearGradient"}, {"package_name": "android.view.animation", "class_name": "LinearInterpolator", "full_name": "android.view.animation.LinearInterpolator"}, {"package_name": "android.widget", "class_name": "LinearLayout", "full_name": "android.widget.LinearLayout"}, {"package_name": "android.widget", "class_name": "LinearLayout.LayoutParams", "full_name": "android.widget.LinearLayout.LayoutParams"}, {"package_name": "android.text.style", "class_name": "LineBackgroundSpan", "full_name": "android.text.style.LineBackgroundSpan"}, {"package_name": "android.text.style", "class_name": "LineHeightSpan", "full_name": "android.text.style.LineHeightSpan"}, {"package_name": "android.text.style", "class_name": "LineHeightSpan.WithDensity", "full_name": "android.text.style.LineHeightSpan.WithDensity"}, {"package_name": "java.io", "class_name": "LineNumberInputStream", "full_name": "java.io.LineNumberInputStream"}, {"package_name": "java.io", "class_name": "LineNumberReader", "full_name": "java.io.LineNumberReader"}, {"package_name": "android.net", "class_name": "LinkAddress", "full_name": "android.net.LinkAddress"}, {"package_name": "java.lang", "class_name": "LinkageError", "full_name": "java.lang.LinkageError"}, {"package_name": "android.text.util", "class_name": "Linkify", "full_name": "android.text.util.Linkify"}, {"package_name": "android.text.util", "class_name": "Linkify.MatchFilter", "full_name": "android.text.util.Linkify.MatchFilter"}, {"package_name": "android.text.util", "class_name": "Linkify.TransformFilter", "full_name": "android.text.util.Linkify.TransformFilter"}, {"package_name": "android.text.method", "class_name": "LinkMovementMethod", "full_name": "android.text.method.LinkMovementMethod"}, {"package_name": "java.nio.file", "class_name": "LinkOption", "full_name": "java.nio.file.LinkOption"}, {"package_name": "java.nio.file", "class_name": "LinkPermission", "full_name": "java.nio.file.LinkPermission"}, {"package_name": "android.net", "class_name": "LinkProperties", "full_name": "android.net.LinkProperties"}, {"package_name": "android.app", "class_name": "ListActivity", "full_name": "android.app.ListActivity"}, {"package_name": "android.widget", "class_name": "ListAdapter", "full_name": "android.widget.ListAdapter"}, {"package_name": "android.icu.text", "class_name": "ListFormatter", "full_name": "android.icu.text.ListFormatter"}, {"package_name": "android.app", "class_name": "ListFragment", "full_name": "android.app.ListFragment"}, {"package_name": "android.widget", "class_name": "ListPopupWindow", "full_name": "android.widget.ListPopupWindow"}, {"package_name": "android.preference", "class_name": "ListPreference", "full_name": "android.preference.ListPreference"}, {"package_name": "java.util", "class_name": "ListResourceBundle", "full_name": "java.util.ListResourceBundle"}, {"package_name": "android.widget", "class_name": "ListView", "full_name": "android.widget.ListView"}, {"package_name": "android.widget", "class_name": "ListView.FixedViewInfo", "full_name": "android.widget.ListView.FixedViewInfo"}, {"package_name": "android.provider", "class_name": "LiveFolders", "full_name": "android.provider.LiveFolders"}, {"package_name": "android.content", "class_name": "Loader.ForceLoadContentObserver", "full_name": "android.content.Loader.ForceLoadContentObserver"}, {"package_name": "android.app", "class_name": "LoaderManager", "full_name": "android.app.LoaderManager"}, {"package_name": "android.test", "class_name": "LoaderTestCase", "full_name": "android.test.LoaderTestCase"}, {"package_name": "android.app", "class_name": "LocalActivityManager", "full_name": "android.app.LocalActivityManager"}, {"package_name": "java.time", "class_name": "LocalDate", "full_name": "java.time.LocalDate"}, {"package_name": "java.time", "class_name": "LocalDateTime", "full_name": "java.time.LocalDateTime"}, {"package_name": "java.util", "class_name": "Locale", "full_name": "java.util.Locale"}, {"package_name": "java.util", "class_name": "Locale.Builder", "full_name": "java.util.Locale.Builder"}, {"package_name": "java.util", "class_name": "Locale.Category", "full_name": "java.util.Locale.Category"}, {"package_name": "java.util", "class_name": "Locale.FilteringMode", "full_name": "java.util.Locale.FilteringMode"}, {"package_name": "java.util", "class_name": "Locale.LanguageRange", "full_name": "java.util.Locale.LanguageRange"}, {"package_name": "android.icu.util", "class_name": "LocaleData", "full_name": "android.icu.util.LocaleData"}, {"package_name": "android.icu.util", "class_name": "LocaleData.MeasurementSystem", "full_name": "android.icu.util.LocaleData.MeasurementSystem"}, {"package_name": "android.icu.util", "class_name": "LocaleData.PaperSize", "full_name": "android.icu.util.LocaleData.PaperSize"}, {"package_name": "android.icu.text", "class_name": "LocaleDisplayNames", "full_name": "android.icu.text.LocaleDisplayNames"}, {"package_name": "android.icu.text", "class_name": "LocaleDisplayNames.DialectHandling", "full_name": "android.icu.text.LocaleDisplayNames.DialectHandling"}, {"package_name": "android.icu.text", "class_name": "LocaleDisplayNames.UiListItem", "full_name": "android.icu.text.LocaleDisplayNames.UiListItem"}, {"package_name": "android.os", "class_name": "LocaleList", "full_name": "android.os.LocaleList"}, {"package_name": "android.text.style", "class_name": "LocaleSpan", "full_name": "android.text.style.LocaleSpan"}, {"package_name": "android.net", "class_name": "LocalServerSocket", "full_name": "android.net.LocalServerSocket"}, {"package_name": "android.net", "class_name": "LocalSocket", "full_name": "android.net.LocalSocket"}, {"package_name": "android.net", "class_name": "LocalSocketAddress", "full_name": "android.net.LocalSocketAddress"}, {"package_name": "android.net", "class_name": "LocalSocketAddress.Namespace", "full_name": "android.net.LocalSocketAddress.Namespace"}, {"package_name": "java.time", "class_name": "LocalTime", "full_name": "java.time.LocalTime"}, {"package_name": "android.location", "class_name": "Location", "full_name": "android.location.Location"}, {"package_name": "android.location", "class_name": "LocationListener", "full_name": "android.location.LocationListener"}, {"package_name": "android.location", "class_name": "LocationManager", "full_name": "android.location.LocationManager"}, {"package_name": "android.location", "class_name": "LocationProvider", "full_name": "android.location.LocationProvider"}, {"package_name": "org.xml.sax", "class_name": "Locator", "full_name": "org.xml.sax.Locator"}, {"package_name": "org.xml.sax.helpers", "class_name": "LocatorImpl", "full_name": "org.xml.sax.helpers.LocatorImpl"}, {"package_name": "java.util.concurrent.locks", "class_name": "Lock", "full_name": "java.util.concurrent.locks.Lock"}, {"package_name": "java.util.concurrent.locks", "class_name": "LockSupport", "full_name": "java.util.concurrent.locks.LockSupport"}, {"package_name": "android.util", "class_name": "Log", "full_name": "android.util.Log"}, {"package_name": "java.util.logging", "class_name": "Logger", "full_name": "java.util.logging.Logger"}, {"package_name": "java.util.logging", "class_name": "LoggingMXBean", "full_name": "java.util.logging.LoggingMXBean"}, {"package_name": "java.util.logging", "class_name": "LoggingPermission", "full_name": "java.util.logging.LoggingPermission"}, {"package_name": "javax.security.auth.login", "class_name": "LoginException", "full_name": "javax.security.auth.login.LoginException"}, {"package_name": "android.text", "class_name": "LoginFilter", "full_name": "android.text.LoginFilter"}, {"package_name": "android.text", "class_name": "LoginFilter.PasswordFilterGMail", "full_name": "android.text.LoginFilter.PasswordFilterGMail"}, {"package_name": "android.text", "class_name": "LoginFilter.UsernameFilterGeneric", "full_name": "android.text.LoginFilter.UsernameFilterGeneric"}, {"package_name": "android.text", "class_name": "LoginFilter.UsernameFilterGMail", "full_name": "android.text.LoginFilter.UsernameFilterGMail"}, {"package_name": "java.util.logging", "class_name": "LogManager", "full_name": "java.util.logging.LogManager"}, {"package_name": "android.util", "class_name": "LogPrinter", "full_name": "android.util.LogPrinter"}, {"package_name": "java.util.logging", "class_name": "LogRecord", "full_name": "java.util.logging.LogRecord"}, {"package_name": "java.lang", "class_name": "Long", "full_name": "java.lang.Long"}, {"package_name": "java.util.concurrent.atomic", "class_name": "LongAccumulator", "full_name": "java.util.concurrent.atomic.LongAccumulator"}, {"package_name": "java.util.concurrent.atomic", "class_name": "LongAdder", "full_name": "java.util.concurrent.atomic.LongAdder"}, {"package_name": "java.util.function", "class_name": "LongBinaryOperator", "full_name": "java.util.function.LongBinaryOperator"}, {"package_name": "java.nio", "class_name": "LongBuffer", "full_name": "java.nio.LongBuffer"}, {"package_name": "java.util.function", "class_name": "LongConsumer", "full_name": "java.util.function.LongConsumer"}, {"package_name": "java.util.function", "class_name": "LongPredicate", "full_name": "java.util.function.LongPredicate"}, {"package_name": "java.util.stream", "class_name": "LongStream", "full_name": "java.util.stream.LongStream"}, {"package_name": "java.util.stream", "class_name": "LongStream.Builder", "full_name": "java.util.stream.LongStream.Builder"}, {"package_name": "java.util", "class_name": "LongSummaryStatistics", "full_name": "java.util.LongSummaryStatistics"}, {"package_name": "java.util.function", "class_name": "LongSupplier", "full_name": "java.util.function.LongSupplier"}, {"package_name": "java.util.function", "class_name": "LongToDoubleFunction", "full_name": "java.util.function.LongToDoubleFunction"}, {"package_name": "java.util.function", "class_name": "LongToIntFunction", "full_name": "java.util.function.LongToIntFunction"}, {"package_name": "java.util.function", "class_name": "LongUnaryOperator", "full_name": "java.util.function.LongUnaryOperator"}, {"package_name": "android.os", "class_name": "Looper", "full_name": "android.os.Looper"}, {"package_name": "android.media.audiofx", "class_name": "LoudnessEnhancer", "full_name": "android.media.audiofx.LoudnessEnhancer"}, {"package_name": "android.service.autofill", "class_name": "LuhnChecksumValidator", "full_name": "android.service.autofill.LuhnChecksumValidator"}, {"package_name": "javax.crypto", "class_name": "Mac", "full_name": "javax.crypto.Mac"}, {"package_name": "android.net", "class_name": "MacAddress", "full_name": "android.net.MacAddress"}, {"package_name": "javax.crypto", "class_name": "MacSpi", "full_name": "javax.crypto.MacSpi"}, {"package_name": "android.widget", "class_name": "Magnifier", "full_name": "android.widget.Magnifier"}, {"package_name": "android.net", "class_name": "MailTo", "full_name": "android.net.MailTo"}, {"package_name": "java.nio.charset", "class_name": "MalformedInputException", "full_name": "java.nio.charset.MalformedInputException"}, {"package_name": "android.util", "class_name": "MalformedJsonException", "full_name": "android.util.MalformedJsonException"}, {"package_name": "java.lang.reflect", "class_name": "MalformedParameterizedTypeException", "full_name": "java.lang.reflect.MalformedParameterizedTypeException"}, {"package_name": "java.lang.reflect", "class_name": "MalformedParametersException", "full_name": "java.lang.reflect.MalformedParametersException"}, {"package_name": "java.net", "class_name": "MalformedURLException", "full_name": "java.net.MalformedURLException"}, {"package_name": "javax.net.ssl", "class_name": "ManagerFactoryParameters", "full_name": "javax.net.ssl.ManagerFactoryParameters"}, {"package_name": "android", "class_name": "Manifest", "full_name": "android.Manifest"}, {"package_name": "java.util.jar", "class_name": "Manifest", "full_name": "java.util.jar.Manifest"}, {"package_name": "android", "class_name": "Manifest.permission", "full_name": "android.Manifest.permission"}, {"package_name": "android", "class_name": "Manifest.permission_group", "full_name": "android.Manifest.permission_group"}, {"package_name": "java.nio", "class_name": "MappedByteBuffer", "full_name": "java.nio.MappedByteBuffer"}, {"package_name": "android.graphics", "class_name": "MaskFilter", "full_name": "android.graphics.MaskFilter"}, {"package_name": "android.text.style", "class_name": "MaskFilterSpan", "full_name": "android.text.style.MaskFilterSpan"}, {"package_name": "java.util.regex", "class_name": "Matcher", "full_name": "java.util.regex.Matcher"}, {"package_name": "java.util.regex", "class_name": "MatchResult", "full_name": "java.util.regex.MatchResult"}, {"package_name": "java.lang", "class_name": "Math", "full_name": "java.lang.Math"}, {"package_name": "android.icu.math", "class_name": "MathContext", "full_name": "android.icu.math.MathContext"}, {"package_name": "java.math", "class_name": "MathContext", "full_name": "java.math.MathContext"}, {"package_name": "android.graphics", "class_name": "Matrix", "full_name": "android.graphics.Matrix"}, {"package_name": "android.opengl", "class_name": "Matrix", "full_name": "android.opengl.Matrix"}, {"package_name": "android.graphics", "class_name": "Matrix.ScaleToFit", "full_name": "android.graphics.Matrix.ScaleToFit"}, {"package_name": "android.database", "class_name": "MatrixCursor", "full_name": "android.database.MatrixCursor"}, {"package_name": "android.database", "class_name": "MatrixCursor.RowBuilder", "full_name": "android.database.MatrixCursor.RowBuilder"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsDownloadReceiver", "full_name": "android.telephony.mbms.MbmsDownloadReceiver"}, {"package_name": "android.telephony", "class_name": "MbmsDownloadSession", "full_name": "android.telephony.MbmsDownloadSession"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsDownloadSessionCallback", "full_name": "android.telephony.mbms.MbmsDownloadSessionCallback"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsErrors", "full_name": "android.telephony.mbms.MbmsErrors"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsErrors.DownloadErrors", "full_name": "android.telephony.mbms.MbmsErrors.DownloadErrors"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsErrors.GeneralErrors", "full_name": "android.telephony.mbms.MbmsErrors.GeneralErrors"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsErrors.InitializationErrors", "full_name": "android.telephony.mbms.MbmsErrors.InitializationErrors"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsErrors.StreamingErrors", "full_name": "android.telephony.mbms.MbmsErrors.StreamingErrors"}, {"package_name": "android.telephony", "class_name": "MbmsStreamingSession", "full_name": "android.telephony.MbmsStreamingSession"}, {"package_name": "android.telephony.mbms", "class_name": "MbmsStreamingSessionCallback", "full_name": "android.telephony.mbms.MbmsStreamingSessionCallback"}, {"package_name": "android.icu.util", "class_name": "Measure", "full_name": "android.icu.util.Measure"}, {"package_name": "android.icu.text", "class_name": "MeasureFormat", "full_name": "android.icu.text.MeasureFormat"}, {"package_name": "android.icu.text", "class_name": "MeasureFormat.FormatWidth", "full_name": "android.icu.text.MeasureFormat.FormatWidth"}, {"package_name": "android.icu.util", "class_name": "MeasureUnit", "full_name": "android.icu.util.MeasureUnit"}, {"package_name": "android.media", "class_name": "MediaActionSound", "full_name": "android.media.MediaActionSound"}, {"package_name": "android.media.browse", "class_name": "MediaBrowser", "full_name": "android.media.browse.MediaBrowser"}, {"package_name": "android.media.browse", "class_name": "MediaBrowser.ConnectionCallback", "full_name": "android.media.browse.MediaBrowser.ConnectionCallback"}, {"package_name": "android.media.browse", "class_name": "MediaBrowser.ItemCallback", "full_name": "android.media.browse.MediaBrowser.ItemCallback"}, {"package_name": "android.media.browse", "class_name": "MediaBrowser.MediaItem", "full_name": "android.media.browse.MediaBrowser.MediaItem"}, {"package_name": "android.media.browse", "class_name": "MediaBrowser.SubscriptionCallback", "full_name": "android.media.browse.MediaBrowser.SubscriptionCallback"}, {"package_name": "android.service.media", "class_name": "MediaBrowserService", "full_name": "android.service.media.MediaBrowserService"}, {"package_name": "android.service.media", "class_name": "MediaBrowserService.BrowserRoot", "full_name": "android.service.media.MediaBrowserService.BrowserRoot"}, {"package_name": "android.media", "class_name": "MediaCas", "full_name": "android.media.MediaCas"}, {"package_name": "android.media", "class_name": "MediaCas.EventListener", "full_name": "android.media.MediaCas.EventListener"}, {"package_name": "android.media", "class_name": "MediaCas.PluginDescriptor", "full_name": "android.media.MediaCas.PluginDescriptor"}, {"package_name": "android.media", "class_name": "MediaCas.Session", "full_name": "android.media.MediaCas.Session"}, {"package_name": "android.media", "class_name": "MediaCasException", "full_name": "android.media.MediaCasException"}, {"package_name": "android.media", "class_name": "MediaCasException.DeniedByServerException", "full_name": "android.media.MediaCasException.DeniedByServerException"}, {"package_name": "android.media", "class_name": "MediaCasException.NotProvisionedException", "full_name": "android.media.MediaCasException.NotProvisionedException"}, {"package_name": "android.media", "class_name": "MediaCasException.ResourceBusyException", "full_name": "android.media.MediaCasException.ResourceBusyException"}, {"package_name": "android.media", "class_name": "MediaCasException.UnsupportedCasException", "full_name": "android.media.MediaCasException.UnsupportedCasException"}, {"package_name": "android.media", "class_name": "MediaCasStateException", "full_name": "android.media.MediaCasStateException"}, {"package_name": "android.media", "class_name": "MediaCodec", "full_name": "android.media.MediaCodec"}, {"package_name": "android.media", "class_name": "MediaCodec.BufferInfo", "full_name": "android.media.MediaCodec.BufferInfo"}, {"package_name": "android.media", "class_name": "MediaCodec.Callback", "full_name": "android.media.MediaCodec.Callback"}, {"package_name": "android.media", "class_name": "MediaCodec.CodecException", "full_name": "android.media.MediaCodec.CodecException"}, {"package_name": "android.media", "class_name": "MediaCodec.CryptoException", "full_name": "android.media.MediaCodec.CryptoException"}, {"package_name": "android.media", "class_name": "MediaCodec.CryptoInfo", "full_name": "android.media.MediaCodec.CryptoInfo"}, {"package_name": "android.media", "class_name": "MediaCodec.CryptoInfo.Pattern", "full_name": "android.media.MediaCodec.CryptoInfo.Pattern"}, {"package_name": "android.media", "class_name": "MediaCodec.MetricsConstants", "full_name": "android.media.MediaCodec.MetricsConstants"}, {"package_name": "android.media", "class_name": "MediaCodec.OnFrameRenderedListener", "full_name": "android.media.MediaCodec.OnFrameRenderedListener"}, {"package_name": "android.media", "class_name": "MediaCodecInfo", "full_name": "android.media.MediaCodecInfo"}, {"package_name": "android.media", "class_name": "MediaCodecInfo.AudioCapabilities", "full_name": "android.media.MediaCodecInfo.AudioCapabilities"}, {"package_name": "android.media", "class_name": "MediaCodecInfo.CodecCapabilities", "full_name": "android.media.MediaCodecInfo.CodecCapabilities"}, {"package_name": "android.media", "class_name": "MediaCodecInfo.CodecProfileLevel", "full_name": "android.media.MediaCodecInfo.CodecProfileLevel"}, {"package_name": "android.media", "class_name": "MediaCodecInfo.EncoderCapabilities", "full_name": "android.media.MediaCodecInfo.EncoderCapabilities"}, {"package_name": "android.media", "class_name": "MediaCodecInfo.VideoCapabilities", "full_name": "android.media.MediaCodecInfo.VideoCapabilities"}, {"package_name": "android.media", "class_name": "MediaCodecList", "full_name": "android.media.MediaCodecList"}, {"package_name": "android.media.session", "class_name": "MediaController", "full_name": "android.media.session.MediaController"}, {"package_name": "android.widget", "class_name": "MediaController", "full_name": "android.widget.MediaController"}, {"package_name": "android.media.session", "class_name": "MediaController.Callback", "full_name": "android.media.session.MediaController.Callback"}, {"package_name": "android.widget", "class_name": "MediaController.MediaPlayerControl", "full_name": "android.widget.MediaController.MediaPlayerControl"}, {"package_name": "android.media.session", "class_name": "MediaController.PlaybackInfo", "full_name": "android.media.session.MediaController.PlaybackInfo"}, {"package_name": "android.media.session", "class_name": "MediaController.TransportControls", "full_name": "android.media.session.MediaController.TransportControls"}, {"package_name": "android.media", "class_name": "MediaCrypto", "full_name": "android.media.MediaCrypto"}, {"package_name": "android.media", "class_name": "MediaCryptoException", "full_name": "android.media.MediaCryptoException"}, {"package_name": "android.media", "class_name": "MediaDataSource", "full_name": "android.media.MediaDataSource"}, {"package_name": "android.media", "class_name": "MediaDescrambler", "full_name": "android.media.MediaDescrambler"}, {"package_name": "android.media", "class_name": "MediaDescription", "full_name": "android.media.MediaDescription"}, {"package_name": "android.media", "class_name": "MediaDescription.Builder", "full_name": "android.media.MediaDescription.Builder"}, {"package_name": "android.media", "class_name": "MediaDrm", "full_name": "android.media.MediaDrm"}, {"package_name": "android.media", "class_name": "MediaDrm.CryptoSession", "full_name": "android.media.MediaDrm.CryptoSession"}, {"package_name": "android.media", "class_name": "MediaDrm.HdcpLevel", "full_name": "android.media.MediaDrm.HdcpLevel"}, {"package_name": "android.media", "class_name": "MediaDrm.KeyRequest", "full_name": "android.media.MediaDrm.KeyRequest"}, {"package_name": "android.media", "class_name": "MediaDrm.KeyStatus", "full_name": "android.media.MediaDrm.KeyStatus"}, {"package_name": "android.media", "class_name": "MediaDrm.MediaDrmStateException", "full_name": "android.media.MediaDrm.MediaDrmStateException"}, {"package_name": "android.media", "class_name": "MediaDrm.MetricsConstants", "full_name": "android.media.MediaDrm.MetricsConstants"}, {"package_name": "android.media", "class_name": "MediaDrm.OnEventListener", "full_name": "android.media.MediaDrm.OnEventListener"}, {"package_name": "android.media", "class_name": "MediaDrm.OnExpirationUpdateListener", "full_name": "android.media.MediaDrm.OnExpirationUpdateListener"}, {"package_name": "android.media", "class_name": "MediaDrm.OnKeyStatusChangeListener", "full_name": "android.media.MediaDrm.OnKeyStatusChangeListener"}, {"package_name": "android.media", "class_name": "MediaDrm.ProvisionRequest", "full_name": "android.media.MediaDrm.ProvisionRequest"}, {"package_name": "android.media", "class_name": "MediaDrm.SecurityLevel", "full_name": "android.media.MediaDrm.SecurityLevel"}, {"package_name": "android.media", "class_name": "MediaDrmException", "full_name": "android.media.MediaDrmException"}, {"package_name": "android.media", "class_name": "MediaDrmResetException", "full_name": "android.media.MediaDrmResetException"}, {"package_name": "android.media", "class_name": "MediaExtractor", "full_name": "android.media.MediaExtractor"}, {"package_name": "android.media", "class_name": "MediaExtractor.CasInfo", "full_name": "android.media.MediaExtractor.CasInfo"}, {"package_name": "android.media", "class_name": "MediaExtractor.MetricsConstants", "full_name": "android.media.MediaExtractor.MetricsConstants"}, {"package_name": "android.media", "class_name": "MediaFormat", "full_name": "android.media.MediaFormat"}, {"package_name": "android.media", "class_name": "MediaMetadata", "full_name": "android.media.MediaMetadata"}, {"package_name": "android.media", "class_name": "MediaMetadata.Builder", "full_name": "android.media.MediaMetadata.Builder"}, {"package_name": "android.media", "class_name": "MediaMetadataEditor", "full_name": "android.media.MediaMetadataEditor"}, {"package_name": "android.media", "class_name": "MediaMetadataRetriever", "full_name": "android.media.MediaMetadataRetriever"}, {"package_name": "android.media", "class_name": "MediaMetadataRetriever.BitmapParams", "full_name": "android.media.MediaMetadataRetriever.BitmapParams"}, {"package_name": "android.media", "class_name": "MediaMuxer", "full_name": "android.media.MediaMuxer"}, {"package_name": "android.media", "class_name": "MediaMuxer.OutputFormat", "full_name": "android.media.MediaMuxer.OutputFormat"}, {"package_name": "android.media", "class_name": "MediaPlayer", "full_name": "android.media.MediaPlayer"}, {"package_name": "android.media", "class_name": "MediaPlayer.DrmInfo", "full_name": "android.media.MediaPlayer.DrmInfo"}, {"package_name": "android.media", "class_name": "MediaPlayer.MetricsConstants", "full_name": "android.media.MediaPlayer.MetricsConstants"}, {"package_name": "android.media", "class_name": "MediaPlayer.NoDrmSchemeException", "full_name": "android.media.MediaPlayer.NoDrmSchemeException"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnBufferingUpdateListener", "full_name": "android.media.MediaPlayer.OnBufferingUpdateListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnCompletionListener", "full_name": "android.media.MediaPlayer.OnCompletionListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnDrmConfigHelper", "full_name": "android.media.MediaPlayer.OnDrmConfigHelper"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnDrmInfoListener", "full_name": "android.media.MediaPlayer.OnDrmInfoListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnDrmPreparedListener", "full_name": "android.media.MediaPlayer.OnDrmPreparedListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnErrorListener", "full_name": "android.media.MediaPlayer.OnErrorListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnInfoListener", "full_name": "android.media.MediaPlayer.OnInfoListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnMediaTimeDiscontinuityListener", "full_name": "android.media.MediaPlayer.OnMediaTimeDiscontinuityListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnPreparedListener", "full_name": "android.media.MediaPlayer.OnPreparedListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnSeekCompleteListener", "full_name": "android.media.MediaPlayer.OnSeekCompleteListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnSubtitleDataListener", "full_name": "android.media.MediaPlayer.OnSubtitleDataListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnTimedMetaDataAvailableListener", "full_name": "android.media.MediaPlayer.OnTimedMetaDataAvailableListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnTimedTextListener", "full_name": "android.media.MediaPlayer.OnTimedTextListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.OnVideoSizeChangedListener", "full_name": "android.media.MediaPlayer.OnVideoSizeChangedListener"}, {"package_name": "android.media", "class_name": "MediaPlayer.ProvisioningNetworkErrorException", "full_name": "android.media.MediaPlayer.ProvisioningNetworkErrorException"}, {"package_name": "android.media", "class_name": "MediaPlayer.ProvisioningServerErrorException", "full_name": "android.media.MediaPlayer.ProvisioningServerErrorException"}, {"package_name": "android.media", "class_name": "MediaPlayer.TrackInfo", "full_name": "android.media.MediaPlayer.TrackInfo"}, {"package_name": "android.media.projection", "class_name": "MediaProjection", "full_name": "android.media.projection.MediaProjection"}, {"package_name": "android.media.projection", "class_name": "MediaProjection.Callback", "full_name": "android.media.projection.MediaProjection.Callback"}, {"package_name": "android.media.projection", "class_name": "MediaProjectionManager", "full_name": "android.media.projection.MediaProjectionManager"}, {"package_name": "android.media", "class_name": "MediaRecorder", "full_name": "android.media.MediaRecorder"}, {"package_name": "android.media", "class_name": "MediaRecorder.AudioEncoder", "full_name": "android.media.MediaRecorder.AudioEncoder"}, {"package_name": "android.media", "class_name": "MediaRecorder.AudioSource", "full_name": "android.media.MediaRecorder.AudioSource"}, {"package_name": "android.media", "class_name": "MediaRecorder.MetricsConstants", "full_name": "android.media.MediaRecorder.MetricsConstants"}, {"package_name": "android.media", "class_name": "MediaRecorder.OnErrorListener", "full_name": "android.media.MediaRecorder.OnErrorListener"}, {"package_name": "android.media", "class_name": "MediaRecorder.OnInfoListener", "full_name": "android.media.MediaRecorder.OnInfoListener"}, {"package_name": "android.media", "class_name": "MediaRecorder.OutputFormat", "full_name": "android.media.MediaRecorder.OutputFormat"}, {"package_name": "android.media", "class_name": "MediaRecorder.VideoEncoder", "full_name": "android.media.MediaRecorder.VideoEncoder"}, {"package_name": "android.media", "class_name": "MediaRecorder.VideoSource", "full_name": "android.media.MediaRecorder.VideoSource"}, {"package_name": "android.app", "class_name": "MediaRouteActionProvider", "full_name": "android.app.MediaRouteActionProvider"}, {"package_name": "android.app", "class_name": "MediaRouteButton", "full_name": "android.app.MediaRouteButton"}, {"package_name": "android.media", "class_name": "MediaRouter", "full_name": "android.media.MediaRouter"}, {"package_name": "android.media", "class_name": "MediaRouter.Callback", "full_name": "android.media.MediaRouter.Callback"}, {"package_name": "android.media", "class_name": "MediaRouter.RouteCategory", "full_name": "android.media.MediaRouter.RouteCategory"}, {"package_name": "android.media", "class_name": "MediaRouter.RouteGroup", "full_name": "android.media.MediaRouter.RouteGroup"}, {"package_name": "android.media", "class_name": "MediaRouter.RouteInfo", "full_name": "android.media.MediaRouter.RouteInfo"}, {"package_name": "android.media", "class_name": "MediaRouter.SimpleCallback", "full_name": "android.media.MediaRouter.SimpleCallback"}, {"package_name": "android.media", "class_name": "MediaRouter.UserRouteInfo", "full_name": "android.media.MediaRouter.UserRouteInfo"}, {"package_name": "android.media", "class_name": "MediaRouter.VolumeCallback", "full_name": "android.media.MediaRouter.VolumeCallback"}, {"package_name": "android.media", "class_name": "MediaScannerConnection", "full_name": "android.media.MediaScannerConnection"}, {"package_name": "android.media", "class_name": "MediaScannerConnection.MediaScannerConnectionClient", "full_name": "android.media.MediaScannerConnection.MediaScannerConnectionClient"}, {"package_name": "android.media", "class_name": "MediaScannerConnection.OnScanCompletedListener", "full_name": "android.media.MediaScannerConnection.OnScanCompletedListener"}, {"package_name": "android.media.session", "class_name": "MediaSession", "full_name": "android.media.session.MediaSession"}, {"package_name": "android.media.session", "class_name": "MediaSession.Callback", "full_name": "android.media.session.MediaSession.Callback"}, {"package_name": "android.media.session", "class_name": "MediaSession.QueueItem", "full_name": "android.media.session.MediaSession.QueueItem"}, {"package_name": "android.media.session", "class_name": "MediaSession.Token", "full_name": "android.media.session.MediaSession.Token"}, {"package_name": "android.media.session", "class_name": "MediaSessionManager", "full_name": "android.media.session.MediaSessionManager"}, {"package_name": "android.media.session", "class_name": "MediaSessionManager.OnActiveSessionsChangedListener", "full_name": "android.media.session.MediaSessionManager.OnActiveSessionsChangedListener"}, {"package_name": "android.media.session", "class_name": "MediaSessionManager.RemoteUserInfo", "full_name": "android.media.session.MediaSessionManager.RemoteUserInfo"}, {"package_name": "android.provider", "class_name": "MediaStore", "full_name": "android.provider.MediaStore"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio", "full_name": "android.provider.MediaStore.Audio"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.AlbumColumns", "full_name": "android.provider.MediaStore.Audio.AlbumColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Albums", "full_name": "android.provider.MediaStore.Audio.Albums"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.ArtistColumns", "full_name": "android.provider.MediaStore.Audio.ArtistColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Artists", "full_name": "android.provider.MediaStore.Audio.Artists"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Artists.Albums", "full_name": "android.provider.MediaStore.Audio.Artists.Albums"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.AudioColumns", "full_name": "android.provider.MediaStore.Audio.AudioColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Genres", "full_name": "android.provider.MediaStore.Audio.Genres"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Genres.Members", "full_name": "android.provider.MediaStore.Audio.Genres.Members"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.GenresColumns", "full_name": "android.provider.MediaStore.Audio.GenresColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Media", "full_name": "android.provider.MediaStore.Audio.Media"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Playlists", "full_name": "android.provider.MediaStore.Audio.Playlists"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Playlists.Members", "full_name": "android.provider.MediaStore.Audio.Playlists.Members"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.PlaylistsColumns", "full_name": "android.provider.MediaStore.Audio.PlaylistsColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Audio.Radio", "full_name": "android.provider.MediaStore.Audio.Radio"}, {"package_name": "android.provider", "class_name": "MediaStore.Files", "full_name": "android.provider.MediaStore.Files"}, {"package_name": "android.provider", "class_name": "MediaStore.Files.FileColumns", "full_name": "android.provider.MediaStore.Files.FileColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Images", "full_name": "android.provider.MediaStore.Images"}, {"package_name": "android.provider", "class_name": "MediaStore.Images.ImageColumns", "full_name": "android.provider.MediaStore.Images.ImageColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Images.Media", "full_name": "android.provider.MediaStore.Images.Media"}, {"package_name": "android.provider", "class_name": "MediaStore.Images.Thumbnails", "full_name": "android.provider.MediaStore.Images.Thumbnails"}, {"package_name": "android.provider", "class_name": "MediaStore.MediaColumns", "full_name": "android.provider.MediaStore.MediaColumns"}, {"package_name": "android.provider", "class_name": "MediaStore.Video", "full_name": "android.provider.MediaStore.Video"}, {"package_name": "android.provider", "class_name": "MediaStore.Video.Media", "full_name": "android.provider.MediaStore.Video.Media"}, {"package_name": "android.provider", "class_name": "MediaStore.Video.Thumbnails", "full_name": "android.provider.MediaStore.Video.Thumbnails"}, {"package_name": "android.provider", "class_name": "MediaStore.Video.VideoColumns", "full_name": "android.provider.MediaStore.Video.VideoColumns"}, {"package_name": "android.media", "class_name": "MediaSync", "full_name": "android.media.MediaSync"}, {"package_name": "android.media", "class_name": "MediaSync.Callback", "full_name": "android.media.MediaSync.Callback"}, {"package_name": "android.media", "class_name": "MediaSync.OnErrorListener", "full_name": "android.media.MediaSync.OnErrorListener"}, {"package_name": "android.media", "class_name": "MediaSyncEvent", "full_name": "android.media.MediaSyncEvent"}, {"package_name": "android.media", "class_name": "MediaTimestamp", "full_name": "android.media.MediaTimestamp"}, {"package_name": "android.test.suitebuilder.annotation", "class_name": "MediumTest", "full_name": "android.test.suitebuilder.annotation.MediumTest"}, {"package_name": "java.lang.reflect", "class_name": "Member", "full_name": "java.lang.reflect.Member"}, {"package_name": "java.nio.channels", "class_name": "MembershipKey", "full_name": "java.nio.channels.MembershipKey"}, {"package_name": "android.os", "class_name": "MemoryFile", "full_name": "android.os.MemoryFile"}, {"package_name": "java.util.logging", "class_name": "MemoryHandler", "full_name": "java.util.logging.MemoryHandler"}, {"package_name": "android.view", "class_name": "Menu", "full_name": "android.view.Menu"}, {"package_name": "android.view", "class_name": "MenuInflater", "full_name": "android.view.MenuInflater"}, {"package_name": "android.view", "class_name": "MenuItem", "full_name": "android.view.MenuItem"}, {"package_name": "android.view", "class_name": "MenuItem.OnActionExpandListener", "full_name": "android.view.MenuItem.OnActionExpandListener"}, {"package_name": "android.view", "class_name": "MenuItem.OnMenuItemClickListener", "full_name": "android.view.MenuItem.OnMenuItemClickListener"}, {"package_name": "android.database", "class_name": "MergeCursor", "full_name": "android.database.MergeCursor"}, {"package_name": "android.os", "class_name": "Message", "full_name": "android.os.Message"}, {"package_name": "java.security", "class_name": "MessageDigest", "full_name": "java.security.MessageDigest"}, {"package_name": "java.security", "class_name": "MessageDigestSpi", "full_name": "java.security.MessageDigestSpi"}, {"package_name": "android.icu.text", "class_name": "MessageFormat", "full_name": "android.icu.text.MessageFormat"}, {"package_name": "java.text", "class_name": "MessageFormat", "full_name": "java.text.MessageFormat"}, {"package_name": "android.icu.text", "class_name": "MessageFormat.Field", "full_name": "android.icu.text.MessageFormat.Field"}, {"package_name": "java.text", "class_name": "MessageFormat.Field", "full_name": "java.text.MessageFormat.Field"}, {"package_name": "android.icu.text", "class_name": "MessagePattern", "full_name": "android.icu.text.MessagePattern"}, {"package_name": "android.icu.text", "class_name": "MessagePattern.ApostropheMode", "full_name": "android.icu.text.MessagePattern.ApostropheMode"}, {"package_name": "android.icu.text", "class_name": "MessagePattern.ArgType", "full_name": "android.icu.text.MessagePattern.ArgType"}, {"package_name": "android.icu.text", "class_name": "MessagePattern.Part", "full_name": "android.icu.text.MessagePattern.Part"}, {"package_name": "android.icu.text", "class_name": "MessagePattern.Part.Type", "full_name": "android.icu.text.MessagePattern.Part.Type"}, {"package_name": "android.service.carrier", "class_name": "MessagePdu", "full_name": "android.service.carrier.MessagePdu"}, {"package_name": "android.os", "class_name": "MessageQueue", "full_name": "android.os.MessageQueue"}, {"package_name": "android.os", "class_name": "MessageQueue.IdleHandler", "full_name": "android.os.MessageQueue.IdleHandler"}, {"package_name": "android.os", "class_name": "MessageQueue.OnFileDescriptorEventListener", "full_name": "android.os.MessageQueue.OnFileDescriptorEventListener"}, {"package_name": "android.os", "class_name": "Messenger", "full_name": "android.os.Messenger"}, {"package_name": "android.text.method", "class_name": "MetaKeyKeyListener", "full_name": "android.text.method.MetaKeyKeyListener"}, {"package_name": "java.lang.reflect", "class_name": "Method", "full_name": "java.lang.reflect.Method"}, {"package_name": "java.lang.invoke", "class_name": "MethodHandle", "full_name": "java.lang.invoke.MethodHandle"}, {"package_name": "java.lang.invoke", "class_name": "MethodHandleInfo", "full_name": "java.lang.invoke.MethodHandleInfo"}, {"package_name": "java.lang.invoke", "class_name": "MethodHandles", "full_name": "java.lang.invoke.MethodHandles"}, {"package_name": "java.lang.invoke", "class_name": "MethodHandles.Lookup", "full_name": "java.lang.invoke.MethodHandles.Lookup"}, {"package_name": "java.lang.invoke", "class_name": "MethodType", "full_name": "java.lang.invoke.MethodType"}, {"package_name": "android.text.style", "class_name": "MetricAffectingSpan", "full_name": "android.text.style.MetricAffectingSpan"}, {"package_name": "android.media", "class_name": "MicrophoneInfo", "full_name": "android.media.MicrophoneInfo"}, {"package_name": "android.media.midi", "class_name": "MidiDevice", "full_name": "android.media.midi.MidiDevice"}, {"package_name": "android.media.midi", "class_name": "MidiDevice.MidiConnection", "full_name": "android.media.midi.MidiDevice.MidiConnection"}, {"package_name": "android.media.midi", "class_name": "MidiDeviceInfo", "full_name": "android.media.midi.MidiDeviceInfo"}, {"package_name": "android.media.midi", "class_name": "MidiDeviceInfo.PortInfo", "full_name": "android.media.midi.MidiDeviceInfo.PortInfo"}, {"package_name": "android.media.midi", "class_name": "MidiDeviceService", "full_name": "android.media.midi.MidiDeviceService"}, {"package_name": "android.media.midi", "class_name": "MidiDeviceStatus", "full_name": "android.media.midi.MidiDeviceStatus"}, {"package_name": "android.media.midi", "class_name": "MidiInputPort", "full_name": "android.media.midi.MidiInputPort"}, {"package_name": "android.media.midi", "class_name": "MidiManager", "full_name": "android.media.midi.MidiManager"}, {"package_name": "android.media.midi", "class_name": "MidiManager.DeviceCallback", "full_name": "android.media.midi.MidiManager.DeviceCallback"}, {"package_name": "android.media.midi", "class_name": "MidiManager.OnDeviceOpenedListener", "full_name": "android.media.midi.MidiManager.OnDeviceOpenedListener"}, {"package_name": "android.media.midi", "class_name": "MidiOutputPort", "full_name": "android.media.midi.MidiOutputPort"}, {"package_name": "android.media.midi", "class_name": "MidiReceiver", "full_name": "android.media.midi.MidiReceiver"}, {"package_name": "android.media.midi", "class_name": "MidiSender", "full_name": "android.media.midi.MidiSender"}, {"package_name": "android.nfc.tech", "class_name": "MifareClassic", "full_name": "android.nfc.tech.MifareClassic"}, {"package_name": "android.nfc.tech", "class_name": "MifareUltralight", "full_name": "android.nfc.tech.MifareUltralight"}, {"package_name": "android.webkit", "class_name": "MimeTypeMap", "full_name": "android.webkit.MimeTypeMap"}, {"package_name": "java.time.chrono", "class_name": "MinguoChronology", "full_name": "java.time.chrono.MinguoChronology"}, {"package_name": "java.time.chrono", "class_name": "MinguoDate", "full_name": "java.time.chrono.MinguoDate"}, {"package_name": "java.time.chrono", "class_name": "MinguoEra", "full_name": "java.time.chrono.MinguoEra"}, {"package_name": "java.util", "class_name": "MissingFormatArgumentException", "full_name": "java.util.MissingFormatArgumentException"}, {"package_name": "java.util", "class_name": "MissingFormatWidthException", "full_name": "java.util.MissingFormatWidthException"}, {"package_name": "java.util", "class_name": "MissingResourceException", "full_name": "java.util.MissingResourceException"}, {"package_name": "android.test.mock", "class_name": "MockAccountManager", "full_name": "android.test.mock.MockAccountManager"}, {"package_name": "android.test.mock", "class_name": "MockApplication", "full_name": "android.test.mock.MockApplication"}, {"package_name": "android.test.mock", "class_name": "MockContentProvider", "full_name": "android.test.mock.MockContentProvider"}, {"package_name": "android.test.mock", "class_name": "MockContentResolver", "full_name": "android.test.mock.MockContentResolver"}, {"package_name": "android.test.mock", "class_name": "MockContext", "full_name": "android.test.mock.MockContext"}, {"package_name": "android.test.mock", "class_name": "MockCursor", "full_name": "android.test.mock.MockCursor"}, {"package_name": "android.test.mock", "class_name": "MockDialogInterface", "full_name": "android.test.mock.MockDialogInterface"}, {"package_name": "android.test.mock", "class_name": "MockPackageManager", "full_name": "android.test.mock.MockPackageManager"}, {"package_name": "android.test.mock", "class_name": "MockResources", "full_name": "android.test.mock.MockResources"}, {"package_name": "android.test.mock", "class_name": "MockService", "full_name": "android.test.mock.MockService"}, {"package_name": "java.lang.reflect", "class_name": "Modifier", "full_name": "java.lang.reflect.Modifier"}, {"package_name": "java.time", "class_name": "Month", "full_name": "java.time.Month"}, {"package_name": "java.time", "class_name": "MonthDay", "full_name": "java.time.MonthDay"}, {"package_name": "android.util", "class_name": "MonthDisplayHelper", "full_name": "android.util.MonthDisplayHelper"}, {"package_name": "android.test", "class_name": "MoreAsserts", "full_name": "android.test.MoreAsserts"}, {"package_name": "android.view", "class_name": "MotionEvent", "full_name": "android.view.MotionEvent"}, {"package_name": "android.view", "class_name": "MotionEvent.PointerCoords", "full_name": "android.view.MotionEvent.PointerCoords"}, {"package_name": "android.view", "class_name": "MotionEvent.PointerProperties", "full_name": "android.view.MotionEvent.PointerProperties"}, {"package_name": "android.text.method", "class_name": "MovementMethod", "full_name": "android.text.method.MovementMethod"}, {"package_name": "android.graphics", "class_name": "Movie", "full_name": "android.graphics.Movie"}, {"package_name": "android.mtp", "class_name": "MtpConstants", "full_name": "android.mtp.MtpConstants"}, {"package_name": "android.mtp", "class_name": "MtpDevice", "full_name": "android.mtp.MtpDevice"}, {"package_name": "android.mtp", "class_name": "MtpDeviceInfo", "full_name": "android.mtp.MtpDeviceInfo"}, {"package_name": "android.mtp", "class_name": "MtpEvent", "full_name": "android.mtp.MtpEvent"}, {"package_name": "android.mtp", "class_name": "MtpObjectInfo", "full_name": "android.mtp.MtpObjectInfo"}, {"package_name": "android.mtp", "class_name": "MtpObjectInfo.Builder", "full_name": "android.mtp.MtpObjectInfo.Builder"}, {"package_name": "android.mtp", "class_name": "MtpStorageInfo", "full_name": "android.mtp.MtpStorageInfo"}, {"package_name": "android.widget", "class_name": "MultiAutoCompleteTextView", "full_name": "android.widget.MultiAutoCompleteTextView"}, {"package_name": "android.widget", "class_name": "MultiAutoCompleteTextView.CommaTokenizer", "full_name": "android.widget.MultiAutoCompleteTextView.CommaTokenizer"}, {"package_name": "android.widget", "class_name": "MultiAutoCompleteTextView.Tokenizer", "full_name": "android.widget.MultiAutoCompleteTextView.Tokenizer"}, {"package_name": "java.nio.channels", "class_name": "MulticastChannel", "full_name": "java.nio.channels.MulticastChannel"}, {"package_name": "java.net", "class_name": "MulticastSocket", "full_name": "java.net.MulticastSocket"}, {"package_name": "android.preference", "class_name": "MultiSelectListPreference", "full_name": "android.preference.MultiSelectListPreference"}, {"package_name": "android.text.method", "class_name": "MultiTapKeyListener", "full_name": "android.text.method.MultiTapKeyListener"}, {"package_name": "android.util", "class_name": "MutableBoolean", "full_name": "android.util.MutableBoolean"}, {"package_name": "android.util", "class_name": "MutableByte", "full_name": "android.util.MutableByte"}, {"package_name": "java.lang.invoke", "class_name": "MutableCallSite", "full_name": "java.lang.invoke.MutableCallSite"}, {"package_name": "android.util", "class_name": "MutableChar", "full_name": "android.util.MutableChar"}, {"package_name": "android.content", "class_name": "MutableContextWrapper", "full_name": "android.content.MutableContextWrapper"}, {"package_name": "android.util", "class_name": "MutableDouble", "full_name": "android.util.MutableDouble"}, {"package_name": "android.util", "class_name": "MutableFloat", "full_name": "android.util.MutableFloat"}, {"package_name": "android.util", "class_name": "MutableInt", "full_name": "android.util.MutableInt"}, {"package_name": "android.util", "class_name": "MutableLong", "full_name": "android.util.MutableLong"}, {"package_name": "android.util", "class_name": "MutableShort", "full_name": "android.util.MutableShort"}, {"package_name": "javax.xml.namespace", "class_name": "NamespaceContext", "full_name": "javax.xml.namespace.NamespaceContext"}, {"package_name": "org.xml.sax.helpers", "class_name": "NamespaceSupport", "full_name": "org.xml.sax.helpers.NamespaceSupport"}, {"package_name": "java.lang.annotation", "class_name": "Native", "full_name": "java.lang.annotation.Native"}, {"package_name": "android.app", "class_name": "NativeActivity", "full_name": "android.app.NativeActivity"}, {"package_name": "java.sql", "class_name": "NClob", "full_name": "java.sql.NClob"}, {"package_name": "android.nfc.tech", "class_name": "Ndef", "full_name": "android.nfc.tech.Ndef"}, {"package_name": "android.nfc.tech", "class_name": "NdefFormatable", "full_name": "android.nfc.tech.NdefFormatable"}, {"package_name": "android.nfc", "class_name": "NdefMessage", "full_name": "android.nfc.NdefMessage"}, {"package_name": "android.nfc", "class_name": "NdefRecord", "full_name": "android.nfc.NdefRecord"}, {"package_name": "java.lang", "class_name": "NegativeArraySizeException", "full_name": "java.lang.NegativeArraySizeException"}, {"package_name": "android.telephony", "class_name": "NeighboringCellInfo", "full_name": "android.telephony.NeighboringCellInfo"}, {"package_name": "java.net", "class_name": "NetPermission", "full_name": "java.net.NetPermission"}, {"package_name": "android.net", "class_name": "Network", "full_name": "android.net.Network"}, {"package_name": "android.net", "class_name": "NetworkCapabilities", "full_name": "android.net.NetworkCapabilities"}, {"package_name": "java.nio.channels", "class_name": "NetworkChannel", "full_name": "java.nio.channels.NetworkChannel"}, {"package_name": "android.accounts", "class_name": "NetworkErrorException", "full_name": "android.accounts.NetworkErrorException"}, {"package_name": "android.app.admin", "class_name": "NetworkEvent", "full_name": "android.app.admin.NetworkEvent"}, {"package_name": "android.net", "class_name": "NetworkInfo", "full_name": "android.net.NetworkInfo"}, {"package_name": "android.net", "class_name": "NetworkInfo.DetailedState", "full_name": "android.net.NetworkInfo.DetailedState"}, {"package_name": "android.net", "class_name": "NetworkInfo.State", "full_name": "android.net.NetworkInfo.State"}, {"package_name": "java.net", "class_name": "NetworkInterface", "full_name": "java.net.NetworkInterface"}, {"package_name": "android.os", "class_name": "NetworkOnMainThreadException", "full_name": "android.os.NetworkOnMainThreadException"}, {"package_name": "android.net", "class_name": "NetworkRequest", "full_name": "android.net.NetworkRequest"}, {"package_name": "android.net", "class_name": "NetworkRequest.Builder", "full_name": "android.net.NetworkRequest.Builder"}, {"package_name": "android.telephony", "class_name": "NetworkScan", "full_name": "android.telephony.NetworkScan"}, {"package_name": "android.telephony", "class_name": "NetworkScanRequest", "full_name": "android.telephony.NetworkScanRequest"}, {"package_name": "android.security", "class_name": "NetworkSecurityPolicy", "full_name": "android.security.NetworkSecurityPolicy"}, {"package_name": "android.net", "class_name": "NetworkSpecifier", "full_name": "android.net.NetworkSpecifier"}, {"package_name": "android.app.usage", "class_name": "NetworkStats", "full_name": "android.app.usage.NetworkStats"}, {"package_name": "android.app.usage", "class_name": "NetworkStats.Bucket", "full_name": "android.app.usage.NetworkStats.Bucket"}, {"package_name": "android.app.usage", "class_name": "NetworkStatsManager", "full_name": "android.app.usage.NetworkStatsManager"}, {"package_name": "android.app.usage", "class_name": "NetworkStatsManager.UsageCallback", "full_name": "android.app.usage.NetworkStatsManager.UsageCallback"}, {"package_name": "android.os.strictmode", "class_name": "NetworkViolation", "full_name": "android.os.strictmode.NetworkViolation"}, {"package_name": "android.nfc.tech", "class_name": "NfcA", "full_name": "android.nfc.tech.NfcA"}, {"package_name": "android.nfc", "class_name": "NfcAdapter", "full_name": "android.nfc.NfcAdapter"}, {"package_name": "android.nfc", "class_name": "NfcAdapter.CreateBeamUrisCallback", "full_name": "android.nfc.NfcAdapter.CreateBeamUrisCallback"}, {"package_name": "android.nfc", "class_name": "NfcAdapter.CreateNdefMessageCallback", "full_name": "android.nfc.NfcAdapter.CreateNdefMessageCallback"}, {"package_name": "android.nfc", "class_name": "NfcAdapter.OnNdefPushCompleteCallback", "full_name": "android.nfc.NfcAdapter.OnNdefPushCompleteCallback"}, {"package_name": "android.nfc", "class_name": "NfcAdapter.OnTagRemovedListener", "full_name": "android.nfc.NfcAdapter.OnTagRemovedListener"}, {"package_name": "android.nfc", "class_name": "NfcAdapter.ReaderCallback", "full_name": "android.nfc.NfcAdapter.ReaderCallback"}, {"package_name": "android.nfc.tech", "class_name": "NfcB", "full_name": "android.nfc.tech.NfcB"}, {"package_name": "android.nfc.tech", "class_name": "NfcBarcode", "full_name": "android.nfc.tech.NfcBarcode"}, {"package_name": "android.nfc", "class_name": "NfcEvent", "full_name": "android.nfc.NfcEvent"}, {"package_name": "android.nfc.tech", "class_name": "NfcF", "full_name": "android.nfc.tech.NfcF"}, {"package_name": "android.nfc.cardemulation", "class_name": "NfcFCardEmulation", "full_name": "android.nfc.cardemulation.NfcFCardEmulation"}, {"package_name": "android.nfc", "class_name": "NfcManager", "full_name": "android.nfc.NfcManager"}, {"package_name": "android.nfc.tech", "class_name": "NfcV", "full_name": "android.nfc.tech.NfcV"}, {"package_name": "android.graphics", "class_name": "NinePatch", "full_name": "android.graphics.NinePatch"}, {"package_name": "android.graphics.drawable", "class_name": "NinePatchDrawable", "full_name": "android.graphics.drawable.NinePatchDrawable"}, {"package_name": "java.lang", "class_name": "NoClassDefFoundError", "full_name": "java.lang.NoClassDefFoundError"}, {"package_name": "java.nio.channels", "class_name": "NoConnectionPendingException", "full_name": "java.nio.channels.NoConnectionPendingException"}, {"package_name": "android.text", "class_name": "NoCopySpan", "full_name": "android.text.NoCopySpan"}, {"package_name": "android.text", "class_name": "NoCopySpan.Concrete", "full_name": "android.text.NoCopySpan.Concrete"}, {"package_name": "java.util.prefs", "class_name": "NodeChangeEvent", "full_name": "java.util.prefs.NodeChangeEvent"}, {"package_name": "java.util.prefs", "class_name": "NodeChangeListener", "full_name": "java.util.prefs.NodeChangeListener"}, {"package_name": "android.media.audiofx", "class_name": "NoiseSuppressor", "full_name": "android.media.audiofx.NoiseSuppressor"}, {"package_name": "java.nio.channels", "class_name": "NonReadableChannelException", "full_name": "java.nio.channels.NonReadableChannelException"}, {"package_name": "android.os.strictmode", "class_name": "NonSdkApiUsedViolation", "full_name": "android.os.strictmode.NonSdkApiUsedViolation"}, {"package_name": "java.nio.channels", "class_name": "NonWritableChannelException", "full_name": "java.nio.channels.NonWritableChannelException"}, {"package_name": "android.icu.text", "class_name": "Normalizer", "full_name": "android.icu.text.Normalizer"}, {"package_name": "java.text", "class_name": "Normalizer", "full_name": "java.text.Normalizer"}, {"package_name": "java.text", "class_name": "Normalizer.Form", "full_name": "java.text.Normalizer.Form"}, {"package_name": "android.icu.text", "class_name": "Normalizer.QuickCheckResult", "full_name": "android.icu.text.Normalizer.QuickCheckResult"}, {"package_name": "java.net", "class_name": "NoRouteToHostException", "full_name": "java.net.NoRouteToHostException"}, {"package_name": "java.security", "class_name": "NoSuchAlgorithmException", "full_name": "java.security.NoSuchAlgorithmException"}, {"package_name": "java.util", "class_name": "NoSuchElementException", "full_name": "java.util.NoSuchElementException"}, {"package_name": "java.lang", "class_name": "NoSuchFieldError", "full_name": "java.lang.NoSuchFieldError"}, {"package_name": "java.lang", "class_name": "NoSuchFieldException", "full_name": "java.lang.NoSuchFieldException"}, {"package_name": "java.nio.file", "class_name": "NoSuchFileException", "full_name": "java.nio.file.NoSuchFileException"}, {"package_name": "java.lang", "class_name": "NoSuchMethodError", "full_name": "java.lang.NoSuchMethodError"}, {"package_name": "java.lang", "class_name": "NoSuchMethodException", "full_name": "java.lang.NoSuchMethodException"}, {"package_name": "javax.crypto", "class_name": "NoSuchPaddingException", "full_name": "javax.crypto.NoSuchPaddingException"}, {"package_name": "android.util", "class_name": "NoSuchPropertyException", "full_name": "android.util.NoSuchPropertyException"}, {"package_name": "java.security", "class_name": "NoSuchProviderException", "full_name": "java.security.NoSuchProviderException"}, {"package_name": "java.io", "class_name": "NotActiveException", "full_name": "java.io.NotActiveException"}, {"package_name": "java.nio.file", "class_name": "NotDirectoryException", "full_name": "java.nio.file.NotDirectoryException"}, {"package_name": "android.app", "class_name": "Notification", "full_name": "android.app.Notification"}, {"package_name": "android.app", "class_name": "Notification.Action", "full_name": "android.app.Notification.Action"}, {"package_name": "android.app", "class_name": "Notification.Action.Builder", "full_name": "android.app.Notification.Action.Builder"}, {"package_name": "android.app", "class_name": "Notification.Action.Extender", "full_name": "android.app.Notification.Action.Extender"}, {"package_name": "android.app", "class_name": "Notification.Action.WearableExtender", "full_name": "android.app.Notification.Action.WearableExtender"}, {"package_name": "android.app", "class_name": "Notification.BigPictureStyle", "full_name": "android.app.Notification.BigPictureStyle"}, {"package_name": "android.app", "class_name": "Notification.BigTextStyle", "full_name": "android.app.Notification.BigTextStyle"}, {"package_name": "android.app", "class_name": "Notification.Builder", "full_name": "android.app.Notification.Builder"}, {"package_name": "android.app", "class_name": "Notification.CarExtender", "full_name": "android.app.Notification.CarExtender"}, {"package_name": "android.app", "class_name": "Notification.CarExtender.Builder", "full_name": "android.app.Notification.CarExtender.Builder"}, {"package_name": "android.app", "class_name": "Notification.CarExtender.UnreadConversation", "full_name": "android.app.Notification.CarExtender.UnreadConversation"}, {"package_name": "android.app", "class_name": "Notification.DecoratedCustomViewStyle", "full_name": "android.app.Notification.DecoratedCustomViewStyle"}, {"package_name": "android.app", "class_name": "Notification.DecoratedMediaCustomViewStyle", "full_name": "android.app.Notification.DecoratedMediaCustomViewStyle"}, {"package_name": "android.app", "class_name": "Notification.Extender", "full_name": "android.app.Notification.Extender"}, {"package_name": "android.app", "class_name": "Notification.InboxStyle", "full_name": "android.app.Notification.InboxStyle"}, {"package_name": "android.app", "class_name": "Notification.MediaStyle", "full_name": "android.app.Notification.MediaStyle"}, {"package_name": "android.app", "class_name": "Notification.MessagingStyle", "full_name": "android.app.Notification.MessagingStyle"}, {"package_name": "android.app", "class_name": "Notification.MessagingStyle.Message", "full_name": "android.app.Notification.MessagingStyle.Message"}, {"package_name": "android.app", "class_name": "Notification.Style", "full_name": "android.app.Notification.Style"}, {"package_name": "android.app", "class_name": "Notification.WearableExtender", "full_name": "android.app.Notification.WearableExtender"}, {"package_name": "android.app", "class_name": "NotificationChannel", "full_name": "android.app.NotificationChannel"}, {"package_name": "android.app", "class_name": "NotificationChannelGroup", "full_name": "android.app.NotificationChannelGroup"}, {"package_name": "android.service.notification", "class_name": "NotificationListenerService", "full_name": "android.service.notification.NotificationListenerService"}, {"package_name": "android.service.notification", "class_name": "NotificationListenerService.Ranking", "full_name": "android.service.notification.NotificationListenerService.Ranking"}, {"package_name": "android.service.notification", "class_name": "NotificationListenerService.RankingMap", "full_name": "android.service.notification.NotificationListenerService.RankingMap"}, {"package_name": "android.app", "class_name": "NotificationManager", "full_name": "android.app.NotificationManager"}, {"package_name": "android.app", "class_name": "NotificationManager.Policy", "full_name": "android.app.NotificationManager.Policy"}, {"package_name": "java.nio.file", "class_name": "NotLinkException", "full_name": "java.nio.file.NotLinkException"}, {"package_name": "java.security.acl", "class_name": "NotOwnerException", "full_name": "java.security.acl.NotOwnerException"}, {"package_name": "android.media", "class_name": "NotProvisionedException", "full_name": "android.media.NotProvisionedException"}, {"package_name": "java.io", "class_name": "NotSerializableException", "full_name": "java.io.NotSerializableException"}, {"package_name": "java.nio.channels", "class_name": "NotYetBoundException", "full_name": "java.nio.channels.NotYetBoundException"}, {"package_name": "java.nio.channels", "class_name": "NotYetConnectedException", "full_name": "java.nio.channels.NotYetConnectedException"}, {"package_name": "android.net.nsd", "class_name": "NsdManager", "full_name": "android.net.nsd.NsdManager"}, {"package_name": "android.net.nsd", "class_name": "NsdManager.DiscoveryListener", "full_name": "android.net.nsd.NsdManager.DiscoveryListener"}, {"package_name": "android.net.nsd", "class_name": "NsdManager.RegistrationListener", "full_name": "android.net.nsd.NsdManager.RegistrationListener"}, {"package_name": "android.net.nsd", "class_name": "NsdManager.ResolveListener", "full_name": "android.net.nsd.NsdManager.ResolveListener"}, {"package_name": "android.net.nsd", "class_name": "NsdServiceInfo", "full_name": "android.net.nsd.NsdServiceInfo"}, {"package_name": "javax.crypto", "class_name": "NullCipher", "full_name": "javax.crypto.NullCipher"}, {"package_name": "java.lang", "class_name": "NullPointerException", "full_name": "java.lang.NullPointerException"}, {"package_name": "java.lang", "class_name": "Number", "full_name": "java.lang.Number"}, {"package_name": "android.icu.text", "class_name": "NumberFormat", "full_name": "android.icu.text.NumberFormat"}, {"package_name": "java.text", "class_name": "NumberFormat", "full_name": "java.text.NumberFormat"}, {"package_name": "android.icu.text", "class_name": "NumberFormat.Field", "full_name": "android.icu.text.NumberFormat.Field"}, {"package_name": "java.text", "class_name": "NumberFormat.Field", "full_name": "java.text.NumberFormat.Field"}, {"package_name": "java.lang", "class_name": "NumberFormatException", "full_name": "java.lang.NumberFormatException"}, {"package_name": "android.icu.text", "class_name": "NumberingSystem", "full_name": "android.icu.text.NumberingSystem"}, {"package_name": "android.text.method", "class_name": "NumberKeyListener", "full_name": "android.text.method.NumberKeyListener"}, {"package_name": "android.widget", "class_name": "NumberPicker", "full_name": "android.widget.NumberPicker"}, {"package_name": "android.widget", "class_name": "NumberPicker.Formatter", "full_name": "android.widget.NumberPicker.Formatter"}, {"package_name": "android.widget", "class_name": "NumberPicker.OnScrollListener", "full_name": "android.widget.NumberPicker.OnScrollListener"}, {"package_name": "android.widget", "class_name": "NumberPicker.OnValueChangeListener", "full_name": "android.widget.NumberPicker.OnValueChangeListener"}, {"package_name": "java.awt.font", "class_name": "NumericShaper", "full_name": "java.awt.font.NumericShaper"}, {"package_name": "java.awt.font", "class_name": "NumericShaper.Range", "full_name": "java.awt.font.NumericShaper.Range"}, {"package_name": "javax.crypto.spec", "class_name": "OAEPParameterSpec", "full_name": "javax.crypto.spec.OAEPParameterSpec"}, {"package_name": "android.content.res", "class_name": "ObbInfo", "full_name": "android.content.res.ObbInfo"}, {"package_name": "android.content.res", "class_name": "ObbScanner", "full_name": "android.content.res.ObbScanner"}, {"package_name": "java.lang", "class_name": "Object", "full_name": "java.lang.Object"}, {"package_name": "android.animation", "class_name": "ObjectAnimator", "full_name": "android.animation.ObjectAnimator"}, {"package_name": "java.io", "class_name": "ObjectInput", "full_name": "java.io.ObjectInput"}, {"package_name": "java.io", "class_name": "ObjectInputStream", "full_name": "java.io.ObjectInputStream"}, {"package_name": "java.io", "class_name": "ObjectInputStream.GetField", "full_name": "java.io.ObjectInputStream.GetField"}, {"package_name": "java.io", "class_name": "ObjectInputValidation", "full_name": "java.io.ObjectInputValidation"}, {"package_name": "java.io", "class_name": "ObjectOutput", "full_name": "java.io.ObjectOutput"}, {"package_name": "java.io", "class_name": "ObjectOutputStream", "full_name": "java.io.ObjectOutputStream"}, {"package_name": "java.io", "class_name": "ObjectOutputStream.PutField", "full_name": "java.io.ObjectOutputStream.PutField"}, {"package_name": "java.util", "class_name": "Objects", "full_name": "java.util.Objects"}, {"package_name": "java.io", "class_name": "ObjectStreamClass", "full_name": "java.io.ObjectStreamClass"}, {"package_name": "java.io", "class_name": "ObjectStreamConstants", "full_name": "java.io.ObjectStreamConstants"}, {"package_name": "java.io", "class_name": "ObjectStreamException", "full_name": "java.io.ObjectStreamException"}, {"package_name": "java.io", "class_name": "ObjectStreamField", "full_name": "java.io.ObjectStreamField"}, {"package_name": "java.util", "class_name": "Observable", "full_name": "java.util.Observable"}, {"package_name": "java.util", "class_name": "Observer", "full_name": "java.util.Observer"}, {"package_name": "android.nfc.cardemulation", "class_name": "OffHostApduService", "full_name": "android.nfc.cardemulation.OffHostApduService"}, {"package_name": "java.time", "class_name": "OffsetDateTime", "full_name": "java.time.OffsetDateTime"}, {"package_name": "java.time", "class_name": "OffsetTime", "full_name": "java.time.OffsetTime"}, {"package_name": "android.accounts", "class_name": "OnAccountsUpdateListener", "full_name": "android.accounts.OnAccountsUpdateListener"}, {"package_name": "android.location", "class_name": "OnNmeaMessageListener", "full_name": "android.location.OnNmeaMessageListener"}, {"package_name": "android.os.storage", "class_name": "OnObbStateChangeListener", "full_name": "android.os.storage.OnObbStateChangeListener"}, {"package_name": "dalvik.bytecode", "class_name": "OpcodeInfo", "full_name": "dalvik.bytecode.OpcodeInfo"}, {"package_name": "dalvik.bytecode", "class_name": "Opcodes", "full_name": "dalvik.bytecode.Opcodes"}, {"package_name": "android.provider", "class_name": "OpenableColumns", "full_name": "android.provider.OpenableColumns"}, {"package_name": "java.nio.file", "class_name": "OpenOption", "full_name": "java.nio.file.OpenOption"}, {"package_name": "android.content", "class_name": "OperationApplicationException", "full_name": "android.content.OperationApplicationException"}, {"package_name": "android.accounts", "class_name": "OperationCanceledException", "full_name": "android.accounts.OperationCanceledException"}, {"package_name": "android.os", "class_name": "OperationCanceledException", "full_name": "android.os.OperationCanceledException"}, {"package_name": "java.io", "class_name": "OptionalDataException", "full_name": "java.io.OptionalDataException"}, {"package_name": "java.util", "class_name": "OptionalDouble", "full_name": "java.util.OptionalDouble"}, {"package_name": "java.util", "class_name": "OptionalInt", "full_name": "java.util.OptionalInt"}, {"package_name": "java.util", "class_name": "OptionalLong", "full_name": "java.util.OptionalLong"}, {"package_name": "android.view", "class_name": "OrientationEventListener", "full_name": "android.view.OrientationEventListener"}, {"package_name": "android.view", "class_name": "OrientationListener", "full_name": "android.view.OrientationListener"}, {"package_name": "android.gesture", "class_name": "OrientedBoundingBox", "full_name": "android.gesture.OrientedBoundingBox"}, {"package_name": "android.system", "class_name": "Os", "full_name": "android.system.Os"}, {"package_name": "android.system", "class_name": "OsConstants", "full_name": "android.system.OsConstants"}, {"package_name": "android.graphics", "class_name": "Outline", "full_name": "android.graphics.Outline"}, {"package_name": "java.lang", "class_name": "OutOfMemoryError", "full_name": "java.lang.OutOfMemoryError"}, {"package_name": "javax.xml.transform", "class_name": "OutputKeys", "full_name": "javax.xml.transform.OutputKeys"}, {"package_name": "java.io", "class_name": "OutputStream", "full_name": "java.io.OutputStream"}, {"package_name": "java.io", "class_name": "OutputStreamWriter", "full_name": "java.io.OutputStreamWriter"}, {"package_name": "android.graphics.drawable.shapes", "class_name": "OvalShape", "full_name": "android.graphics.drawable.shapes.OvalShape"}, {"package_name": "java.nio.channels", "class_name": "OverlappingFileLockException", "full_name": "java.nio.channels.OverlappingFileLockException"}, {"package_name": "java.lang", "class_name": "Override", "full_name": "java.lang.Override"}, {"package_name": "android.widget", "class_name": "OverScroller", "full_name": "android.widget.OverScroller"}, {"package_name": "android.view.animation", "class_name": "OvershootInterpolator", "full_name": "android.view.animation.OvershootInterpolator"}, {"package_name": "java.security.acl", "class_name": "Owner", "full_name": "java.security.acl.Owner"}, {"package_name": "java.lang", "class_name": "Package", "full_name": "java.lang.Package"}, {"package_name": "android.os.health", "class_name": "PackageHealthStats", "full_name": "android.os.health.PackageHealthStats"}, {"package_name": "android.content.pm", "class_name": "PackageInfo", "full_name": "android.content.pm.PackageInfo"}, {"package_name": "android.content.pm", "class_name": "PackageInstaller", "full_name": "android.content.pm.PackageInstaller"}, {"package_name": "android.content.pm", "class_name": "PackageInstaller.Session", "full_name": "android.content.pm.PackageInstaller.Session"}, {"package_name": "android.content.pm", "class_name": "PackageInstaller.SessionCallback", "full_name": "android.content.pm.PackageInstaller.SessionCallback"}, {"package_name": "android.content.pm", "class_name": "PackageInstaller.SessionInfo", "full_name": "android.content.pm.PackageInstaller.SessionInfo"}, {"package_name": "android.content.pm", "class_name": "PackageInstaller.SessionParams", "full_name": "android.content.pm.PackageInstaller.SessionParams"}, {"package_name": "android.content.pm", "class_name": "PackageItemInfo", "full_name": "android.content.pm.PackageItemInfo"}, {"package_name": "android.content.pm", "class_name": "PackageItemInfo.DisplayNameComparator", "full_name": "android.content.pm.PackageItemInfo.DisplayNameComparator"}, {"package_name": "android.content.pm", "class_name": "PackageManager", "full_name": "android.content.pm.PackageManager"}, {"package_name": "android.content.pm", "class_name": "PackageManager.NameNotFoundException", "full_name": "android.content.pm.PackageManager.NameNotFoundException"}, {"package_name": "android.content.pm", "class_name": "PackageStats", "full_name": "android.content.pm.PackageStats"}, {"package_name": "android.print", "class_name": "PageRange", "full_name": "android.print.PageRange"}, {"package_name": "android.graphics", "class_name": "Paint", "full_name": "android.graphics.Paint"}, {"package_name": "android.graphics", "class_name": "Paint.Align", "full_name": "android.graphics.Paint.Align"}, {"package_name": "android.graphics", "class_name": "Paint.Cap", "full_name": "android.graphics.Paint.Cap"}, {"package_name": "android.graphics", "class_name": "Paint.FontMetrics", "full_name": "android.graphics.Paint.FontMetrics"}, {"package_name": "android.graphics", "class_name": "Paint.FontMetricsInt", "full_name": "android.graphics.Paint.FontMetricsInt"}, {"package_name": "android.graphics", "class_name": "Paint.Join", "full_name": "android.graphics.Paint.Join"}, {"package_name": "android.graphics", "class_name": "Paint.Style", "full_name": "android.graphics.Paint.Style"}, {"package_name": "android.graphics.drawable", "class_name": "PaintDrawable", "full_name": "android.graphics.drawable.PaintDrawable"}, {"package_name": "android.graphics", "class_name": "PaintFlagsDrawFilter", "full_name": "android.graphics.PaintFlagsDrawFilter"}, {"package_name": "android.text.style", "class_name": "ParagraphStyle", "full_name": "android.text.style.ParagraphStyle"}, {"package_name": "java.lang.reflect", "class_name": "Parameter", "full_name": "java.lang.reflect.Parameter"}, {"package_name": "java.lang.reflect", "class_name": "ParameterizedType", "full_name": "java.lang.reflect.ParameterizedType"}, {"package_name": "java.sql", "class_name": "ParameterMetaData", "full_name": "java.sql.ParameterMetaData"}, {"package_name": "android.os", "class_name": "Parcel", "full_name": "android.os.Parcel"}, {"package_name": "android.os", "class_name": "Parcelable", "full_name": "android.os.Parcelable"}, {"package_name": "android.text", "class_name": "ParcelableSpan", "full_name": "android.text.ParcelableSpan"}, {"package_name": "android.os", "class_name": "ParcelFileDescriptor", "full_name": "android.os.ParcelFileDescriptor"}, {"package_name": "android.os", "class_name": "ParcelFileDescriptor.AutoCloseInputStream", "full_name": "android.os.ParcelFileDescriptor.AutoCloseInputStream"}, {"package_name": "android.os", "class_name": "ParcelFileDescriptor.AutoCloseOutputStream", "full_name": "android.os.ParcelFileDescriptor.AutoCloseOutputStream"}, {"package_name": "android.os", "class_name": "ParcelFileDescriptor.FileDescriptorDetachedException", "full_name": "android.os.ParcelFileDescriptor.FileDescriptorDetachedException"}, {"package_name": "android.os", "class_name": "ParcelFileDescriptor.OnCloseListener", "full_name": "android.os.ParcelFileDescriptor.OnCloseListener"}, {"package_name": "android.os", "class_name": "ParcelFormatException", "full_name": "android.os.ParcelFormatException"}, {"package_name": "android.os", "class_name": "ParcelUuid", "full_name": "android.os.ParcelUuid"}, {"package_name": "android.net", "class_name": "ParseException", "full_name": "android.net.ParseException"}, {"package_name": "java.text", "class_name": "ParseException", "full_name": "java.text.ParseException"}, {"package_name": "java.text", "class_name": "ParsePosition", "full_name": "java.text.ParsePosition"}, {"package_name": "org.xml.sax", "class_name": "Parser", "full_name": "org.xml.sax.Parser"}, {"package_name": "org.xml.sax.helpers", "class_name": "ParserAdapter", "full_name": "org.xml.sax.helpers.ParserAdapter"}, {"package_name": "javax.xml.parsers", "class_name": "ParserConfigurationException", "full_name": "javax.xml.parsers.ParserConfigurationException"}, {"package_name": "org.xml.sax.helpers", "class_name": "ParserFactory", "full_name": "org.xml.sax.helpers.ParserFactory"}, {"package_name": "java.net", "class_name": "PasswordAuthentication", "full_name": "java.net.PasswordAuthentication"}, {"package_name": "javax.security.auth.callback", "class_name": "PasswordCallback", "full_name": "javax.security.auth.callback.PasswordCallback"}, {"package_name": "android.text.method", "class_name": "PasswordTransformationMethod", "full_name": "android.text.method.PasswordTransformationMethod"}, {"package_name": "android.graphics", "class_name": "Path", "full_name": "android.graphics.Path"}, {"package_name": "java.nio.file", "class_name": "Path", "full_name": "java.nio.file.Path"}, {"package_name": "android.graphics", "class_name": "Path.Direction", "full_name": "android.graphics.Path.Direction"}, {"package_name": "android.graphics", "class_name": "Path.FillType", "full_name": "android.graphics.Path.FillType"}, {"package_name": "android.graphics", "class_name": "Path.Op", "full_name": "android.graphics.Path.Op"}, {"package_name": "dalvik.system", "class_name": "PathClassLoader", "full_name": "dalvik.system.PathClassLoader"}, {"package_name": "android.graphics", "class_name": "PathDashPathEffect", "full_name": "android.graphics.PathDashPathEffect"}, {"package_name": "android.graphics", "class_name": "PathDashPathEffect.Style", "full_name": "android.graphics.PathDashPathEffect.Style"}, {"package_name": "android.graphics", "class_name": "PathEffect", "full_name": "android.graphics.PathEffect"}, {"package_name": "android.view.animation", "class_name": "PathInterpolator", "full_name": "android.view.animation.PathInterpolator"}, {"package_name": "java.nio.file", "class_name": "PathMatcher", "full_name": "java.nio.file.PathMatcher"}, {"package_name": "android.graphics", "class_name": "PathMeasure", "full_name": "android.graphics.PathMeasure"}, {"package_name": "android.transition", "class_name": "PathMotion", "full_name": "android.transition.PathMotion"}, {"package_name": "android.content.pm", "class_name": "PathPermission", "full_name": "android.content.pm.PathPermission"}, {"package_name": "java.nio.file", "class_name": "Paths", "full_name": "java.nio.file.Paths"}, {"package_name": "android.graphics.drawable.shapes", "class_name": "PathShape", "full_name": "android.graphics.drawable.shapes.PathShape"}, {"package_name": "java.util.regex", "class_name": "Pattern", "full_name": "java.util.regex.Pattern"}, {"package_name": "android.os", "class_name": "PatternMatcher", "full_name": "android.os.PatternMatcher"}, {"package_name": "android.transition", "class_name": "PatternPathMotion", "full_name": "android.transition.PatternPathMotion"}, {"package_name": "android.util", "class_name": "Patterns", "full_name": "android.util.Patterns"}, {"package_name": "java.util.regex", "class_name": "PatternSyntaxException", "full_name": "java.util.regex.PatternSyntaxException"}, {"package_name": "javax.crypto.interfaces", "class_name": "PBEKey", "full_name": "javax.crypto.interfaces.PBEKey"}, {"package_name": "javax.crypto.spec", "class_name": "PBEKeySpec", "full_name": "javax.crypto.spec.PBEKeySpec"}, {"package_name": "javax.crypto.spec", "class_name": "PBEParameterSpec", "full_name": "javax.crypto.spec.PBEParameterSpec"}, {"package_name": "android.graphics.pdf", "class_name": "PdfDocument", "full_name": "android.graphics.pdf.PdfDocument"}, {"package_name": "android.graphics.pdf", "class_name": "PdfDocument.Page", "full_name": "android.graphics.pdf.PdfDocument.Page"}, {"package_name": "android.graphics.pdf", "class_name": "PdfDocument.PageInfo", "full_name": "android.graphics.pdf.PdfDocument.PageInfo"}, {"package_name": "android.graphics.pdf", "class_name": "PdfDocument.PageInfo.Builder", "full_name": "android.graphics.pdf.PdfDocument.PageInfo.Builder"}, {"package_name": "android.graphics.pdf", "class_name": "PdfRenderer", "full_name": "android.graphics.pdf.PdfRenderer"}, {"package_name": "android.graphics.pdf", "class_name": "PdfRenderer.Page", "full_name": "android.graphics.pdf.PdfRenderer.Page"}, {"package_name": "android.net.wifi.aware", "class_name": "PeerHandle", "full_name": "android.net.wifi.aware.PeerHandle"}, {"package_name": "android.app", "class_name": "PendingIntent", "full_name": "android.app.PendingIntent"}, {"package_name": "android.app", "class_name": "PendingIntent.CanceledException", "full_name": "android.app.PendingIntent.CanceledException"}, {"package_name": "android.app", "class_name": "PendingIntent.OnFinished", "full_name": "android.app.PendingIntent.OnFinished"}, {"package_name": "android.test", "class_name": "PerformanceTestCase", "full_name": "android.test.PerformanceTestCase"}, {"package_name": "android.test", "class_name": "PerformanceTestCase.Intermediates", "full_name": "android.test.PerformanceTestCase.Intermediates"}, {"package_name": "java.time", "class_name": "Period", "full_name": "java.time.Period"}, {"package_name": "android.bluetooth.le", "class_name": "PeriodicAdvertisingParameters", "full_name": "android.bluetooth.le.PeriodicAdvertisingParameters"}, {"package_name": "android.bluetooth.le", "class_name": "PeriodicAdvertisingParameters.Builder", "full_name": "android.bluetooth.le.PeriodicAdvertisingParameters.Builder"}, {"package_name": "android.content", "class_name": "PeriodicSync", "full_name": "android.content.PeriodicSync"}, {"package_name": "java.security", "class_name": "Permission", "full_name": "java.security.Permission"}, {"package_name": "java.security.acl", "class_name": "Permission", "full_name": "java.security.acl.Permission"}, {"package_name": "java.security", "class_name": "PermissionCollection", "full_name": "java.security.PermissionCollection"}, {"package_name": "android.content.pm", "class_name": "PermissionGroupInfo", "full_name": "android.content.pm.PermissionGroupInfo"}, {"package_name": "android.content.pm", "class_name": "PermissionInfo", "full_name": "android.content.pm.PermissionInfo"}, {"package_name": "android.webkit", "class_name": "PermissionRequest", "full_name": "android.webkit.PermissionRequest"}, {"package_name": "java.security", "class_name": "Permissions", "full_name": "java.security.Permissions"}, {"package_name": "android.os", "class_name": "PersistableBundle", "full_name": "android.os.PersistableBundle"}, {"package_name": "android.app", "class_name": "Person", "full_name": "android.app.Person"}, {"package_name": "android.app", "class_name": "Person.Builder", "full_name": "android.app.Person.Builder"}, {"package_name": "java.util.concurrent", "class_name": "Phaser", "full_name": "java.util.concurrent.Phaser"}, {"package_name": "android.telecom", "class_name": "PhoneAccount", "full_name": "android.telecom.PhoneAccount"}, {"package_name": "android.telecom", "class_name": "PhoneAccount.Builder", "full_name": "android.telecom.PhoneAccount.Builder"}, {"package_name": "android.telecom", "class_name": "PhoneAccountHandle", "full_name": "android.telecom.PhoneAccountHandle"}, {"package_name": "android.telephony", "class_name": "PhoneNumberFormattingTextWatcher", "full_name": "android.telephony.PhoneNumberFormattingTextWatcher"}, {"package_name": "android.telephony", "class_name": "PhoneNumberUtils", "full_name": "android.telephony.PhoneNumberUtils"}, {"package_name": "android.telephony", "class_name": "PhoneStateListener", "full_name": "android.telephony.PhoneStateListener"}, {"package_name": "android.graphics", "class_name": "Picture", "full_name": "android.graphics.Picture"}, {"package_name": "android.graphics.drawable", "class_name": "PictureDrawable", "full_name": "android.graphics.drawable.PictureDrawable"}, {"package_name": "android.app", "class_name": "PictureInPictureParams", "full_name": "android.app.PictureInPictureParams"}, {"package_name": "android.app", "class_name": "PictureInPictureParams.Builder", "full_name": "android.app.PictureInPictureParams.Builder"}, {"package_name": "android.os.health", "class_name": "PidHealthStats", "full_name": "android.os.health.PidHealthStats"}, {"package_name": "java.nio.channels", "class_name": "Pipe", "full_name": "java.nio.channels.Pipe"}, {"package_name": "java.nio.channels", "class_name": "Pipe.SinkChannel", "full_name": "java.nio.channels.Pipe.SinkChannel"}, {"package_name": "java.nio.channels", "class_name": "Pipe.SourceChannel", "full_name": "java.nio.channels.Pipe.SourceChannel"}, {"package_name": "java.io", "class_name": "PipedInputStream", "full_name": "java.io.PipedInputStream"}, {"package_name": "java.io", "class_name": "PipedOutputStream", "full_name": "java.io.PipedOutputStream"}, {"package_name": "java.io", "class_name": "PipedReader", "full_name": "java.io.PipedReader"}, {"package_name": "java.io", "class_name": "PipedWriter", "full_name": "java.io.PipedWriter"}, {"package_name": "android.view", "class_name": "PixelCopy", "full_name": "android.view.PixelCopy"}, {"package_name": "android.view", "class_name": "PixelCopy.OnPixelCopyFinishedListener", "full_name": "android.view.PixelCopy.OnPixelCopyFinishedListener"}, {"package_name": "android.graphics", "class_name": "PixelFormat", "full_name": "android.graphics.PixelFormat"}, {"package_name": "java.security.cert", "class_name": "PKIXBuilderParameters", "full_name": "java.security.cert.PKIXBuilderParameters"}, {"package_name": "java.security.cert", "class_name": "PKIXCertPathBuilderResult", "full_name": "java.security.cert.PKIXCertPathBuilderResult"}, {"package_name": "java.security.cert", "class_name": "PKIXCertPathChecker", "full_name": "java.security.cert.PKIXCertPathChecker"}, {"package_name": "java.security.cert", "class_name": "PKIXCertPathValidatorResult", "full_name": "java.security.cert.PKIXCertPathValidatorResult"}, {"package_name": "java.security.cert", "class_name": "PKIXParameters", "full_name": "java.security.cert.PKIXParameters"}, {"package_name": "java.security.cert", "class_name": "PKIXReason", "full_name": "java.security.cert.PKIXReason"}, {"package_name": "java.security.cert", "class_name": "PKIXRevocationChecker", "full_name": "java.security.cert.PKIXRevocationChecker"}, {"package_name": "java.security.cert", "class_name": "PKIXRevocationChecker.Option", "full_name": "java.security.cert.PKIXRevocationChecker.Option"}, {"package_name": "android.media", "class_name": "PlaybackParams", "full_name": "android.media.PlaybackParams"}, {"package_name": "android.media.session", "class_name": "PlaybackState", "full_name": "android.media.session.PlaybackState"}, {"package_name": "android.media.session", "class_name": "PlaybackState.Builder", "full_name": "android.media.session.PlaybackState.Builder"}, {"package_name": "android.media.session", "class_name": "PlaybackState.CustomAction", "full_name": "android.media.session.PlaybackState.CustomAction"}, {"package_name": "android.media.session", "class_name": "PlaybackState.CustomAction.Builder", "full_name": "android.media.session.PlaybackState.CustomAction.Builder"}, {"package_name": "android.webkit", "class_name": "PluginStub", "full_name": "android.webkit.PluginStub"}, {"package_name": "android.icu.text", "class_name": "PluralFormat", "full_name": "android.icu.text.PluralFormat"}, {"package_name": "android.icu.text", "class_name": "PluralRules", "full_name": "android.icu.text.PluralRules"}, {"package_name": "android.icu.text", "class_name": "PluralRules.PluralType", "full_name": "android.icu.text.PluralRules.PluralType"}, {"package_name": "android.graphics", "class_name": "Point", "full_name": "android.graphics.Point"}, {"package_name": "android.view", "class_name": "PointerIcon", "full_name": "android.view.PointerIcon"}, {"package_name": "android.graphics", "class_name": "PointF", "full_name": "android.graphics.PointF"}, {"package_name": "android.animation", "class_name": "PointFEvaluator", "full_name": "android.animation.PointFEvaluator"}, {"package_name": "java.security", "class_name": "Policy", "full_name": "java.security.Policy"}, {"package_name": "java.security", "class_name": "Policy.Parameters", "full_name": "java.security.Policy.Parameters"}, {"package_name": "java.security.cert", "class_name": "PolicyNode", "full_name": "java.security.cert.PolicyNode"}, {"package_name": "java.security.cert", "class_name": "PolicyQualifierInfo", "full_name": "java.security.cert.PolicyQualifierInfo"}, {"package_name": "java.security", "class_name": "PolicySpi", "full_name": "java.security.PolicySpi"}, {"package_name": "javax.sql", "class_name": "PooledConnection", "full_name": "javax.sql.PooledConnection"}, {"package_name": "android.widget", "class_name": "PopupMenu", "full_name": "android.widget.PopupMenu"}, {"package_name": "android.widget", "class_name": "PopupMenu.OnDismissListener", "full_name": "android.widget.PopupMenu.OnDismissListener"}, {"package_name": "android.widget", "class_name": "PopupMenu.OnMenuItemClickListener", "full_name": "android.widget.PopupMenu.OnMenuItemClickListener"}, {"package_name": "android.widget", "class_name": "PopupWindow", "full_name": "android.widget.PopupWindow"}, {"package_name": "android.widget", "class_name": "PopupWindow.OnDismissListener", "full_name": "android.widget.PopupWindow.OnDismissListener"}, {"package_name": "android.graphics", "class_name": "PorterDuff", "full_name": "android.graphics.PorterDuff"}, {"package_name": "android.graphics", "class_name": "PorterDuff.Mode", "full_name": "android.graphics.PorterDuff.Mode"}, {"package_name": "android.graphics", "class_name": "PorterDuffColorFilter", "full_name": "android.graphics.PorterDuffColorFilter"}, {"package_name": "android.graphics", "class_name": "PorterDuffXfermode", "full_name": "android.graphics.PorterDuffXfermode"}, {"package_name": "java.net", "class_name": "PortUnreachableException", "full_name": "java.net.PortUnreachableException"}, {"package_name": "java.nio.file.attribute", "class_name": "PosixFileAttributes", "full_name": "java.nio.file.attribute.PosixFileAttributes"}, {"package_name": "java.nio.file.attribute", "class_name": "PosixFileAttributeView", "full_name": "java.nio.file.attribute.PosixFileAttributeView"}, {"package_name": "java.nio.file.attribute", "class_name": "PosixFilePermission", "full_name": "java.nio.file.attribute.PosixFilePermission"}, {"package_name": "java.nio.file.attribute", "class_name": "PosixFilePermissions", "full_name": "java.nio.file.attribute.PosixFilePermissions"}, {"package_name": "android.graphics", "class_name": "PostProcessor", "full_name": "android.graphics.PostProcessor"}, {"package_name": "android.os", "class_name": "PowerManager", "full_name": "android.os.PowerManager"}, {"package_name": "android.os", "class_name": "PowerManager.WakeLock", "full_name": "android.os.PowerManager.WakeLock"}, {"package_name": "android.text", "class_name": "PrecomputedText", "full_name": "android.text.PrecomputedText"}, {"package_name": "android.text", "class_name": "PrecomputedText.Params", "full_name": "android.text.PrecomputedText.Params"}, {"package_name": "android.text", "class_name": "PrecomputedText.Params.Builder", "full_name": "android.text.PrecomputedText.Params.Builder"}, {"package_name": "android.gesture", "class_name": "Prediction", "full_name": "android.gesture.Prediction"}, {"package_name": "android.preference", "class_name": "Preference", "full_name": "android.preference.Preference"}, {"package_name": "android.preference", "class_name": "Preference.BaseSavedState", "full_name": "android.preference.Preference.BaseSavedState"}, {"package_name": "android.preference", "class_name": "Preference.OnPreferenceChangeListener", "full_name": "android.preference.Preference.OnPreferenceChangeListener"}, {"package_name": "android.preference", "class_name": "Preference.OnPreferenceClickListener", "full_name": "android.preference.Preference.OnPreferenceClickListener"}, {"package_name": "android.preference", "class_name": "PreferenceActivity", "full_name": "android.preference.PreferenceActivity"}, {"package_name": "android.preference", "class_name": "PreferenceActivity.Header", "full_name": "android.preference.PreferenceActivity.Header"}, {"package_name": "android.preference", "class_name": "PreferenceCategory", "full_name": "android.preference.PreferenceCategory"}, {"package_name": "java.util.prefs", "class_name": "PreferenceChangeEvent", "full_name": "java.util.prefs.PreferenceChangeEvent"}, {"package_name": "java.util.prefs", "class_name": "PreferenceChangeListener", "full_name": "java.util.prefs.PreferenceChangeListener"}, {"package_name": "android.preference", "class_name": "PreferenceDataStore", "full_name": "android.preference.PreferenceDataStore"}, {"package_name": "android.preference", "class_name": "PreferenceFragment", "full_name": "android.preference.PreferenceFragment"}, {"package_name": "android.preference", "class_name": "PreferenceFragment.OnPreferenceStartFragmentCallback", "full_name": "android.preference.PreferenceFragment.OnPreferenceStartFragmentCallback"}, {"package_name": "android.preference", "class_name": "PreferenceGroup", "full_name": "android.preference.PreferenceGroup"}, {"package_name": "android.preference", "class_name": "PreferenceManager", "full_name": "android.preference.PreferenceManager"}, {"package_name": "android.preference", "class_name": "PreferenceManager.OnActivityDestroyListener", "full_name": "android.preference.PreferenceManager.OnActivityDestroyListener"}, {"package_name": "android.preference", "class_name": "PreferenceManager.OnActivityResultListener", "full_name": "android.preference.PreferenceManager.OnActivityResultListener"}, {"package_name": "android.preference", "class_name": "PreferenceManager.OnActivityStopListener", "full_name": "android.preference.PreferenceManager.OnActivityStopListener"}, {"package_name": "java.util.prefs", "class_name": "Preferences", "full_name": "java.util.prefs.Preferences"}, {"package_name": "android.preference", "class_name": "PreferenceScreen", "full_name": "android.preference.PreferenceScreen"}, {"package_name": "java.util.prefs", "class_name": "PreferencesFactory", "full_name": "java.util.prefs.PreferencesFactory"}, {"package_name": "java.sql", "class_name": "PreparedStatement", "full_name": "java.sql.PreparedStatement"}, {"package_name": "android.app", "class_name": "Presentation", "full_name": "android.app.Presentation"}, {"package_name": "android.media.audiofx", "class_name": "PresetReverb", "full_name": "android.media.audiofx.PresetReverb"}, {"package_name": "android.media.audiofx", "class_name": "PresetReverb.OnParameterChangeListener", "full_name": "android.media.audiofx.PresetReverb.OnParameterChangeListener"}, {"package_name": "android.media.audiofx", "class_name": "PresetReverb.Settings", "full_name": "android.media.audiofx.PresetReverb.Settings"}, {"package_name": "java.util", "class_name": "PrimitiveIterator.OfDouble", "full_name": "java.util.PrimitiveIterator.OfDouble"}, {"package_name": "java.util", "class_name": "PrimitiveIterator.OfInt", "full_name": "java.util.PrimitiveIterator.OfInt"}, {"package_name": "java.util", "class_name": "PrimitiveIterator.OfLong", "full_name": "java.util.PrimitiveIterator.OfLong"}, {"package_name": "java.security", "class_name": "Principal", "full_name": "java.security.Principal"}, {"package_name": "android.print", "class_name": "PrintAttributes", "full_name": "android.print.PrintAttributes"}, {"package_name": "android.print", "class_name": "PrintAttributes.Builder", "full_name": "android.print.PrintAttributes.Builder"}, {"package_name": "android.print", "class_name": "PrintAttributes.Margins", "full_name": "android.print.PrintAttributes.Margins"}, {"package_name": "android.print", "class_name": "PrintAttributes.MediaSize", "full_name": "android.print.PrintAttributes.MediaSize"}, {"package_name": "android.print", "class_name": "PrintAttributes.Resolution", "full_name": "android.print.PrintAttributes.Resolution"}, {"package_name": "android.printservice", "class_name": "PrintDocument", "full_name": "android.printservice.PrintDocument"}, {"package_name": "android.print", "class_name": "PrintDocumentAdapter", "full_name": "android.print.PrintDocumentAdapter"}, {"package_name": "android.print", "class_name": "PrintDocumentAdapter.LayoutResultCallback", "full_name": "android.print.PrintDocumentAdapter.LayoutResultCallback"}, {"package_name": "android.print", "class_name": "PrintDocumentAdapter.WriteResultCallback", "full_name": "android.print.PrintDocumentAdapter.WriteResultCallback"}, {"package_name": "android.print", "class_name": "PrintDocumentInfo", "full_name": "android.print.PrintDocumentInfo"}, {"package_name": "android.print", "class_name": "PrintDocumentInfo.Builder", "full_name": "android.print.PrintDocumentInfo.Builder"}, {"package_name": "android.print.pdf", "class_name": "PrintedPdfDocument", "full_name": "android.print.pdf.PrintedPdfDocument"}, {"package_name": "android.util", "class_name": "Printer", "full_name": "android.util.Printer"}, {"package_name": "android.print", "class_name": "PrinterCapabilitiesInfo", "full_name": "android.print.PrinterCapabilitiesInfo"}, {"package_name": "android.print", "class_name": "PrinterCapabilitiesInfo.Builder", "full_name": "android.print.PrinterCapabilitiesInfo.Builder"}, {"package_name": "android.printservice", "class_name": "PrinterDiscoverySession", "full_name": "android.printservice.PrinterDiscoverySession"}, {"package_name": "android.print", "class_name": "PrinterId", "full_name": "android.print.PrinterId"}, {"package_name": "android.print", "class_name": "PrinterInfo", "full_name": "android.print.PrinterInfo"}, {"package_name": "android.print", "class_name": "PrinterInfo.Builder", "full_name": "android.print.PrinterInfo.Builder"}, {"package_name": "android.print", "class_name": "PrintJob", "full_name": "android.print.PrintJob"}, {"package_name": "android.printservice", "class_name": "PrintJob", "full_name": "android.printservice.PrintJob"}, {"package_name": "android.print", "class_name": "PrintJobId", "full_name": "android.print.PrintJobId"}, {"package_name": "android.print", "class_name": "PrintJobInfo", "full_name": "android.print.PrintJobInfo"}, {"package_name": "android.print", "class_name": "PrintJobInfo.Builder", "full_name": "android.print.PrintJobInfo.Builder"}, {"package_name": "android.print", "class_name": "PrintManager", "full_name": "android.print.PrintManager"}, {"package_name": "android.printservice", "class_name": "PrintService", "full_name": "android.printservice.PrintService"}, {"package_name": "java.io", "class_name": "PrintStream", "full_name": "java.io.PrintStream"}, {"package_name": "android.util", "class_name": "PrintStreamPrinter", "full_name": "android.util.PrintStreamPrinter"}, {"package_name": "java.io", "class_name": "PrintWriter", "full_name": "java.io.PrintWriter"}, {"package_name": "android.util", "class_name": "PrintWriterPrinter", "full_name": "android.util.PrintWriterPrinter"}, {"package_name": "javax.security.auth", "class_name": "PrivateCredentialPermission", "full_name": "javax.security.auth.PrivateCredentialPermission"}, {"package_name": "java.security", "class_name": "PrivateKey", "full_name": "java.security.PrivateKey"}, {"package_name": "java.security", "class_name": "PrivilegedActionException", "full_name": "java.security.PrivilegedActionException"}, {"package_name": "android.os", "class_name": "Process", "full_name": "android.os.Process"}, {"package_name": "java.lang", "class_name": "Process", "full_name": "java.lang.Process"}, {"package_name": "java.lang", "class_name": "ProcessBuilder", "full_name": "java.lang.ProcessBuilder"}, {"package_name": "java.lang", "class_name": "ProcessBuilder.Redirect", "full_name": "java.lang.ProcessBuilder.Redirect"}, {"package_name": "java.lang", "class_name": "ProcessBuilder.Redirect.Type", "full_name": "java.lang.ProcessBuilder.Redirect.Type"}, {"package_name": "android.drm", "class_name": "ProcessedData", "full_name": "android.drm.ProcessedData"}, {"package_name": "android.os.health", "class_name": "ProcessHealthStats", "full_name": "android.os.health.ProcessHealthStats"}, {"package_name": "android.widget", "class_name": "ProgressBar", "full_name": "android.widget.ProgressBar"}, {"package_name": "android.app", "class_name": "ProgressDialog", "full_name": "android.app.ProgressDialog"}, {"package_name": "java.util", "class_name": "Properties", "full_name": "java.util.Properties"}, {"package_name": "java.beans", "class_name": "PropertyChangeEvent", "full_name": "java.beans.PropertyChangeEvent"}, {"package_name": "java.beans", "class_name": "PropertyChangeListener", "full_name": "java.beans.PropertyChangeListener"}, {"package_name": "java.beans", "class_name": "PropertyChangeListenerProxy", "full_name": "java.beans.PropertyChangeListenerProxy"}, {"package_name": "java.beans", "class_name": "PropertyChangeSupport", "full_name": "java.beans.PropertyChangeSupport"}, {"package_name": "java.util", "class_name": "PropertyPermission", "full_name": "java.util.PropertyPermission"}, {"package_name": "java.util", "class_name": "PropertyResourceBundle", "full_name": "java.util.PropertyResourceBundle"}, {"package_name": "android.animation", "class_name": "PropertyValuesHolder", "full_name": "android.animation.PropertyValuesHolder"}, {"package_name": "junit.framework", "class_name": "Protectable", "full_name": "junit.framework.Protectable"}, {"package_name": "java.security", "class_name": "ProtectionDomain", "full_name": "java.security.ProtectionDomain"}, {"package_name": "java.net", "class_name": "ProtocolException", "full_name": "java.net.ProtocolException"}, {"package_name": "java.net", "class_name": "ProtocolFamily", "full_name": "java.net.ProtocolFamily"}, {"package_name": "java.security", "class_name": "Provider", "full_name": "java.security.Provider"}, {"package_name": "java.security", "class_name": "Provider.Service", "full_name": "java.security.Provider.Service"}, {"package_name": "java.security", "class_name": "ProviderException", "full_name": "java.security.ProviderException"}, {"package_name": "android.content.pm", "class_name": "ProviderInfo", "full_name": "android.content.pm.ProviderInfo"}, {"package_name": "java.nio.file", "class_name": "ProviderMismatchException", "full_name": "java.nio.file.ProviderMismatchException"}, {"package_name": "java.nio.file", "class_name": "ProviderNotFoundException", "full_name": "java.nio.file.ProviderNotFoundException"}, {"package_name": "android.net", "class_name": "Proxy", "full_name": "android.net.Proxy"}, {"package_name": "java.lang.reflect", "class_name": "Proxy", "full_name": "java.lang.reflect.Proxy"}, {"package_name": "java.net", "class_name": "Proxy", "full_name": "java.net.Proxy"}, {"package_name": "java.net", "class_name": "Proxy.Type", "full_name": "java.net.Proxy.Type"}, {"package_name": "android.os", "class_name": "ProxyFileDescriptorCallback", "full_name": "android.os.ProxyFileDescriptorCallback"}, {"package_name": "android.net", "class_name": "ProxyInfo", "full_name": "android.net.ProxyInfo"}, {"package_name": "java.net", "class_name": "ProxySelector", "full_name": "java.net.ProxySelector"}, {"package_name": "javax.crypto.spec", "class_name": "PSource", "full_name": "javax.crypto.spec.PSource"}, {"package_name": "javax.crypto.spec", "class_name": "PSource.PSpecified", "full_name": "javax.crypto.spec.PSource.PSpecified"}, {"package_name": "java.security.spec", "class_name": "PSSParameterSpec", "full_name": "java.security.spec.PSSParameterSpec"}, {"package_name": "java.security", "class_name": "PublicKey", "full_name": "java.security.PublicKey"}, {"package_name": "android.net.wifi.aware", "class_name": "PublishConfig", "full_name": "android.net.wifi.aware.PublishConfig"}, {"package_name": "android.net.wifi.aware", "class_name": "PublishConfig.Builder", "full_name": "android.net.wifi.aware.PublishConfig.Builder"}, {"package_name": "android.net.wifi.aware", "class_name": "PublishDiscoverySession", "full_name": "android.net.wifi.aware.PublishDiscoverySession"}, {"package_name": "java.io", "class_name": "PushbackInputStream", "full_name": "java.io.PushbackInputStream"}, {"package_name": "java.io", "class_name": "PushbackReader", "full_name": "java.io.PushbackReader"}, {"package_name": "javax.xml.namespace", "class_name": "QName", "full_name": "javax.xml.namespace.QName"}, {"package_name": "android.widget", "class_name": "QuickContactBadge", "full_name": "android.widget.QuickContactBadge"}, {"package_name": "android.content", "class_name": "QuickViewConstants", "full_name": "android.content.QuickViewConstants"}, {"package_name": "android.text.style", "class_name": "QuoteSpan", "full_name": "android.text.style.QuoteSpan"}, {"package_name": "android.text.method", "class_name": "QwertyKeyListener", "full_name": "android.text.method.QwertyKeyListener"}, {"package_name": "android", "class_name": "R", "full_name": "android.R"}, {"package_name": "android", "class_name": "R.anim", "full_name": "android.R.anim"}, {"package_name": "android", "class_name": "R.animator", "full_name": "android.R.animator"}, {"package_name": "android", "class_name": "R.array", "full_name": "android.R.array"}, {"package_name": "android", "class_name": "R.attr", "full_name": "android.R.attr"}, {"package_name": "android", "class_name": "R.bool", "full_name": "android.R.bool"}, {"package_name": "android", "class_name": "R.color", "full_name": "android.R.color"}, {"package_name": "android", "class_name": "R.dimen", "full_name": "android.R.dimen"}, {"package_name": "android", "class_name": "R.drawable", "full_name": "android.R.drawable"}, {"package_name": "android", "class_name": "R.fraction", "full_name": "android.R.fraction"}, {"package_name": "android", "class_name": "R.id", "full_name": "android.R.id"}, {"package_name": "android", "class_name": "R.integer", "full_name": "android.R.integer"}, {"package_name": "android", "class_name": "R.interpolator", "full_name": "android.R.interpolator"}, {"package_name": "android", "class_name": "R.layout", "full_name": "android.R.layout"}, {"package_name": "android", "class_name": "R.menu", "full_name": "android.R.menu"}, {"package_name": "android", "class_name": "R.mipmap", "full_name": "android.R.mipmap"}, {"package_name": "android", "class_name": "R.plurals", "full_name": "android.R.plurals"}, {"package_name": "android", "class_name": "R.raw", "full_name": "android.R.raw"}, {"package_name": "android", "class_name": "R.string", "full_name": "android.R.string"}, {"package_name": "android", "class_name": "R.style", "full_name": "android.R.style"}, {"package_name": "android", "class_name": "R.styleable", "full_name": "android.R.styleable"}, {"package_name": "android", "class_name": "R.transition", "full_name": "android.R.transition"}, {"package_name": "android", "class_name": "R.xml", "full_name": "android.R.xml"}, {"package_name": "android.graphics", "class_name": "RadialGradient", "full_name": "android.graphics.RadialGradient"}, {"package_name": "android.telephony", "class_name": "RadioAccessSpecifier", "full_name": "android.telephony.RadioAccessSpecifier"}, {"package_name": "android.widget", "class_name": "RadioButton", "full_name": "android.widget.RadioButton"}, {"package_name": "android.widget", "class_name": "RadioGroup", "full_name": "android.widget.RadioGroup"}, {"package_name": "android.widget", "class_name": "RadioGroup.LayoutParams", "full_name": "android.widget.RadioGroup.LayoutParams"}, {"package_name": "android.widget", "class_name": "RadioGroup.OnCheckedChangeListener", "full_name": "android.widget.RadioGroup.OnCheckedChangeListener"}, {"package_name": "java.util", "class_name": "Random", "full_name": "java.util.Random"}, {"package_name": "java.util", "class_name": "RandomAccess", "full_name": "java.util.RandomAccess"}, {"package_name": "java.io", "class_name": "RandomAccessFile", "full_name": "java.io.RandomAccessFile"}, {"package_name": "android.icu.util", "class_name": "RangeValueIterator", "full_name": "android.icu.util.RangeValueIterator"}, {"package_name": "android.icu.util", "class_name": "RangeValueIterator.Element", "full_name": "android.icu.util.RangeValueIterator.Element"}, {"package_name": "android.net.wifi.rtt", "class_name": "RangingRequest", "full_name": "android.net.wifi.rtt.RangingRequest"}, {"package_name": "android.net.wifi.rtt", "class_name": "RangingRequest.Builder", "full_name": "android.net.wifi.rtt.RangingRequest.Builder"}, {"package_name": "android.net.wifi.rtt", "class_name": "RangingResult", "full_name": "android.net.wifi.rtt.RangingResult"}, {"package_name": "android.net.wifi.rtt", "class_name": "RangingResultCallback", "full_name": "android.net.wifi.rtt.RangingResultCallback"}, {"package_name": "android.media", "class_name": "Rating", "full_name": "android.media.Rating"}, {"package_name": "android.widget", "class_name": "RatingBar", "full_name": "android.widget.RatingBar"}, {"package_name": "android.widget", "class_name": "RatingBar.OnRatingBarChangeListener", "full_name": "android.widget.RatingBar.OnRatingBarChangeListener"}, {"package_name": "android.util", "class_name": "Rational", "full_name": "android.util.Rational"}, {"package_name": "java.lang", "class_name": "Readable", "full_name": "java.lang.Readable"}, {"package_name": "java.nio.channels", "class_name": "ReadableByteChannel", "full_name": "java.nio.channels.ReadableByteChannel"}, {"package_name": "android.se.omapi", "class_name": "Reader", "full_name": "android.se.omapi.Reader"}, {"package_name": "java.io", "class_name": "Reader", "full_name": "java.io.Reader"}, {"package_name": "java.nio", "class_name": "ReadOnlyBufferException", "full_name": "java.nio.ReadOnlyBufferException"}, {"package_name": "java.nio.file", "class_name": "ReadOnlyFileSystemException", "full_name": "java.nio.file.ReadOnlyFileSystemException"}, {"package_name": "java.nio.channels", "class_name": "ReadPendingException", "full_name": "java.nio.channels.ReadPendingException"}, {"package_name": "java.util.concurrent.locks", "class_name": "ReadWriteLock", "full_name": "java.util.concurrent.locks.ReadWriteLock"}, {"package_name": "android.content", "class_name": "ReceiverCallNotAllowedException", "full_name": "android.content.ReceiverCallNotAllowedException"}, {"package_name": "android.speech", "class_name": "RecognitionListener", "full_name": "android.speech.RecognitionListener"}, {"package_name": "android.speech", "class_name": "RecognitionService", "full_name": "android.speech.RecognitionService"}, {"package_name": "android.speech", "class_name": "RecognitionService.Callback", "full_name": "android.speech.RecognitionService.Callback"}, {"package_name": "android.speech", "class_name": "RecognizerIntent", "full_name": "android.speech.RecognizerIntent"}, {"package_name": "android.speech", "class_name": "RecognizerResultsIntent", "full_name": "android.speech.RecognizerResultsIntent"}, {"package_name": "android.os", "class_name": "RecoverySystem", "full_name": "android.os.RecoverySystem"}, {"package_name": "android.os", "class_name": "RecoverySystem.ProgressListener", "full_name": "android.os.RecoverySystem.ProgressListener"}, {"package_name": "android.graphics", "class_name": "Rect", "full_name": "android.graphics.Rect"}, {"package_name": "android.animation", "class_name": "RectEvaluator", "full_name": "android.animation.RectEvaluator"}, {"package_name": "android.graphics", "class_name": "RectF", "full_name": "android.graphics.RectF"}, {"package_name": "android.graphics.drawable.shapes", "class_name": "RectShape", "full_name": "android.graphics.drawable.shapes.RectShape"}, {"package_name": "java.util.concurrent", "class_name": "RecursiveAction", "full_name": "java.util.concurrent.RecursiveAction"}, {"package_name": "java.util.concurrent.locks", "class_name": "ReentrantLock", "full_name": "java.util.concurrent.locks.ReentrantLock"}, {"package_name": "java.util.concurrent.locks", "class_name": "ReentrantReadWriteLock", "full_name": "java.util.concurrent.locks.ReentrantReadWriteLock"}, {"package_name": "java.util.concurrent.locks", "class_name": "ReentrantReadWriteLock.ReadLock", "full_name": "java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock"}, {"package_name": "java.util.concurrent.locks", "class_name": "ReentrantReadWriteLock.WriteLock", "full_name": "java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock"}, {"package_name": "java.sql", "class_name": "Ref", "full_name": "java.sql.Ref"}, {"package_name": "java.lang", "class_name": "ReflectiveOperationException", "full_name": "java.lang.ReflectiveOperationException"}, {"package_name": "java.lang.reflect", "class_name": "ReflectPermission", "full_name": "java.lang.reflect.ReflectPermission"}, {"package_name": "android.service.autofill", "class_name": "RegexValidator", "full_name": "android.service.autofill.RegexValidator"}, {"package_name": "android.graphics", "class_name": "Region", "full_name": "android.graphics.Region"}, {"package_name": "android.graphics", "class_name": "Region.Op", "full_name": "android.graphics.Region.Op"}, {"package_name": "android.graphics", "class_name": "RegionIterator", "full_name": "android.graphics.RegionIterator"}, {"package_name": "java.util.concurrent", "class_name": "RejectedExecutionException", "full_name": "java.util.concurrent.RejectedExecutionException"}, {"package_name": "java.util.concurrent", "class_name": "RejectedExecutionHandler", "full_name": "java.util.concurrent.RejectedExecutionHandler"}, {"package_name": "android.icu.text", "class_name": "RelativeDateTimeFormatter", "full_name": "android.icu.text.RelativeDateTimeFormatter"}, {"package_name": "android.icu.text", "class_name": "RelativeDateTimeFormatter.AbsoluteUnit", "full_name": "android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit"}, {"package_name": "android.icu.text", "class_name": "RelativeDateTimeFormatter.Direction", "full_name": "android.icu.text.RelativeDateTimeFormatter.Direction"}, {"package_name": "android.icu.text", "class_name": "RelativeDateTimeFormatter.RelativeDateTimeUnit", "full_name": "android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit"}, {"package_name": "android.icu.text", "class_name": "RelativeDateTimeFormatter.RelativeUnit", "full_name": "android.icu.text.RelativeDateTimeFormatter.RelativeUnit"}, {"package_name": "android.icu.text", "class_name": "RelativeDateTimeFormatter.Style", "full_name": "android.icu.text.RelativeDateTimeFormatter.Style"}, {"package_name": "android.widget", "class_name": "RelativeLayout", "full_name": "android.widget.RelativeLayout"}, {"package_name": "android.widget", "class_name": "RelativeLayout.LayoutParams", "full_name": "android.widget.RelativeLayout.LayoutParams"}, {"package_name": "android.text.style", "class_name": "RelativeSizeSpan", "full_name": "android.text.style.RelativeSizeSpan"}, {"package_name": "android.app", "class_name": "RemoteAction", "full_name": "android.app.RemoteAction"}, {"package_name": "android.telecom", "class_name": "RemoteConference", "full_name": "android.telecom.RemoteConference"}, {"package_name": "android.telecom", "class_name": "RemoteConference.Callback", "full_name": "android.telecom.RemoteConference.Callback"}, {"package_name": "android.telecom", "class_name": "RemoteConnection", "full_name": "android.telecom.RemoteConnection"}, {"package_name": "android.telecom", "class_name": "RemoteConnection.Callback", "full_name": "android.telecom.RemoteConnection.Callback"}, {"package_name": "android.telecom", "class_name": "RemoteConnection.VideoProvider", "full_name": "android.telecom.RemoteConnection.VideoProvider"}, {"package_name": "android.telecom", "class_name": "RemoteConnection.VideoProvider.Callback", "full_name": "android.telecom.RemoteConnection.VideoProvider.Callback"}, {"package_name": "android.media", "class_name": "RemoteControlClient", "full_name": "android.media.RemoteControlClient"}, {"package_name": "android.media", "class_name": "RemoteControlClient.MetadataEditor", "full_name": "android.media.RemoteControlClient.MetadataEditor"}, {"package_name": "android.media", "class_name": "RemoteControlClient.OnGetPlaybackPositionListener", "full_name": "android.media.RemoteControlClient.OnGetPlaybackPositionListener"}, {"package_name": "android.media", "class_name": "RemoteControlClient.OnMetadataUpdateListener", "full_name": "android.media.RemoteControlClient.OnMetadataUpdateListener"}, {"package_name": "android.media", "class_name": "RemoteControlClient.OnPlaybackPositionUpdateListener", "full_name": "android.media.RemoteControlClient.OnPlaybackPositionUpdateListener"}, {"package_name": "android.media", "class_name": "RemoteController", "full_name": "android.media.RemoteController"}, {"package_name": "android.media", "class_name": "RemoteController.MetadataEditor", "full_name": "android.media.RemoteController.MetadataEditor"}, {"package_name": "android.media", "class_name": "RemoteController.OnClientUpdateListener", "full_name": "android.media.RemoteController.OnClientUpdateListener"}, {"package_name": "android.os", "class_name": "RemoteException", "full_name": "android.os.RemoteException"}, {"package_name": "android.app", "class_name": "RemoteInput", "full_name": "android.app.RemoteInput"}, {"package_name": "android.app", "class_name": "RemoteInput.Builder", "full_name": "android.app.RemoteInput.Builder"}, {"package_name": "android.widget", "class_name": "RemoteViews", "full_name": "android.widget.RemoteViews"}, {"package_name": "android.widget", "class_name": "RemoteViews.ActionException", "full_name": "android.widget.RemoteViews.ActionException"}, {"package_name": "android.widget", "class_name": "RemoteViews.RemoteView", "full_name": "android.widget.RemoteViews.RemoteView"}, {"package_name": "android.widget", "class_name": "RemoteViewsService", "full_name": "android.widget.RemoteViewsService"}, {"package_name": "android.widget", "class_name": "RemoteViewsService.RemoteViewsFactory", "full_name": "android.widget.RemoteViewsService.RemoteViewsFactory"}, {"package_name": "android.test", "class_name": "RenamingDelegatingContext", "full_name": "android.test.RenamingDelegatingContext"}, {"package_name": "android.webkit", "class_name": "RenderProcessGoneDetail", "full_name": "android.webkit.RenderProcessGoneDetail"}, {"package_name": "android.renderscript", "class_name": "RenderScript", "full_name": "android.renderscript.RenderScript"}, {"package_name": "android.renderscript", "class_name": "RenderScript.ContextType", "full_name": "android.renderscript.RenderScript.ContextType"}, {"package_name": "android.renderscript", "class_name": "RenderScript.Priority", "full_name": "android.renderscript.RenderScript.Priority"}, {"package_name": "android.renderscript", "class_name": "RenderScript.RSErrorHandler", "full_name": "android.renderscript.RenderScript.RSErrorHandler"}, {"package_name": "android.renderscript", "class_name": "RenderScript.RSMessageHandler", "full_name": "android.renderscript.RenderScript.RSMessageHandler"}, {"package_name": "java.lang.annotation", "class_name": "Repeatable", "full_name": "java.lang.annotation.Repeatable"}, {"package_name": "android.icu.text", "class_name": "Replaceable", "full_name": "android.icu.text.Replaceable"}, {"package_name": "android.text.style", "class_name": "ReplacementSpan", "full_name": "android.text.style.ReplacementSpan"}, {"package_name": "android.text.method", "class_name": "ReplacementTransformationMethod", "full_name": "android.text.method.ReplacementTransformationMethod"}, {"package_name": "android.content.pm", "class_name": "ResolveInfo", "full_name": "android.content.pm.ResolveInfo"}, {"package_name": "android.content.pm", "class_name": "ResolveInfo.DisplayNameComparator", "full_name": "android.content.pm.ResolveInfo.DisplayNameComparator"}, {"package_name": "java.time.format", "class_name": "ResolverStyle", "full_name": "java.time.format.ResolverStyle"}, {"package_name": "java.util", "class_name": "ResourceBundle", "full_name": "java.util.ResourceBundle"}, {"package_name": "java.util", "class_name": "ResourceBundle.Control", "full_name": "java.util.ResourceBundle.Control"}, {"package_name": "android.media", "class_name": "ResourceBusyException", "full_name": "android.media.ResourceBusyException"}, {"package_name": "android.widget", "class_name": "ResourceCursorAdapter", "full_name": "android.widget.ResourceCursorAdapter"}, {"package_name": "android.widget", "class_name": "ResourceCursorTreeAdapter", "full_name": "android.widget.ResourceCursorTreeAdapter"}, {"package_name": "android.os.strictmode", "class_name": "ResourceMismatchViolation", "full_name": "android.os.strictmode.ResourceMismatchViolation"}, {"package_name": "android.content.res", "class_name": "Resources", "full_name": "android.content.res.Resources"}, {"package_name": "android.content.res", "class_name": "Resources.NotFoundException", "full_name": "android.content.res.Resources.NotFoundException"}, {"package_name": "android.content.res", "class_name": "Resources.Theme", "full_name": "android.content.res.Resources.Theme"}, {"package_name": "java.net", "class_name": "ResponseCache", "full_name": "java.net.ResponseCache"}, {"package_name": "android.app.backup", "class_name": "RestoreObserver", "full_name": "android.app.backup.RestoreObserver"}, {"package_name": "android.content", "class_name": "RestrictionEntry", "full_name": "android.content.RestrictionEntry"}, {"package_name": "android.content", "class_name": "RestrictionsManager", "full_name": "android.content.RestrictionsManager"}, {"package_name": "android.service.restrictions", "class_name": "RestrictionsReceiver", "full_name": "android.service.restrictions.RestrictionsReceiver"}, {"package_name": "javax.xml.transform", "class_name": "Result", "full_name": "javax.xml.transform.Result"}, {"package_name": "android.os", "class_name": "ResultReceiver", "full_name": "android.os.ResultReceiver"}, {"package_name": "java.sql", "class_name": "ResultSet", "full_name": "java.sql.ResultSet"}, {"package_name": "java.sql", "class_name": "ResultSetMetaData", "full_name": "java.sql.ResultSetMetaData"}, {"package_name": "java.lang.annotation", "class_name": "Retention", "full_name": "java.lang.annotation.Retention"}, {"package_name": "java.lang.annotation", "class_name": "RetentionPolicy", "full_name": "java.lang.annotation.RetentionPolicy"}, {"package_name": "android.media", "class_name": "Ringtone", "full_name": "android.media.Ringtone"}, {"package_name": "android.media", "class_name": "RingtoneManager", "full_name": "android.media.RingtoneManager"}, {"package_name": "android.preference", "class_name": "RingtonePreference", "full_name": "android.preference.RingtonePreference"}, {"package_name": "android.graphics.drawable", "class_name": "RippleDrawable", "full_name": "android.graphics.drawable.RippleDrawable"}, {"package_name": "android.sax", "class_name": "RootElement", "full_name": "android.sax.RootElement"}, {"package_name": "android.view.animation", "class_name": "RotateAnimation", "full_name": "android.view.animation.RotateAnimation"}, {"package_name": "android.graphics.drawable", "class_name": "RotateDrawable", "full_name": "android.graphics.drawable.RotateDrawable"}, {"package_name": "java.math", "class_name": "RoundingMode", "full_name": "java.math.RoundingMode"}, {"package_name": "android.graphics.drawable.shapes", "class_name": "RoundRectShape", "full_name": "android.graphics.drawable.shapes.RoundRectShape"}, {"package_name": "android.net", "class_name": "RouteInfo", "full_name": "android.net.RouteInfo"}, {"package_name": "java.sql", "class_name": "RowId", "full_name": "java.sql.RowId"}, {"package_name": "java.sql", "class_name": "RowIdLifetime", "full_name": "java.sql.RowIdLifetime"}, {"package_name": "javax.sql", "class_name": "RowSet", "full_name": "javax.sql.RowSet"}, {"package_name": "javax.sql", "class_name": "RowSetEvent", "full_name": "javax.sql.RowSetEvent"}, {"package_name": "javax.sql", "class_name": "RowSetInternal", "full_name": "javax.sql.RowSetInternal"}, {"package_name": "javax.sql", "class_name": "RowSetListener", "full_name": "javax.sql.RowSetListener"}, {"package_name": "javax.sql", "class_name": "RowSetMetaData", "full_name": "javax.sql.RowSetMetaData"}, {"package_name": "javax.sql", "class_name": "RowSetReader", "full_name": "javax.sql.RowSetReader"}, {"package_name": "javax.sql", "class_name": "RowSetWriter", "full_name": "javax.sql.RowSetWriter"}, {"package_name": "java.security.interfaces", "class_name": "RSAKey", "full_name": "java.security.interfaces.RSAKey"}, {"package_name": "java.security.spec", "class_name": "RSAKeyGenParameterSpec", "full_name": "java.security.spec.RSAKeyGenParameterSpec"}, {"package_name": "java.security.interfaces", "class_name": "RSAMultiPrimePrivateCrtKey", "full_name": "java.security.interfaces.RSAMultiPrimePrivateCrtKey"}, {"package_name": "java.security.spec", "class_name": "RSAMultiPrimePrivateCrtKeySpec", "full_name": "java.security.spec.RSAMultiPrimePrivateCrtKeySpec"}, {"package_name": "java.security.spec", "class_name": "RSAOtherPrimeInfo", "full_name": "java.security.spec.RSAOtherPrimeInfo"}, {"package_name": "java.security.interfaces", "class_name": "RSAPrivateCrtKey", "full_name": "java.security.interfaces.RSAPrivateCrtKey"}, {"package_name": "java.security.spec", "class_name": "RSAPrivateCrtKeySpec", "full_name": "java.security.spec.RSAPrivateCrtKeySpec"}, {"package_name": "java.security.interfaces", "class_name": "RSAPrivateKey", "full_name": "java.security.interfaces.RSAPrivateKey"}, {"package_name": "java.security.spec", "class_name": "RSAPrivateKeySpec", "full_name": "java.security.spec.RSAPrivateKeySpec"}, {"package_name": "java.security.interfaces", "class_name": "RSAPublicKey", "full_name": "java.security.interfaces.RSAPublicKey"}, {"package_name": "java.security.spec", "class_name": "RSAPublicKeySpec", "full_name": "java.security.spec.RSAPublicKeySpec"}, {"package_name": "android.renderscript", "class_name": "RSDriverException", "full_name": "android.renderscript.RSDriverException"}, {"package_name": "android.renderscript", "class_name": "RSIllegalArgumentException", "full_name": "android.renderscript.RSIllegalArgumentException"}, {"package_name": "android.renderscript", "class_name": "RSInvalidStateException", "full_name": "android.renderscript.RSInvalidStateException"}, {"package_name": "android.renderscript", "class_name": "RSRuntimeException", "full_name": "android.renderscript.RSRuntimeException"}, {"package_name": "android.net.rtp", "class_name": "RtpStream", "full_name": "android.net.rtp.RtpStream"}, {"package_name": "android.icu.text", "class_name": "RuleBasedCollator", "full_name": "android.icu.text.RuleBasedCollator"}, {"package_name": "java.text", "class_name": "RuleBasedCollator", "full_name": "java.text.RuleBasedCollator"}, {"package_name": "java.lang", "class_name": "Runnable", "full_name": "java.lang.Runnable"}, {"package_name": "java.lang", "class_name": "Runtime", "full_name": "java.lang.Runtime"}, {"package_name": "java.lang", "class_name": "RuntimeException", "full_name": "java.lang.RuntimeException"}, {"package_name": "java.lang", "class_name": "RuntimePermission", "full_name": "java.lang.RuntimePermission"}, {"package_name": "android.webkit", "class_name": "SafeBrowsingResponse", "full_name": "android.webkit.SafeBrowsingResponse"}, {"package_name": "java.lang", "class_name": "SafeVarargs", "full_name": "java.lang.SafeVarargs"}, {"package_name": "android.renderscript", "class_name": "Sampler", "full_name": "android.renderscript.Sampler"}, {"package_name": "android.renderscript", "class_name": "Sampler.Builder", "full_name": "android.renderscript.Sampler.Builder"}, {"package_name": "android.renderscript", "class_name": "Sampler.Value", "full_name": "android.renderscript.Sampler.Value"}, {"package_name": "android.service.autofill", "class_name": "Sanitizer", "full_name": "android.service.autofill.Sanitizer"}, {"package_name": "android.service.autofill", "class_name": "SaveCallback", "full_name": "android.service.autofill.SaveCallback"}, {"package_name": "android.service.autofill", "class_name": "SaveInfo", "full_name": "android.service.autofill.SaveInfo"}, {"package_name": "android.service.autofill", "class_name": "SaveInfo.Builder", "full_name": "android.service.autofill.SaveInfo.Builder"}, {"package_name": "java.sql", "class_name": "Savepoint", "full_name": "java.sql.Savepoint"}, {"package_name": "android.service.autofill", "class_name": "SaveRequest", "full_name": "android.service.autofill.SaveRequest"}, {"package_name": "org.xml.sax", "class_name": "SAXException", "full_name": "org.xml.sax.SAXException"}, {"package_name": "org.xml.sax", "class_name": "SAXNotRecognizedException", "full_name": "org.xml.sax.SAXNotRecognizedException"}, {"package_name": "org.xml.sax", "class_name": "SAXNotSupportedException", "full_name": "org.xml.sax.SAXNotSupportedException"}, {"package_name": "org.xml.sax", "class_name": "SAXParseException", "full_name": "org.xml.sax.SAXParseException"}, {"package_name": "javax.xml.parsers", "class_name": "SAXParser", "full_name": "javax.xml.parsers.SAXParser"}, {"package_name": "javax.xml.parsers", "class_name": "SAXParserFactory", "full_name": "javax.xml.parsers.SAXParserFactory"}, {"package_name": "javax.xml.transform.sax", "class_name": "SAXResult", "full_name": "javax.xml.transform.sax.SAXResult"}, {"package_name": "javax.xml.transform.sax", "class_name": "SAXSource", "full_name": "javax.xml.transform.sax.SAXSource"}, {"package_name": "javax.xml.transform.sax", "class_name": "SAXTransformerFactory", "full_name": "javax.xml.transform.sax.SAXTransformerFactory"}, {"package_name": "android.view.animation", "class_name": "ScaleAnimation", "full_name": "android.view.animation.ScaleAnimation"}, {"package_name": "android.graphics.drawable", "class_name": "ScaleDrawable", "full_name": "android.graphics.drawable.ScaleDrawable"}, {"package_name": "android.view", "class_name": "ScaleGestureDetector", "full_name": "android.view.ScaleGestureDetector"}, {"package_name": "android.view", "class_name": "ScaleGestureDetector.OnScaleGestureListener", "full_name": "android.view.ScaleGestureDetector.OnScaleGestureListener"}, {"package_name": "android.view", "class_name": "ScaleGestureDetector.SimpleOnScaleGestureListener", "full_name": "android.view.ScaleGestureDetector.SimpleOnScaleGestureListener"}, {"package_name": "android.text.style", "class_name": "ScaleXSpan", "full_name": "android.text.style.ScaleXSpan"}, {"package_name": "android.bluetooth.le", "class_name": "ScanCallback", "full_name": "android.bluetooth.le.ScanCallback"}, {"package_name": "android.bluetooth.le", "class_name": "ScanFilter", "full_name": "android.bluetooth.le.ScanFilter"}, {"package_name": "android.bluetooth.le", "class_name": "ScanFilter.Builder", "full_name": "android.bluetooth.le.ScanFilter.Builder"}, {"package_name": "java.util", "class_name": "Scanner", "full_name": "java.util.Scanner"}, {"package_name": "android.bluetooth.le", "class_name": "ScanRecord", "full_name": "android.bluetooth.le.ScanRecord"}, {"package_name": "android.bluetooth.le", "class_name": "ScanResult", "full_name": "android.bluetooth.le.ScanResult"}, {"package_name": "android.net.wifi", "class_name": "ScanResult", "full_name": "android.net.wifi.ScanResult"}, {"package_name": "android.bluetooth.le", "class_name": "ScanSettings", "full_name": "android.bluetooth.le.ScanSettings"}, {"package_name": "android.bluetooth.le", "class_name": "ScanSettings.Builder", "full_name": "android.bluetooth.le.ScanSettings.Builder"}, {"package_name": "java.nio.channels", "class_name": "ScatteringByteChannel", "full_name": "java.nio.channels.ScatteringByteChannel"}, {"package_name": "android.transition", "class_name": "Scene", "full_name": "android.transition.Scene"}, {"package_name": "java.util.concurrent", "class_name": "ScheduledExecutorService", "full_name": "java.util.concurrent.ScheduledExecutorService"}, {"package_name": "java.util.concurrent", "class_name": "ScheduledThreadPoolExecutor", "full_name": "java.util.concurrent.ScheduledThreadPoolExecutor"}, {"package_name": "javax.xml.validation", "class_name": "Schema", "full_name": "javax.xml.validation.Schema"}, {"package_name": "javax.xml.validation", "class_name": "SchemaFactory", "full_name": "javax.xml.validation.SchemaFactory"}, {"package_name": "javax.xml.validation", "class_name": "SchemaFactoryLoader", "full_name": "javax.xml.validation.SchemaFactoryLoader"}, {"package_name": "android.icu.text", "class_name": "ScientificNumberFormatter", "full_name": "android.icu.text.ScientificNumberFormatter"}, {"package_name": "android.renderscript", "class_name": "Script", "full_name": "android.renderscript.Script"}, {"package_name": "android.renderscript", "class_name": "Script.Builder", "full_name": "android.renderscript.Script.Builder"}, {"package_name": "android.renderscript", "class_name": "Script.FieldBase", "full_name": "android.renderscript.Script.FieldBase"}, {"package_name": "android.renderscript", "class_name": "Script.FieldID", "full_name": "android.renderscript.Script.FieldID"}, {"package_name": "android.renderscript", "class_name": "Script.InvokeID", "full_name": "android.renderscript.Script.InvokeID"}, {"package_name": "android.renderscript", "class_name": "Script.KernelID", "full_name": "android.renderscript.Script.KernelID"}, {"package_name": "android.renderscript", "class_name": "Script.LaunchOptions", "full_name": "android.renderscript.Script.LaunchOptions"}, {"package_name": "android.renderscript", "class_name": "ScriptC", "full_name": "android.renderscript.ScriptC"}, {"package_name": "android.renderscript", "class_name": "ScriptGroup", "full_name": "android.renderscript.ScriptGroup"}, {"package_name": "android.renderscript", "class_name": "ScriptGroup.Binding", "full_name": "android.renderscript.ScriptGroup.Binding"}, {"package_name": "android.renderscript", "class_name": "ScriptGroup.Builder", "full_name": "android.renderscript.ScriptGroup.Builder"}, {"package_name": "android.renderscript", "class_name": "ScriptGroup.Closure", "full_name": "android.renderscript.ScriptGroup.Closure"}, {"package_name": "android.renderscript", "class_name": "ScriptGroup.Future", "full_name": "android.renderscript.ScriptGroup.Future"}, {"package_name": "android.renderscript", "class_name": "ScriptGroup.Input", "full_name": "android.renderscript.ScriptGroup.Input"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsic", "full_name": "android.renderscript.ScriptIntrinsic"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicBLAS", "full_name": "android.renderscript.ScriptIntrinsicBLAS"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicBlend", "full_name": "android.renderscript.ScriptIntrinsicBlend"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicBlur", "full_name": "android.renderscript.ScriptIntrinsicBlur"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicColorMatrix", "full_name": "android.renderscript.ScriptIntrinsicColorMatrix"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicHistogram", "full_name": "android.renderscript.ScriptIntrinsicHistogram"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicLUT", "full_name": "android.renderscript.ScriptIntrinsicLUT"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicResize", "full_name": "android.renderscript.ScriptIntrinsicResize"}, {"package_name": "android.renderscript", "class_name": "ScriptIntrinsicYuvToRGB", "full_name": "android.renderscript.ScriptIntrinsicYuvToRGB"}, {"package_name": "android.widget", "class_name": "Scroller", "full_name": "android.widget.Scroller"}, {"package_name": "android.text.method", "class_name": "ScrollingMovementMethod", "full_name": "android.text.method.ScrollingMovementMethod"}, {"package_name": "android.widget", "class_name": "ScrollView", "full_name": "android.widget.ScrollView"}, {"package_name": "javax.crypto", "class_name": "SealedObject", "full_name": "javax.crypto.SealedObject"}, {"package_name": "android.app", "class_name": "SearchableInfo", "full_name": "android.app.SearchableInfo"}, {"package_name": "android.view", "class_name": "SearchEvent", "full_name": "android.view.SearchEvent"}, {"package_name": "android.icu.text", "class_name": "SearchIterator", "full_name": "android.icu.text.SearchIterator"}, {"package_name": "android.icu.text", "class_name": "SearchIterator.ElementComparisonType", "full_name": "android.icu.text.SearchIterator.ElementComparisonType"}, {"package_name": "android.app", "class_name": "SearchManager", "full_name": "android.app.SearchManager"}, {"package_name": "android.app", "class_name": "SearchManager.OnCancelListener", "full_name": "android.app.SearchManager.OnCancelListener"}, {"package_name": "android.app", "class_name": "SearchManager.OnDismissListener", "full_name": "android.app.SearchManager.OnDismissListener"}, {"package_name": "android.provider", "class_name": "SearchRecentSuggestions", "full_name": "android.provider.SearchRecentSuggestions"}, {"package_name": "android.content", "class_name": "SearchRecentSuggestionsProvider", "full_name": "android.content.SearchRecentSuggestionsProvider"}, {"package_name": "android.widget", "class_name": "SearchView", "full_name": "android.widget.SearchView"}, {"package_name": "android.widget", "class_name": "SearchView.OnCloseListener", "full_name": "android.widget.SearchView.OnCloseListener"}, {"package_name": "android.widget", "class_name": "SearchView.OnQueryTextListener", "full_name": "android.widget.SearchView.OnQueryTextListener"}, {"package_name": "android.widget", "class_name": "SearchView.OnSuggestionListener", "full_name": "android.widget.SearchView.OnSuggestionListener"}, {"package_name": "javax.crypto", "class_name": "SecretKey", "full_name": "javax.crypto.SecretKey"}, {"package_name": "javax.crypto", "class_name": "SecretKeyFactory", "full_name": "javax.crypto.SecretKeyFactory"}, {"package_name": "javax.crypto", "class_name": "SecretKeyFactorySpi", "full_name": "javax.crypto.SecretKeyFactorySpi"}, {"package_name": "javax.crypto.spec", "class_name": "SecretKeySpec", "full_name": "javax.crypto.spec.SecretKeySpec"}, {"package_name": "android.widget", "class_name": "SectionIndexer", "full_name": "android.widget.SectionIndexer"}, {"package_name": "java.net", "class_name": "SecureCacheResponse", "full_name": "java.net.SecureCacheResponse"}, {"package_name": "java.security", "class_name": "SecureClassLoader", "full_name": "java.security.SecureClassLoader"}, {"package_name": "android.security.keystore", "class_name": "SecureKeyImportUnavailableException", "full_name": "android.security.keystore.SecureKeyImportUnavailableException"}, {"package_name": "java.security", "class_name": "SecureRandom", "full_name": "java.security.SecureRandom"}, {"package_name": "java.security", "class_name": "SecureRandomSpi", "full_name": "java.security.SecureRandomSpi"}, {"package_name": "java.security", "class_name": "Security", "full_name": "java.security.Security"}, {"package_name": "java.lang", "class_name": "SecurityException", "full_name": "java.lang.SecurityException"}, {"package_name": "android.app.admin", "class_name": "SecurityLog", "full_name": "android.app.admin.SecurityLog"}, {"package_name": "android.app.admin", "class_name": "SecurityLog.SecurityEvent", "full_name": "android.app.admin.SecurityLog.SecurityEvent"}, {"package_name": "java.lang", "class_name": "SecurityManager", "full_name": "java.lang.SecurityManager"}, {"package_name": "java.security", "class_name": "SecurityPermission", "full_name": "java.security.SecurityPermission"}, {"package_name": "java.nio.channels", "class_name": "SeekableByteChannel", "full_name": "java.nio.channels.SeekableByteChannel"}, {"package_name": "android.widget", "class_name": "SeekBar", "full_name": "android.widget.SeekBar"}, {"package_name": "android.widget", "class_name": "SeekBar.OnSeekBarChangeListener", "full_name": "android.widget.SeekBar.OnSeekBarChangeListener"}, {"package_name": "java.nio.channels", "class_name": "SelectableChannel", "full_name": "java.nio.channels.SelectableChannel"}, {"package_name": "android.icu.text", "class_name": "SelectFormat", "full_name": "android.icu.text.SelectFormat"}, {"package_name": "android.text", "class_name": "Selection", "full_name": "android.text.Selection"}, {"package_name": "android.view.textclassifier", "class_name": "SelectionEvent", "full_name": "android.view.textclassifier.SelectionEvent"}, {"package_name": "java.nio.channels", "class_name": "SelectionKey", "full_name": "java.nio.channels.SelectionKey"}, {"package_name": "java.nio.channels", "class_name": "Selector", "full_name": "java.nio.channels.Selector"}, {"package_name": "java.nio.channels.spi", "class_name": "SelectorProvider", "full_name": "java.nio.channels.spi.SelectorProvider"}, {"package_name": "java.util.concurrent", "class_name": "Semaphore", "full_name": "java.util.concurrent.Semaphore"}, {"package_name": "android.hardware", "class_name": "Sensor", "full_name": "android.hardware.Sensor"}, {"package_name": "android.hardware", "class_name": "SensorAdditionalInfo", "full_name": "android.hardware.SensorAdditionalInfo"}, {"package_name": "android.hardware", "class_name": "SensorDirectChannel", "full_name": "android.hardware.SensorDirectChannel"}, {"package_name": "android.hardware", "class_name": "SensorEvent", "full_name": "android.hardware.SensorEvent"}, {"package_name": "android.hardware", "class_name": "SensorEventCallback", "full_name": "android.hardware.SensorEventCallback"}, {"package_name": "android.hardware", "class_name": "SensorEventListener", "full_name": "android.hardware.SensorEventListener"}, {"package_name": "android.hardware", "class_name": "SensorListener", "full_name": "android.hardware.SensorListener"}, {"package_name": "android.hardware", "class_name": "SensorManager", "full_name": "android.hardware.SensorManager"}, {"package_name": "android.hardware", "class_name": "SensorManager.DynamicSensorCallback", "full_name": "android.hardware.SensorManager.DynamicSensorCallback"}, {"package_name": "android.view.textservice", "class_name": "SentenceSuggestionsInfo", "full_name": "android.view.textservice.SentenceSuggestionsInfo"}, {"package_name": "java.io", "class_name": "SequenceInputStream", "full_name": "java.io.SequenceInputStream"}, {"package_name": "java.io", "class_name": "Serializable", "full_name": "java.io.Serializable"}, {"package_name": "java.io", "class_name": "SerializablePermission", "full_name": "java.io.SerializablePermission"}, {"package_name": "java.net", "class_name": "ServerSocket", "full_name": "java.net.ServerSocket"}, {"package_name": "java.nio.channels", "class_name": "ServerSocketChannel", "full_name": "java.nio.channels.ServerSocketChannel"}, {"package_name": "javax.net", "class_name": "ServerSocketFactory", "full_name": "javax.net.ServerSocketFactory"}, {"package_name": "android.app", "class_name": "Service", "full_name": "android.app.Service"}, {"package_name": "java.util", "class_name": "ServiceConfigurationError", "full_name": "java.util.ServiceConfigurationError"}, {"package_name": "android.content", "class_name": "ServiceConnection", "full_name": "android.content.ServiceConnection"}, {"package_name": "android.os.strictmode", "class_name": "ServiceConnectionLeakedViolation", "full_name": "android.os.strictmode.ServiceConnectionLeakedViolation"}, {"package_name": "android.os.health", "class_name": "ServiceHealthStats", "full_name": "android.os.health.ServiceHealthStats"}, {"package_name": "android.content.pm", "class_name": "ServiceInfo", "full_name": "android.content.pm.ServiceInfo"}, {"package_name": "android.telephony.mbms", "class_name": "ServiceInfo", "full_name": "android.telephony.mbms.ServiceInfo"}, {"package_name": "android.telephony", "class_name": "ServiceState", "full_name": "android.telephony.ServiceState"}, {"package_name": "android.webkit", "class_name": "ServiceWorkerClient", "full_name": "android.webkit.ServiceWorkerClient"}, {"package_name": "android.webkit", "class_name": "ServiceWorkerController", "full_name": "android.webkit.ServiceWorkerController"}, {"package_name": "android.webkit", "class_name": "ServiceWorkerWebSettings", "full_name": "android.webkit.ServiceWorkerWebSettings"}, {"package_name": "android.se.omapi", "class_name": "SEService", "full_name": "android.se.omapi.SEService"}, {"package_name": "android.se.omapi", "class_name": "SEService.OnConnectedListener", "full_name": "android.se.omapi.SEService.OnConnectedListener"}, {"package_name": "android.se.omapi", "class_name": "Session", "full_name": "android.se.omapi.Session"}, {"package_name": "android.location", "class_name": "SettingInjectorService", "full_name": "android.location.SettingInjectorService"}, {"package_name": "android.provider", "class_name": "Settings", "full_name": "android.provider.Settings"}, {"package_name": "android.provider", "class_name": "Settings.Global", "full_name": "android.provider.Settings.Global"}, {"package_name": "android.provider", "class_name": "Settings.NameValueTable", "full_name": "android.provider.Settings.NameValueTable"}, {"package_name": "android.provider", "class_name": "Settings.Secure", "full_name": "android.provider.Settings.Secure"}, {"package_name": "android.provider", "class_name": "Settings.SettingNotFoundException", "full_name": "android.provider.Settings.SettingNotFoundException"}, {"package_name": "android.provider", "class_name": "Settings.System", "full_name": "android.provider.Settings.System"}, {"package_name": "android.provider", "class_name": "SettingsSlicesContract", "full_name": "android.provider.SettingsSlicesContract"}, {"package_name": "android.graphics", "class_name": "Shader", "full_name": "android.graphics.Shader"}, {"package_name": "android.graphics", "class_name": "Shader.TileMode", "full_name": "android.graphics.Shader.TileMode"}, {"package_name": "android.graphics.drawable.shapes", "class_name": "Shape", "full_name": "android.graphics.drawable.shapes.Shape"}, {"package_name": "android.graphics.drawable", "class_name": "ShapeDrawable", "full_name": "android.graphics.drawable.ShapeDrawable"}, {"package_name": "android.graphics.drawable", "class_name": "ShapeDrawable.ShaderFactory", "full_name": "android.graphics.drawable.ShapeDrawable.ShaderFactory"}, {"package_name": "android.widget", "class_name": "ShareActionProvider", "full_name": "android.widget.ShareActionProvider"}, {"package_name": "android.widget", "class_name": "ShareActionProvider.OnShareTargetSelectedListener", "full_name": "android.widget.ShareActionProvider.OnShareTargetSelectedListener"}, {"package_name": "android.app", "class_name": "SharedElementCallback", "full_name": "android.app.SharedElementCallback"}, {"package_name": "android.app", "class_name": "SharedElementCallback.OnSharedElementsReadyListener", "full_name": "android.app.SharedElementCallback.OnSharedElementsReadyListener"}, {"package_name": "android.content.pm", "class_name": "SharedLibraryInfo", "full_name": "android.content.pm.SharedLibraryInfo"}, {"package_name": "android.os", "class_name": "SharedMemory", "full_name": "android.os.SharedMemory"}, {"package_name": "android.content", "class_name": "SharedPreferences", "full_name": "android.content.SharedPreferences"}, {"package_name": "android.content", "class_name": "SharedPreferences.Editor", "full_name": "android.content.SharedPreferences.Editor"}, {"package_name": "android.content", "class_name": "SharedPreferences.OnSharedPreferenceChangeListener", "full_name": "android.content.SharedPreferences.OnSharedPreferenceChangeListener"}, {"package_name": "android.app.backup", "class_name": "SharedPreferencesBackupHelper", "full_name": "android.app.backup.SharedPreferencesBackupHelper"}, {"package_name": "java.lang", "class_name": "Short", "full_name": "java.lang.Short"}, {"package_name": "java.nio", "class_name": "ShortBuffer", "full_name": "java.nio.ShortBuffer"}, {"package_name": "javax.crypto", "class_name": "ShortBufferException", "full_name": "javax.crypto.ShortBufferException"}, {"package_name": "android.content.pm", "class_name": "ShortcutInfo", "full_name": "android.content.pm.ShortcutInfo"}, {"package_name": "android.content.pm", "class_name": "ShortcutInfo.Builder", "full_name": "android.content.pm.ShortcutInfo.Builder"}, {"package_name": "android.content.pm", "class_name": "ShortcutManager", "full_name": "android.content.pm.ShortcutManager"}, {"package_name": "java.nio.channels", "class_name": "ShutdownChannelGroupException", "full_name": "java.nio.channels.ShutdownChannelGroupException"}, {"package_name": "android.transition", "class_name": "SidePropagation", "full_name": "android.transition.SidePropagation"}, {"package_name": "android.telephony", "class_name": "SignalStrength", "full_name": "android.telephony.SignalStrength"}, {"package_name": "android.content.pm", "class_name": "Signature", "full_name": "android.content.pm.Signature"}, {"package_name": "java.security", "class_name": "Signature", "full_name": "java.security.Signature"}, {"package_name": "java.security", "class_name": "SignatureException", "full_name": "java.security.SignatureException"}, {"package_name": "java.security", "class_name": "SignatureSpi", "full_name": "java.security.SignatureSpi"}, {"package_name": "java.security", "class_name": "SignedObject", "full_name": "java.security.SignedObject"}, {"package_name": "java.security", "class_name": "Signer", "full_name": "java.security.Signer"}, {"package_name": "android.content.pm", "class_name": "SigningInfo", "full_name": "android.content.pm.SigningInfo"}, {"package_name": "java.time.format", "class_name": "SignStyle", "full_name": "java.time.format.SignStyle"}, {"package_name": "android.widget", "class_name": "SimpleAdapter", "full_name": "android.widget.SimpleAdapter"}, {"package_name": "android.widget", "class_name": "SimpleAdapter.ViewBinder", "full_name": "android.widget.SimpleAdapter.ViewBinder"}, {"package_name": "android.widget", "class_name": "SimpleCursorAdapter", "full_name": "android.widget.SimpleCursorAdapter"}, {"package_name": "android.widget", "class_name": "SimpleCursorAdapter.CursorToStringConverter", "full_name": "android.widget.SimpleCursorAdapter.CursorToStringConverter"}, {"package_name": "android.widget", "class_name": "SimpleCursorAdapter.ViewBinder", "full_name": "android.widget.SimpleCursorAdapter.ViewBinder"}, {"package_name": "android.widget", "class_name": "SimpleCursorTreeAdapter", "full_name": "android.widget.SimpleCursorTreeAdapter"}, {"package_name": "android.widget", "class_name": "SimpleCursorTreeAdapter.ViewBinder", "full_name": "android.widget.SimpleCursorTreeAdapter.ViewBinder"}, {"package_name": "android.icu.text", "class_name": "SimpleDateFormat", "full_name": "android.icu.text.SimpleDateFormat"}, {"package_name": "java.text", "class_name": "SimpleDateFormat", "full_name": "java.text.SimpleDateFormat"}, {"package_name": "android.widget", "class_name": "SimpleExpandableListAdapter", "full_name": "android.widget.SimpleExpandableListAdapter"}, {"package_name": "java.util.logging", "class_name": "SimpleFormatter", "full_name": "java.util.logging.SimpleFormatter"}, {"package_name": "java.util", "class_name": "SimpleTimeZone", "full_name": "java.util.SimpleTimeZone"}, {"package_name": "android.text.method", "class_name": "SingleLineTransformationMethod", "full_name": "android.text.method.SingleLineTransformationMethod"}, {"package_name": "android.net.sip", "class_name": "SipAudioCall", "full_name": "android.net.sip.SipAudioCall"}, {"package_name": "android.net.sip", "class_name": "SipAudioCall.Listener", "full_name": "android.net.sip.SipAudioCall.Listener"}, {"package_name": "android.net.sip", "class_name": "SipErrorCode", "full_name": "android.net.sip.SipErrorCode"}, {"package_name": "android.net.sip", "class_name": "SipException", "full_name": "android.net.sip.SipException"}, {"package_name": "android.net.sip", "class_name": "SipManager", "full_name": "android.net.sip.SipManager"}, {"package_name": "android.net.sip", "class_name": "SipProfile", "full_name": "android.net.sip.SipProfile"}, {"package_name": "android.net.sip", "class_name": "SipProfile.Builder", "full_name": "android.net.sip.SipProfile.Builder"}, {"package_name": "android.net.sip", "class_name": "SipRegistrationListener", "full_name": "android.net.sip.SipRegistrationListener"}, {"package_name": "android.net.sip", "class_name": "SipSession", "full_name": "android.net.sip.SipSession"}, {"package_name": "android.net.sip", "class_name": "SipSession.Listener", "full_name": "android.net.sip.SipSession.Listener"}, {"package_name": "android.net.sip", "class_name": "SipSession.State", "full_name": "android.net.sip.SipSession.State"}, {"package_name": "android.util", "class_name": "Size", "full_name": "android.util.Size"}, {"package_name": "android.util", "class_name": "SizeF", "full_name": "android.util.SizeF"}, {"package_name": "android.app.slice", "class_name": "Slice", "full_name": "android.app.slice.Slice"}, {"package_name": "android.app.slice", "class_name": "Slice.Builder", "full_name": "android.app.slice.Slice.Builder"}, {"package_name": "android.app.slice", "class_name": "SliceItem", "full_name": "android.app.slice.SliceItem"}, {"package_name": "android.app.slice", "class_name": "SliceManager", "full_name": "android.app.slice.SliceManager"}, {"package_name": "android.app.slice", "class_name": "SliceMetrics", "full_name": "android.app.slice.SliceMetrics"}, {"package_name": "android.app.slice", "class_name": "SliceProvider", "full_name": "android.app.slice.SliceProvider"}, {"package_name": "android.app.slice", "class_name": "SliceSpec", "full_name": "android.app.slice.SliceSpec"}, {"package_name": "android.transition", "class_name": "Slide", "full_name": "android.transition.Slide"}, {"package_name": "android.widget", "class_name": "SlidingDrawer", "full_name": "android.widget.SlidingDrawer"}, {"package_name": "android.widget", "class_name": "SlidingDrawer.OnDrawerCloseListener", "full_name": "android.widget.SlidingDrawer.OnDrawerCloseListener"}, {"package_name": "android.widget", "class_name": "SlidingDrawer.OnDrawerOpenListener", "full_name": "android.widget.SlidingDrawer.OnDrawerOpenListener"}, {"package_name": "android.widget", "class_name": "SlidingDrawer.OnDrawerScrollListener", "full_name": "android.widget.SlidingDrawer.OnDrawerScrollListener"}, {"package_name": "android.test.suitebuilder.annotation", "class_name": "SmallTest", "full_name": "android.test.suitebuilder.annotation.SmallTest"}, {"package_name": "android.test.suitebuilder.annotation", "class_name": "Smoke", "full_name": "android.test.suitebuilder.annotation.Smoke"}, {"package_name": "android.telephony", "class_name": "SmsManager", "full_name": "android.telephony.SmsManager"}, {"package_name": "android.telephony.gsm", "class_name": "SmsManager", "full_name": "android.telephony.gsm.SmsManager"}, {"package_name": "android.telephony", "class_name": "SmsMessage", "full_name": "android.telephony.SmsMessage"}, {"package_name": "android.telephony.gsm", "class_name": "SmsMessage", "full_name": "android.telephony.gsm.SmsMessage"}, {"package_name": "android.telephony", "class_name": "SmsMessage.MessageClass", "full_name": "android.telephony.SmsMessage.MessageClass"}, {"package_name": "android.telephony.gsm", "class_name": "SmsMessage.MessageClass", "full_name": "android.telephony.gsm.SmsMessage.MessageClass"}, {"package_name": "android.telephony", "class_name": "SmsMessage.SubmitPdu", "full_name": "android.telephony.SmsMessage.SubmitPdu"}, {"package_name": "android.telephony.gsm", "class_name": "SmsMessage.SubmitPdu", "full_name": "android.telephony.gsm.SmsMessage.SubmitPdu"}, {"package_name": "javax.net.ssl", "class_name": "SNIHostName", "full_name": "javax.net.ssl.SNIHostName"}, {"package_name": "javax.net.ssl", "class_name": "SNIMatcher", "full_name": "javax.net.ssl.SNIMatcher"}, {"package_name": "javax.net.ssl", "class_name": "SNIServerName", "full_name": "javax.net.ssl.SNIServerName"}, {"package_name": "java.net", "class_name": "Socket", "full_name": "java.net.Socket"}, {"package_name": "java.net", "class_name": "SocketAddress", "full_name": "java.net.SocketAddress"}, {"package_name": "java.nio.channels", "class_name": "SocketChannel", "full_name": "java.nio.channels.SocketChannel"}, {"package_name": "java.net", "class_name": "SocketException", "full_name": "java.net.SocketException"}, {"package_name": "javax.net", "class_name": "SocketFactory", "full_name": "javax.net.SocketFactory"}, {"package_name": "org.apache.http.conn.scheme", "class_name": "SocketFactory", "full_name": "org.apache.http.conn.scheme.SocketFactory"}, {"package_name": "java.util.logging", "class_name": "SocketHandler", "full_name": "java.util.logging.SocketHandler"}, {"package_name": "java.net", "class_name": "SocketImpl", "full_name": "java.net.SocketImpl"}, {"package_name": "java.net", "class_name": "SocketImplFactory", "full_name": "java.net.SocketImplFactory"}, {"package_name": "java.net", "class_name": "SocketOptions", "full_name": "java.net.SocketOptions"}, {"package_name": "java.net", "class_name": "SocketPermission", "full_name": "java.net.SocketPermission"}, {"package_name": "java.net", "class_name": "SocketTimeoutException", "full_name": "java.net.SocketTimeoutException"}, {"package_name": "android.view", "class_name": "SoundEffectConstants", "full_name": "android.view.SoundEffectConstants"}, {"package_name": "android.media", "class_name": "SoundPool", "full_name": "android.media.SoundPool"}, {"package_name": "android.media", "class_name": "SoundPool.Builder", "full_name": "android.media.SoundPool.Builder"}, {"package_name": "android.media", "class_name": "SoundPool.OnLoadCompleteListener", "full_name": "android.media.SoundPool.OnLoadCompleteListener"}, {"package_name": "javax.xml.transform", "class_name": "Source", "full_name": "javax.xml.transform.Source"}, {"package_name": "javax.xml.transform", "class_name": "SourceLocator", "full_name": "javax.xml.transform.SourceLocator"}, {"package_name": "android.widget", "class_name": "Space", "full_name": "android.widget.Space"}, {"package_name": "android.text", "class_name": "Spannable", "full_name": "android.text.Spannable"}, {"package_name": "android.text", "class_name": "Spannable.Factory", "full_name": "android.text.Spannable.Factory"}, {"package_name": "android.text", "class_name": "SpannableString", "full_name": "android.text.SpannableString"}, {"package_name": "android.text", "class_name": "SpannableStringBuilder", "full_name": "android.text.SpannableStringBuilder"}, {"package_name": "android.text", "class_name": "Spanned", "full_name": "android.text.Spanned"}, {"package_name": "android.text", "class_name": "SpannedString", "full_name": "android.text.SpannedString"}, {"package_name": "android.text", "class_name": "SpanWatcher", "full_name": "android.text.SpanWatcher"}, {"package_name": "android.util", "class_name": "SparseBooleanArray", "full_name": "android.util.SparseBooleanArray"}, {"package_name": "android.util", "class_name": "SparseIntArray", "full_name": "android.util.SparseIntArray"}, {"package_name": "android.util", "class_name": "SparseLongArray", "full_name": "android.util.SparseLongArray"}, {"package_name": "android.speech", "class_name": "SpeechRecognizer", "full_name": "android.speech.SpeechRecognizer"}, {"package_name": "android.view.textservice", "class_name": "SpellCheckerInfo", "full_name": "android.view.textservice.SpellCheckerInfo"}, {"package_name": "android.service.textservice", "class_name": "SpellCheckerService", "full_name": "android.service.textservice.SpellCheckerService"}, {"package_name": "android.service.textservice", "class_name": "SpellCheckerService.Session", "full_name": "android.service.textservice.SpellCheckerService.Session"}, {"package_name": "android.view.textservice", "class_name": "SpellCheckerSession", "full_name": "android.view.textservice.SpellCheckerSession"}, {"package_name": "android.view.textservice", "class_name": "SpellCheckerSession.SpellCheckerSessionListener", "full_name": "android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener"}, {"package_name": "android.view.textservice", "class_name": "SpellCheckerSubtype", "full_name": "android.view.textservice.SpellCheckerSubtype"}, {"package_name": "android.widget", "class_name": "Spinner", "full_name": "android.widget.Spinner"}, {"package_name": "android.widget", "class_name": "SpinnerAdapter", "full_name": "android.widget.SpinnerAdapter"}, {"package_name": "java.util", "class_name": "Spliterator.OfDouble", "full_name": "java.util.Spliterator.OfDouble"}, {"package_name": "java.util", "class_name": "Spliterator.OfInt", "full_name": "java.util.Spliterator.OfInt"}, {"package_name": "java.util", "class_name": "Spliterator.OfLong", "full_name": "java.util.Spliterator.OfLong"}, {"package_name": "java.util", "class_name": "Spliterators", "full_name": "java.util.Spliterators"}, {"package_name": "java.util", "class_name": "Spliterators.AbstractDoubleSpliterator", "full_name": "java.util.Spliterators.AbstractDoubleSpliterator"}, {"package_name": "java.util", "class_name": "Spliterators.AbstractIntSpliterator", "full_name": "java.util.Spliterators.AbstractIntSpliterator"}, {"package_name": "java.util", "class_name": "Spliterators.AbstractLongSpliterator", "full_name": "java.util.Spliterators.AbstractLongSpliterator"}, {"package_name": "java.util", "class_name": "SplittableRandom", "full_name": "java.util.SplittableRandom"}, {"package_name": "java.sql", "class_name": "SQLClientInfoException", "full_name": "java.sql.SQLClientInfoException"}, {"package_name": "java.sql", "class_name": "SQLData", "full_name": "java.sql.SQLData"}, {"package_name": "java.sql", "class_name": "SQLDataException", "full_name": "java.sql.SQLDataException"}, {"package_name": "android.database", "class_name": "SQLException", "full_name": "android.database.SQLException"}, {"package_name": "java.sql", "class_name": "SQLException", "full_name": "java.sql.SQLException"}, {"package_name": "java.sql", "class_name": "SQLFeatureNotSupportedException", "full_name": "java.sql.SQLFeatureNotSupportedException"}, {"package_name": "java.sql", "class_name": "SQLInput", "full_name": "java.sql.SQLInput"}, {"package_name": "java.sql", "class_name": "SQLIntegrityConstraintViolationException", "full_name": "java.sql.SQLIntegrityConstraintViolationException"}, {"package_name": "java.sql", "class_name": "SQLInvalidAuthorizationSpecException", "full_name": "java.sql.SQLInvalidAuthorizationSpecException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteAbortException", "full_name": "android.database.sqlite.SQLiteAbortException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteAccessPermException", "full_name": "android.database.sqlite.SQLiteAccessPermException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteBindOrColumnIndexOutOfRangeException", "full_name": "android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteBlobTooBigException", "full_name": "android.database.sqlite.SQLiteBlobTooBigException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteCantOpenDatabaseException", "full_name": "android.database.sqlite.SQLiteCantOpenDatabaseException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteClosable", "full_name": "android.database.sqlite.SQLiteClosable"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteConstraintException", "full_name": "android.database.sqlite.SQLiteConstraintException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteCursor", "full_name": "android.database.sqlite.SQLiteCursor"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteCursorDriver", "full_name": "android.database.sqlite.SQLiteCursorDriver"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDatabase", "full_name": "android.database.sqlite.SQLiteDatabase"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDatabase.CursorFactory", "full_name": "android.database.sqlite.SQLiteDatabase.CursorFactory"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDatabase.OpenParams", "full_name": "android.database.sqlite.SQLiteDatabase.OpenParams"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDatabase.OpenParams.Builder", "full_name": "android.database.sqlite.SQLiteDatabase.OpenParams.Builder"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDatabaseCorruptException", "full_name": "android.database.sqlite.SQLiteDatabaseCorruptException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDatabaseLockedException", "full_name": "android.database.sqlite.SQLiteDatabaseLockedException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDatatypeMismatchException", "full_name": "android.database.sqlite.SQLiteDatatypeMismatchException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDiskIOException", "full_name": "android.database.sqlite.SQLiteDiskIOException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteDoneException", "full_name": "android.database.sqlite.SQLiteDoneException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteException", "full_name": "android.database.sqlite.SQLiteException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteFullException", "full_name": "android.database.sqlite.SQLiteFullException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteMisuseException", "full_name": "android.database.sqlite.SQLiteMisuseException"}, {"package_name": "android.os.strictmode", "class_name": "SqliteObjectLeakedViolation", "full_name": "android.os.strictmode.SqliteObjectLeakedViolation"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteOpenHelper", "full_name": "android.database.sqlite.SQLiteOpenHelper"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteOutOfMemoryException", "full_name": "android.database.sqlite.SQLiteOutOfMemoryException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteProgram", "full_name": "android.database.sqlite.SQLiteProgram"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteQuery", "full_name": "android.database.sqlite.SQLiteQuery"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteQueryBuilder", "full_name": "android.database.sqlite.SQLiteQueryBuilder"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteReadOnlyDatabaseException", "full_name": "android.database.sqlite.SQLiteReadOnlyDatabaseException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteStatement", "full_name": "android.database.sqlite.SQLiteStatement"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteTableLockedException", "full_name": "android.database.sqlite.SQLiteTableLockedException"}, {"package_name": "android.database.sqlite", "class_name": "SQLiteTransactionListener", "full_name": "android.database.sqlite.SQLiteTransactionListener"}, {"package_name": "java.sql", "class_name": "SQLNonTransientConnectionException", "full_name": "java.sql.SQLNonTransientConnectionException"}, {"package_name": "java.sql", "class_name": "SQLNonTransientException", "full_name": "java.sql.SQLNonTransientException"}, {"package_name": "java.sql", "class_name": "SQLOutput", "full_name": "java.sql.SQLOutput"}, {"package_name": "java.sql", "class_name": "SQLPermission", "full_name": "java.sql.SQLPermission"}, {"package_name": "java.sql", "class_name": "SQLRecoverableException", "full_name": "java.sql.SQLRecoverableException"}, {"package_name": "java.sql", "class_name": "SQLSyntaxErrorException", "full_name": "java.sql.SQLSyntaxErrorException"}, {"package_name": "java.sql", "class_name": "SQLTimeoutException", "full_name": "java.sql.SQLTimeoutException"}, {"package_name": "java.sql", "class_name": "SQLTransactionRollbackException", "full_name": "java.sql.SQLTransactionRollbackException"}, {"package_name": "java.sql", "class_name": "SQLTransientConnectionException", "full_name": "java.sql.SQLTransientConnectionException"}, {"package_name": "java.sql", "class_name": "SQLTransientException", "full_name": "java.sql.SQLTransientException"}, {"package_name": "java.sql", "class_name": "SQLWarning", "full_name": "java.sql.SQLWarning"}, {"package_name": "java.sql", "class_name": "SQLXML", "full_name": "java.sql.SQLXML"}, {"package_name": "android.net.http", "class_name": "SslCertificate", "full_name": "android.net.http.SslCertificate"}, {"package_name": "android.net.http", "class_name": "SslCertificate.DName", "full_name": "android.net.http.SslCertificate.DName"}, {"package_name": "android.net", "class_name": "SSLCertificateSocketFactory", "full_name": "android.net.SSLCertificateSocketFactory"}, {"package_name": "javax.net.ssl", "class_name": "SSLContext", "full_name": "javax.net.ssl.SSLContext"}, {"package_name": "javax.net.ssl", "class_name": "SSLContextSpi", "full_name": "javax.net.ssl.SSLContextSpi"}, {"package_name": "javax.net.ssl", "class_name": "SSLEngine", "full_name": "javax.net.ssl.SSLEngine"}, {"package_name": "javax.net.ssl", "class_name": "SSLEngineResult", "full_name": "javax.net.ssl.SSLEngineResult"}, {"package_name": "javax.net.ssl", "class_name": "SSLEngineResult.HandshakeStatus", "full_name": "javax.net.ssl.SSLEngineResult.HandshakeStatus"}, {"package_name": "javax.net.ssl", "class_name": "SSLEngineResult.Status", "full_name": "javax.net.ssl.SSLEngineResult.Status"}, {"package_name": "android.net.http", "class_name": "SslError", "full_name": "android.net.http.SslError"}, {"package_name": "android.webkit", "class_name": "SslErrorHandler", "full_name": "android.webkit.SslErrorHandler"}, {"package_name": "javax.net.ssl", "class_name": "SSLException", "full_name": "javax.net.ssl.SSLException"}, {"package_name": "javax.net.ssl", "class_name": "SSLHandshakeException", "full_name": "javax.net.ssl.SSLHandshakeException"}, {"package_name": "javax.net.ssl", "class_name": "SSLKeyException", "full_name": "javax.net.ssl.SSLKeyException"}, {"package_name": "javax.net.ssl", "class_name": "SSLParameters", "full_name": "javax.net.ssl.SSLParameters"}, {"package_name": "javax.net.ssl", "class_name": "SSLPeerUnverifiedException", "full_name": "javax.net.ssl.SSLPeerUnverifiedException"}, {"package_name": "javax.net.ssl", "class_name": "SSLPermission", "full_name": "javax.net.ssl.SSLPermission"}, {"package_name": "javax.net.ssl", "class_name": "SSLProtocolException", "full_name": "javax.net.ssl.SSLProtocolException"}, {"package_name": "javax.net.ssl", "class_name": "SSLServerSocket", "full_name": "javax.net.ssl.SSLServerSocket"}, {"package_name": "javax.net.ssl", "class_name": "SSLServerSocketFactory", "full_name": "javax.net.ssl.SSLServerSocketFactory"}, {"package_name": "javax.net.ssl", "class_name": "SSLSession", "full_name": "javax.net.ssl.SSLSession"}, {"package_name": "javax.net.ssl", "class_name": "SSLSessionBindingEvent", "full_name": "javax.net.ssl.SSLSessionBindingEvent"}, {"package_name": "javax.net.ssl", "class_name": "SSLSessionBindingListener", "full_name": "javax.net.ssl.SSLSessionBindingListener"}, {"package_name": "android.net", "class_name": "SSLSessionCache", "full_name": "android.net.SSLSessionCache"}, {"package_name": "javax.net.ssl", "class_name": "SSLSessionContext", "full_name": "javax.net.ssl.SSLSessionContext"}, {"package_name": "javax.net.ssl", "class_name": "SSLSocket", "full_name": "javax.net.ssl.SSLSocket"}, {"package_name": "javax.net.ssl", "class_name": "SSLSocketFactory", "full_name": "javax.net.ssl.SSLSocketFactory"}, {"package_name": "org.apache.http.conn.ssl", "class_name": "SSLSocketFactory", "full_name": "org.apache.http.conn.ssl.SSLSocketFactory"}, {"package_name": "java.lang", "class_name": "StackOverflowError", "full_name": "java.lang.StackOverflowError"}, {"package_name": "java.lang", "class_name": "StackTraceElement", "full_name": "java.lang.StackTraceElement"}, {"package_name": "android.widget", "class_name": "StackView", "full_name": "android.widget.StackView"}, {"package_name": "android.database", "class_name": "StaleDataException", "full_name": "android.database.StaleDataException"}, {"package_name": "java.util.concurrent.locks", "class_name": "StampedLock", "full_name": "java.util.concurrent.locks.StampedLock"}, {"package_name": "java.nio.charset", "class_name": "StandardCharsets", "full_name": "java.nio.charset.StandardCharsets"}, {"package_name": "javax.net.ssl", "class_name": "StandardConstants", "full_name": "javax.net.ssl.StandardConstants"}, {"package_name": "java.nio.file", "class_name": "StandardCopyOption", "full_name": "java.nio.file.StandardCopyOption"}, {"package_name": "java.nio.file", "class_name": "StandardOpenOption", "full_name": "java.nio.file.StandardOpenOption"}, {"package_name": "java.net", "class_name": "StandardProtocolFamily", "full_name": "java.net.StandardProtocolFamily"}, {"package_name": "java.net", "class_name": "StandardSocketOptions", "full_name": "java.net.StandardSocketOptions"}, {"package_name": "java.nio.file", "class_name": "StandardWatchEventKinds", "full_name": "java.nio.file.StandardWatchEventKinds"}, {"package_name": "android.sax", "class_name": "StartElementListener", "full_name": "android.sax.StartElementListener"}, {"package_name": "android.animation", "class_name": "StateListAnimator", "full_name": "android.animation.StateListAnimator"}, {"package_name": "android.graphics.drawable", "class_name": "StateListDrawable", "full_name": "android.graphics.drawable.StateListDrawable"}, {"package_name": "java.sql", "class_name": "Statement", "full_name": "java.sql.Statement"}, {"package_name": "javax.sql", "class_name": "StatementEvent", "full_name": "javax.sql.StatementEvent"}, {"package_name": "javax.sql", "class_name": "StatementEventListener", "full_name": "javax.sql.StatementEventListener"}, {"package_name": "android.util", "class_name": "StateSet", "full_name": "android.util.StateSet"}, {"package_name": "android.os", "class_name": "StatFs", "full_name": "android.os.StatFs"}, {"package_name": "android.text", "class_name": "StaticLayout", "full_name": "android.text.StaticLayout"}, {"package_name": "android.text", "class_name": "StaticLayout.Builder", "full_name": "android.text.StaticLayout.Builder"}, {"package_name": "android.util", "class_name": "StatsLog", "full_name": "android.util.StatsLog"}, {"package_name": "android.service.notification", "class_name": "StatusBarNotification", "full_name": "android.service.notification.StatusBarNotification"}, {"package_name": "android.telecom", "class_name": "StatusHints", "full_name": "android.telecom.StatusHints"}, {"package_name": "android.os.storage", "class_name": "StorageManager", "full_name": "android.os.storage.StorageManager"}, {"package_name": "android.app.usage", "class_name": "StorageStats", "full_name": "android.app.usage.StorageStats"}, {"package_name": "android.app.usage", "class_name": "StorageStatsManager", "full_name": "android.app.usage.StorageStatsManager"}, {"package_name": "android.os.storage", "class_name": "StorageVolume", "full_name": "android.os.storage.StorageVolume"}, {"package_name": "java.io", "class_name": "StreamCorruptedException", "full_name": "java.io.StreamCorruptedException"}, {"package_name": "java.util.logging", "class_name": "StreamHandler", "full_name": "java.util.logging.StreamHandler"}, {"package_name": "android.telephony.mbms", "class_name": "StreamingService", "full_name": "android.telephony.mbms.StreamingService"}, {"package_name": "android.telephony.mbms", "class_name": "StreamingServiceCallback", "full_name": "android.telephony.mbms.StreamingServiceCallback"}, {"package_name": "android.telephony.mbms", "class_name": "StreamingServiceInfo", "full_name": "android.telephony.mbms.StreamingServiceInfo"}, {"package_name": "javax.xml.transform.stream", "class_name": "StreamResult", "full_name": "javax.xml.transform.stream.StreamResult"}, {"package_name": "javax.xml.transform.stream", "class_name": "StreamSource", "full_name": "javax.xml.transform.stream.StreamSource"}, {"package_name": "java.util.stream", "class_name": "StreamSupport", "full_name": "java.util.stream.StreamSupport"}, {"package_name": "java.io", "class_name": "StreamTokenizer", "full_name": "java.io.StreamTokenizer"}, {"package_name": "org.apache.http.conn.ssl", "class_name": "StrictHostnameVerifier", "full_name": "org.apache.http.conn.ssl.StrictHostnameVerifier"}, {"package_name": "java.lang", "class_name": "StrictMath", "full_name": "java.lang.StrictMath"}, {"package_name": "android.os", "class_name": "StrictMode", "full_name": "android.os.StrictMode"}, {"package_name": "android.os", "class_name": "StrictMode.OnThreadViolationListener", "full_name": "android.os.StrictMode.OnThreadViolationListener"}, {"package_name": "android.os", "class_name": "StrictMode.OnVmViolationListener", "full_name": "android.os.StrictMode.OnVmViolationListener"}, {"package_name": "android.os", "class_name": "StrictMode.ThreadPolicy", "full_name": "android.os.StrictMode.ThreadPolicy"}, {"package_name": "android.os", "class_name": "StrictMode.ThreadPolicy.Builder", "full_name": "android.os.StrictMode.ThreadPolicy.Builder"}, {"package_name": "android.os", "class_name": "StrictMode.VmPolicy", "full_name": "android.os.StrictMode.VmPolicy"}, {"package_name": "android.os", "class_name": "StrictMode.VmPolicy.Builder", "full_name": "android.os.StrictMode.VmPolicy.Builder"}, {"package_name": "android.text.style", "class_name": "StrikethroughSpan", "full_name": "android.text.style.StrikethroughSpan"}, {"package_name": "java.lang", "class_name": "String", "full_name": "java.lang.String"}, {"package_name": "java.lang", "class_name": "StringBuffer", "full_name": "java.lang.StringBuffer"}, {"package_name": "java.io", "class_name": "StringBufferInputStream", "full_name": "java.io.StringBufferInputStream"}, {"package_name": "java.lang", "class_name": "StringBuilder", "full_name": "java.lang.StringBuilder"}, {"package_name": "android.util", "class_name": "StringBuilderPrinter", "full_name": "android.util.StringBuilderPrinter"}, {"package_name": "java.text", "class_name": "StringCharacterIterator", "full_name": "java.text.StringCharacterIterator"}, {"package_name": "java.lang", "class_name": "StringIndexOutOfBoundsException", "full_name": "java.lang.StringIndexOutOfBoundsException"}, {"package_name": "java.util", "class_name": "StringJoiner", "full_name": "java.util.StringJoiner"}, {"package_name": "android.icu.text", "class_name": "StringPrepParseException", "full_name": "android.icu.text.StringPrepParseException"}, {"package_name": "java.io", "class_name": "StringReader", "full_name": "java.io.StringReader"}, {"package_name": "android.icu.text", "class_name": "StringSearch", "full_name": "android.icu.text.StringSearch"}, {"package_name": "java.util", "class_name": "StringTokenizer", "full_name": "java.util.StringTokenizer"}, {"package_name": "java.io", "class_name": "StringWriter", "full_name": "java.io.StringWriter"}, {"package_name": "android.security.keystore", "class_name": "StrongBoxUnavailableException", "full_name": "android.security.keystore.StrongBoxUnavailableException"}, {"package_name": "java.sql", "class_name": "Struct", "full_name": "java.sql.Struct"}, {"package_name": "android.system", "class_name": "StructPollfd", "full_name": "android.system.StructPollfd"}, {"package_name": "android.system", "class_name": "StructStat", "full_name": "android.system.StructStat"}, {"package_name": "android.system", "class_name": "StructStatVfs", "full_name": "android.system.StructStatVfs"}, {"package_name": "android.system", "class_name": "StructTimespec", "full_name": "android.system.StructTimespec"}, {"package_name": "android.system", "class_name": "StructUtsname", "full_name": "android.system.StructUtsname"}, {"package_name": "android.text.style", "class_name": "StyleSpan", "full_name": "android.text.style.StyleSpan"}, {"package_name": "javax.security.auth", "class_name": "Subject", "full_name": "javax.security.auth.Subject"}, {"package_name": "javax.security.auth", "class_name": "SubjectDomainCombiner", "full_name": "javax.security.auth.SubjectDomainCombiner"}, {"package_name": "android.view", "class_name": "SubMenu", "full_name": "android.view.SubMenu"}, {"package_name": "android.net.wifi.aware", "class_name": "SubscribeConfig", "full_name": "android.net.wifi.aware.SubscribeConfig"}, {"package_name": "android.net.wifi.aware", "class_name": "SubscribeConfig.Builder", "full_name": "android.net.wifi.aware.SubscribeConfig.Builder"}, {"package_name": "android.net.wifi.aware", "class_name": "SubscribeDiscoverySession", "full_name": "android.net.wifi.aware.SubscribeDiscoverySession"}, {"package_name": "android.telephony", "class_name": "SubscriptionInfo", "full_name": "android.telephony.SubscriptionInfo"}, {"package_name": "android.telephony", "class_name": "SubscriptionManager", "full_name": "android.telephony.SubscriptionManager"}, {"package_name": "android.telephony", "class_name": "SubscriptionManager.OnSubscriptionsChangedListener", "full_name": "android.telephony.SubscriptionManager.OnSubscriptionsChangedListener"}, {"package_name": "android.telephony", "class_name": "SubscriptionPlan", "full_name": "android.telephony.SubscriptionPlan"}, {"package_name": "android.telephony", "class_name": "SubscriptionPlan.Builder", "full_name": "android.telephony.SubscriptionPlan.Builder"}, {"package_name": "android.text.style", "class_name": "SubscriptSpan", "full_name": "android.text.style.SubscriptSpan"}, {"package_name": "android.media", "class_name": "SubtitleData", "full_name": "android.media.SubtitleData"}, {"package_name": "android.view.textservice", "class_name": "SuggestionsInfo", "full_name": "android.view.textservice.SuggestionsInfo"}, {"package_name": "android.text.style", "class_name": "SuggestionSpan", "full_name": "android.text.style.SuggestionSpan"}, {"package_name": "android.graphics", "class_name": "SumPathEffect", "full_name": "android.graphics.SumPathEffect"}, {"package_name": "android.text.style", "class_name": "SuperscriptSpan", "full_name": "android.text.style.SuperscriptSpan"}, {"package_name": "android.net.wifi", "class_name": "SupplicantState", "full_name": "android.net.wifi.SupplicantState"}, {"package_name": "android.test.suitebuilder.annotation", "class_name": "Suppress", "full_name": "android.test.suitebuilder.annotation.Suppress"}, {"package_name": "android.annotation", "class_name": "SuppressLint", "full_name": "android.annotation.SuppressLint"}, {"package_name": "java.lang", "class_name": "SuppressWarnings", "full_name": "java.lang.SuppressWarnings"}, {"package_name": "android.view", "class_name": "Surface", "full_name": "android.view.Surface"}, {"package_name": "android.view", "class_name": "Surface.OutOfResourcesException", "full_name": "android.view.Surface.OutOfResourcesException"}, {"package_name": "android.view", "class_name": "SurfaceHolder", "full_name": "android.view.SurfaceHolder"}, {"package_name": "android.view", "class_name": "SurfaceHolder.BadSurfaceTypeException", "full_name": "android.view.SurfaceHolder.BadSurfaceTypeException"}, {"package_name": "android.view", "class_name": "SurfaceHolder.Callback", "full_name": "android.view.SurfaceHolder.Callback"}, {"package_name": "android.graphics", "class_name": "SurfaceTexture", "full_name": "android.graphics.SurfaceTexture"}, {"package_name": "android.graphics", "class_name": "SurfaceTexture.OnFrameAvailableListener", "full_name": "android.graphics.SurfaceTexture.OnFrameAvailableListener"}, {"package_name": "android.graphics", "class_name": "SurfaceTexture.OutOfResourcesException", "full_name": "android.graphics.SurfaceTexture.OutOfResourcesException"}, {"package_name": "android.view", "class_name": "SurfaceView", "full_name": "android.view.SurfaceView"}, {"package_name": "android.graphics", "class_name": "SweepGradient", "full_name": "android.graphics.SweepGradient"}, {"package_name": "android.widget", "class_name": "Switch", "full_name": "android.widget.Switch"}, {"package_name": "android.preference", "class_name": "SwitchPreference", "full_name": "android.preference.SwitchPreference"}, {"package_name": "android.icu.text", "class_name": "SymbolTable", "full_name": "android.icu.text.SymbolTable"}, {"package_name": "android.content", "class_name": "SyncAdapterType", "full_name": "android.content.SyncAdapterType"}, {"package_name": "android.test", "class_name": "SyncBaseInstrumentation", "full_name": "android.test.SyncBaseInstrumentation"}, {"package_name": "android.content", "class_name": "SyncContext", "full_name": "android.content.SyncContext"}, {"package_name": "java.io", "class_name": "SyncFailedException", "full_name": "java.io.SyncFailedException"}, {"package_name": "android.content", "class_name": "SyncInfo", "full_name": "android.content.SyncInfo"}, {"package_name": "android.media", "class_name": "SyncParams", "full_name": "android.media.SyncParams"}, {"package_name": "android.content", "class_name": "SyncRequest", "full_name": "android.content.SyncRequest"}, {"package_name": "android.content", "class_name": "SyncRequest.Builder", "full_name": "android.content.SyncRequest.Builder"}, {"package_name": "android.content", "class_name": "SyncResult", "full_name": "android.content.SyncResult"}, {"package_name": "android.provider", "class_name": "SyncStateContract", "full_name": "android.provider.SyncStateContract"}, {"package_name": "android.provider", "class_name": "SyncStateContract.Columns", "full_name": "android.provider.SyncStateContract.Columns"}, {"package_name": "android.provider", "class_name": "SyncStateContract.Constants", "full_name": "android.provider.SyncStateContract.Constants"}, {"package_name": "android.provider", "class_name": "SyncStateContract.Helpers", "full_name": "android.provider.SyncStateContract.Helpers"}, {"package_name": "android.content", "class_name": "SyncStats", "full_name": "android.content.SyncStats"}, {"package_name": "android.content", "class_name": "SyncStatusObserver", "full_name": "android.content.SyncStatusObserver"}, {"package_name": "android.speech.tts", "class_name": "SynthesisCallback", "full_name": "android.speech.tts.SynthesisCallback"}, {"package_name": "android.speech.tts", "class_name": "SynthesisRequest", "full_name": "android.speech.tts.SynthesisRequest"}, {"package_name": "java.lang", "class_name": "System", "full_name": "java.lang.System"}, {"package_name": "android.os", "class_name": "SystemClock", "full_name": "android.os.SystemClock"}, {"package_name": "android.os.health", "class_name": "SystemHealthManager", "full_name": "android.os.health.SystemHealthManager"}, {"package_name": "android.app.admin", "class_name": "SystemUpdateInfo", "full_name": "android.app.admin.SystemUpdateInfo"}, {"package_name": "android.app.admin", "class_name": "SystemUpdatePolicy", "full_name": "android.app.admin.SystemUpdatePolicy"}, {"package_name": "android.app.admin", "class_name": "SystemUpdatePolicy.ValidationFailedException", "full_name": "android.app.admin.SystemUpdatePolicy.ValidationFailedException"}, {"package_name": "android.app", "class_name": "TabActivity", "full_name": "android.app.TabActivity"}, {"package_name": "android.widget", "class_name": "TabHost", "full_name": "android.widget.TabHost"}, {"package_name": "android.widget", "class_name": "TabHost.OnTabChangeListener", "full_name": "android.widget.TabHost.OnTabChangeListener"}, {"package_name": "android.widget", "class_name": "TabHost.TabContentFactory", "full_name": "android.widget.TabHost.TabContentFactory"}, {"package_name": "android.widget", "class_name": "TabHost.TabSpec", "full_name": "android.widget.TabHost.TabSpec"}, {"package_name": "android.widget", "class_name": "TableLayout", "full_name": "android.widget.TableLayout"}, {"package_name": "android.widget", "class_name": "TableLayout.LayoutParams", "full_name": "android.widget.TableLayout.LayoutParams"}, {"package_name": "android.widget", "class_name": "TableRow", "full_name": "android.widget.TableRow"}, {"package_name": "android.widget", "class_name": "TableRow.LayoutParams", "full_name": "android.widget.TableRow.LayoutParams"}, {"package_name": "android.text.style", "class_name": "TabStopSpan", "full_name": "android.text.style.TabStopSpan"}, {"package_name": "android.text.style", "class_name": "TabStopSpan.Standard", "full_name": "android.text.style.TabStopSpan.Standard"}, {"package_name": "android.widget", "class_name": "TabWidget", "full_name": "android.widget.TabWidget"}, {"package_name": "android.nfc", "class_name": "Tag", "full_name": "android.nfc.Tag"}, {"package_name": "android.nfc", "class_name": "TagLostException", "full_name": "android.nfc.TagLostException"}, {"package_name": "android.nfc.tech", "class_name": "TagTechnology", "full_name": "android.nfc.tech.TagTechnology"}, {"package_name": "android.icu.util", "class_name": "TaiwanCalendar", "full_name": "android.icu.util.TaiwanCalendar"}, {"package_name": "java.lang.annotation", "class_name": "Target", "full_name": "java.lang.annotation.Target"}, {"package_name": "android.annotation", "class_name": "TargetApi", "full_name": "android.annotation.TargetApi"}, {"package_name": "android.app", "class_name": "TaskStackBuilder", "full_name": "android.app.TaskStackBuilder"}, {"package_name": "android.telecom", "class_name": "TelecomManager", "full_name": "android.telecom.TelecomManager"}, {"package_name": "android.provider", "class_name": "Telephony", "full_name": "android.provider.Telephony"}, {"package_name": "android.provider", "class_name": "Telephony.BaseMmsColumns", "full_name": "android.provider.Telephony.BaseMmsColumns"}, {"package_name": "android.provider", "class_name": "Telephony.CanonicalAddressesColumns", "full_name": "android.provider.Telephony.CanonicalAddressesColumns"}, {"package_name": "android.provider", "class_name": "Telephony.CarrierId", "full_name": "android.provider.Telephony.CarrierId"}, {"package_name": "android.provider", "class_name": "Telephony.Carriers", "full_name": "android.provider.Telephony.Carriers"}, {"package_name": "android.provider", "class_name": "Telephony.Mms", "full_name": "android.provider.Telephony.Mms"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Addr", "full_name": "android.provider.Telephony.Mms.Addr"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Draft", "full_name": "android.provider.Telephony.Mms.Draft"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Inbox", "full_name": "android.provider.Telephony.Mms.Inbox"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Intents", "full_name": "android.provider.Telephony.Mms.Intents"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Outbox", "full_name": "android.provider.Telephony.Mms.Outbox"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Part", "full_name": "android.provider.Telephony.Mms.Part"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Rate", "full_name": "android.provider.Telephony.Mms.Rate"}, {"package_name": "android.provider", "class_name": "Telephony.Mms.Sent", "full_name": "android.provider.Telephony.Mms.Sent"}, {"package_name": "android.provider", "class_name": "Telephony.MmsSms", "full_name": "android.provider.Telephony.MmsSms"}, {"package_name": "android.provider", "class_name": "Telephony.MmsSms.PendingMessages", "full_name": "android.provider.Telephony.MmsSms.PendingMessages"}, {"package_name": "android.provider", "class_name": "Telephony.ServiceStateTable", "full_name": "android.provider.Telephony.ServiceStateTable"}, {"package_name": "android.provider", "class_name": "Telephony.Sms", "full_name": "android.provider.Telephony.Sms"}, {"package_name": "android.provider", "class_name": "Telephony.Sms.Conversations", "full_name": "android.provider.Telephony.Sms.Conversations"}, {"package_name": "android.provider", "class_name": "Telephony.Sms.Draft", "full_name": "android.provider.Telephony.Sms.Draft"}, {"package_name": "android.provider", "class_name": "Telephony.Sms.Inbox", "full_name": "android.provider.Telephony.Sms.Inbox"}, {"package_name": "android.provider", "class_name": "Telephony.Sms.Intents", "full_name": "android.provider.Telephony.Sms.Intents"}, {"package_name": "android.provider", "class_name": "Telephony.Sms.Outbox", "full_name": "android.provider.Telephony.Sms.Outbox"}, {"package_name": "android.provider", "class_name": "Telephony.Sms.Sent", "full_name": "android.provider.Telephony.Sms.Sent"}, {"package_name": "android.provider", "class_name": "Telephony.TextBasedSmsColumns", "full_name": "android.provider.Telephony.TextBasedSmsColumns"}, {"package_name": "android.provider", "class_name": "Telephony.Threads", "full_name": "android.provider.Telephony.Threads"}, {"package_name": "android.provider", "class_name": "Telephony.ThreadsColumns", "full_name": "android.provider.Telephony.ThreadsColumns"}, {"package_name": "android.telephony", "class_name": "TelephonyManager", "full_name": "android.telephony.TelephonyManager"}, {"package_name": "android.telephony", "class_name": "TelephonyManager.UssdResponseCallback", "full_name": "android.telephony.TelephonyManager.UssdResponseCallback"}, {"package_name": "android.telephony", "class_name": "TelephonyScanManager", "full_name": "android.telephony.TelephonyScanManager"}, {"package_name": "android.telephony", "class_name": "TelephonyScanManager.NetworkScanCallback", "full_name": "android.telephony.TelephonyScanManager.NetworkScanCallback"}, {"package_name": "javax.xml.transform", "class_name": "Templates", "full_name": "javax.xml.transform.Templates"}, {"package_name": "javax.xml.transform.sax", "class_name": "TemplatesHandler", "full_name": "javax.xml.transform.sax.TemplatesHandler"}, {"package_name": "java.time.temporal", "class_name": "Temporal", "full_name": "java.time.temporal.Temporal"}, {"package_name": "java.time.temporal", "class_name": "TemporalAccessor", "full_name": "java.time.temporal.TemporalAccessor"}, {"package_name": "java.time.temporal", "class_name": "TemporalAdjuster", "full_name": "java.time.temporal.TemporalAdjuster"}, {"package_name": "java.time.temporal", "class_name": "TemporalAdjusters", "full_name": "java.time.temporal.TemporalAdjusters"}, {"package_name": "java.time.temporal", "class_name": "TemporalAmount", "full_name": "java.time.temporal.TemporalAmount"}, {"package_name": "java.time.temporal", "class_name": "TemporalField", "full_name": "java.time.temporal.TemporalField"}, {"package_name": "java.time.temporal", "class_name": "TemporalQueries", "full_name": "java.time.temporal.TemporalQueries"}, {"package_name": "java.time.temporal", "class_name": "TemporalUnit", "full_name": "java.time.temporal.TemporalUnit"}, {"package_name": "junit.framework", "class_name": "Test", "full_name": "junit.framework.Test"}, {"package_name": "junit.framework", "class_name": "TestCase", "full_name": "junit.framework.TestCase"}, {"package_name": "junit.framework", "class_name": "TestFailure", "full_name": "junit.framework.TestFailure"}, {"package_name": "junit.framework", "class_name": "TestListener", "full_name": "junit.framework.TestListener"}, {"package_name": "android.os", "class_name": "TestLooperManager", "full_name": "android.os.TestLooperManager"}, {"package_name": "android.test.suitebuilder", "class_name": "TestMethod", "full_name": "android.test.suitebuilder.TestMethod"}, {"package_name": "junit.framework", "class_name": "TestResult", "full_name": "junit.framework.TestResult"}, {"package_name": "junit.framework", "class_name": "TestSuite", "full_name": "junit.framework.TestSuite"}, {"package_name": "android.test.suitebuilder", "class_name": "TestSuiteBuilder", "full_name": "android.test.suitebuilder.TestSuiteBuilder"}, {"package_name": "android.test.suitebuilder", "class_name": "TestSuiteBuilder.FailedToCreateTests", "full_name": "android.test.suitebuilder.TestSuiteBuilder.FailedToCreateTests"}, {"package_name": "junit.runner", "class_name": "TestSuiteLoader", "full_name": "junit.runner.TestSuiteLoader"}, {"package_name": "android.test", "class_name": "TestSuiteProvider", "full_name": "android.test.TestSuiteProvider"}, {"package_name": "dalvik.annotation", "class_name": "TestTarget", "full_name": "dalvik.annotation.TestTarget"}, {"package_name": "dalvik.annotation", "class_name": "TestTargetClass", "full_name": "dalvik.annotation.TestTargetClass"}, {"package_name": "android.text.style", "class_name": "TextAppearanceSpan", "full_name": "android.text.style.TextAppearanceSpan"}, {"package_name": "java.awt.font", "class_name": "TextAttribute", "full_name": "java.awt.font.TextAttribute"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassification", "full_name": "android.view.textclassifier.TextClassification"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassification.Builder", "full_name": "android.view.textclassifier.TextClassification.Builder"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassification.Request", "full_name": "android.view.textclassifier.TextClassification.Request"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassification.Request.Builder", "full_name": "android.view.textclassifier.TextClassification.Request.Builder"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassificationContext", "full_name": "android.view.textclassifier.TextClassificationContext"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassificationContext.Builder", "full_name": "android.view.textclassifier.TextClassificationContext.Builder"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassificationManager", "full_name": "android.view.textclassifier.TextClassificationManager"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassificationSessionFactory", "full_name": "android.view.textclassifier.TextClassificationSessionFactory"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassificationSessionId", "full_name": "android.view.textclassifier.TextClassificationSessionId"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassifier", "full_name": "android.view.textclassifier.TextClassifier"}, {"package_name": "android.view.textclassifier", "class_name": "TextClassifier.EntityConfig", "full_name": "android.view.textclassifier.TextClassifier.EntityConfig"}, {"package_name": "android.widget", "class_name": "TextClock", "full_name": "android.widget.TextClock"}, {"package_name": "android.text", "class_name": "TextDirectionHeuristic", "full_name": "android.text.TextDirectionHeuristic"}, {"package_name": "android.text", "class_name": "TextDirectionHeuristics", "full_name": "android.text.TextDirectionHeuristics"}, {"package_name": "android.sax", "class_name": "TextElementListener", "full_name": "android.sax.TextElementListener"}, {"package_name": "android.view.textservice", "class_name": "TextInfo", "full_name": "android.view.textservice.TextInfo"}, {"package_name": "android.text.method", "class_name": "TextKeyListener", "full_name": "android.text.method.TextKeyListener"}, {"package_name": "android.text.method", "class_name": "TextKeyListener.Capitalize", "full_name": "android.text.method.TextKeyListener.Capitalize"}, {"package_name": "android.view.textclassifier", "class_name": "TextLinks", "full_name": "android.view.textclassifier.TextLinks"}, {"package_name": "android.view.textclassifier", "class_name": "TextLinks.Builder", "full_name": "android.view.textclassifier.TextLinks.Builder"}, {"package_name": "android.view.textclassifier", "class_name": "TextLinks.Request", "full_name": "android.view.textclassifier.TextLinks.Request"}, {"package_name": "android.view.textclassifier", "class_name": "TextLinks.Request.Builder", "full_name": "android.view.textclassifier.TextLinks.Request.Builder"}, {"package_name": "android.view.textclassifier", "class_name": "TextLinks.TextLink", "full_name": "android.view.textclassifier.TextLinks.TextLink"}, {"package_name": "android.view.textclassifier", "class_name": "TextLinks.TextLinkSpan", "full_name": "android.view.textclassifier.TextLinks.TextLinkSpan"}, {"package_name": "android.text", "class_name": "TextPaint", "full_name": "android.text.TextPaint"}, {"package_name": "android.view.textclassifier", "class_name": "TextSelection", "full_name": "android.view.textclassifier.TextSelection"}, {"package_name": "android.view.textclassifier", "class_name": "TextSelection.Builder", "full_name": "android.view.textclassifier.TextSelection.Builder"}, {"package_name": "android.view.textclassifier", "class_name": "TextSelection.Request", "full_name": "android.view.textclassifier.TextSelection.Request"}, {"package_name": "android.view.textclassifier", "class_name": "TextSelection.Request.Builder", "full_name": "android.view.textclassifier.TextSelection.Request.Builder"}, {"package_name": "android.view.textservice", "class_name": "TextServicesManager", "full_name": "android.view.textservice.TextServicesManager"}, {"package_name": "java.time.format", "class_name": "TextStyle", "full_name": "java.time.format.TextStyle"}, {"package_name": "android.widget", "class_name": "TextSwitcher", "full_name": "android.widget.TextSwitcher"}, {"package_name": "android.speech.tts", "class_name": "TextToSpeech", "full_name": "android.speech.tts.TextToSpeech"}, {"package_name": "android.speech.tts", "class_name": "TextToSpeech.Engine", "full_name": "android.speech.tts.TextToSpeech.Engine"}, {"package_name": "android.speech.tts", "class_name": "TextToSpeech.EngineInfo", "full_name": "android.speech.tts.TextToSpeech.EngineInfo"}, {"package_name": "android.speech.tts", "class_name": "TextToSpeech.OnInitListener", "full_name": "android.speech.tts.TextToSpeech.OnInitListener"}, {"package_name": "android.speech.tts", "class_name": "TextToSpeech.OnUtteranceCompletedListener", "full_name": "android.speech.tts.TextToSpeech.OnUtteranceCompletedListener"}, {"package_name": "android.speech.tts", "class_name": "TextToSpeechService", "full_name": "android.speech.tts.TextToSpeechService"}, {"package_name": "android.view", "class_name": "TextureView", "full_name": "android.view.TextureView"}, {"package_name": "android.view", "class_name": "TextureView.SurfaceTextureListener", "full_name": "android.view.TextureView.SurfaceTextureListener"}, {"package_name": "android.text", "class_name": "TextUtils", "full_name": "android.text.TextUtils"}, {"package_name": "android.text", "class_name": "TextUtils.EllipsizeCallback", "full_name": "android.text.TextUtils.EllipsizeCallback"}, {"package_name": "android.text", "class_name": "TextUtils.SimpleStringSplitter", "full_name": "android.text.TextUtils.SimpleStringSplitter"}, {"package_name": "android.text", "class_name": "TextUtils.StringSplitter", "full_name": "android.text.TextUtils.StringSplitter"}, {"package_name": "android.text", "class_name": "TextUtils.TruncateAt", "full_name": "android.text.TextUtils.TruncateAt"}, {"package_name": "android.service.autofill", "class_name": "TextValueSanitizer", "full_name": "android.service.autofill.TextValueSanitizer"}, {"package_name": "android.widget", "class_name": "TextView", "full_name": "android.widget.TextView"}, {"package_name": "android.widget", "class_name": "TextView.BufferType", "full_name": "android.widget.TextView.BufferType"}, {"package_name": "android.widget", "class_name": "TextView.OnEditorActionListener", "full_name": "android.widget.TextView.OnEditorActionListener"}, {"package_name": "android.widget", "class_name": "TextView.SavedState", "full_name": "android.widget.TextView.SavedState"}, {"package_name": "android.text", "class_name": "TextWatcher", "full_name": "android.text.TextWatcher"}, {"package_name": "java.time.chrono", "class_name": "ThaiBuddhistChronology", "full_name": "java.time.chrono.ThaiBuddhistChronology"}, {"package_name": "java.time.chrono", "class_name": "ThaiBuddhistDate", "full_name": "java.time.chrono.ThaiBuddhistDate"}, {"package_name": "java.time.chrono", "class_name": "ThaiBuddhistEra", "full_name": "java.time.chrono.ThaiBuddhistEra"}, {"package_name": "android.widget", "class_name": "ThemedSpinnerAdapter", "full_name": "android.widget.ThemedSpinnerAdapter"}, {"package_name": "java.lang", "class_name": "Thread", "full_name": "java.lang.Thread"}, {"package_name": "java.lang", "class_name": "Thread.State", "full_name": "java.lang.Thread.State"}, {"package_name": "java.lang", "class_name": "Thread.UncaughtExceptionHandler", "full_name": "java.lang.Thread.UncaughtExceptionHandler"}, {"package_name": "java.lang", "class_name": "ThreadDeath", "full_name": "java.lang.ThreadDeath"}, {"package_name": "java.util.concurrent", "class_name": "ThreadFactory", "full_name": "java.util.concurrent.ThreadFactory"}, {"package_name": "java.lang", "class_name": "ThreadGroup", "full_name": "java.lang.ThreadGroup"}, {"package_name": "java.util.concurrent", "class_name": "ThreadLocalRandom", "full_name": "java.util.concurrent.ThreadLocalRandom"}, {"package_name": "java.util.concurrent", "class_name": "ThreadPoolExecutor", "full_name": "java.util.concurrent.ThreadPoolExecutor"}, {"package_name": "java.util.concurrent", "class_name": "ThreadPoolExecutor.AbortPolicy", "full_name": "java.util.concurrent.ThreadPoolExecutor.AbortPolicy"}, {"package_name": "java.util.concurrent", "class_name": "ThreadPoolExecutor.CallerRunsPolicy", "full_name": "java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy"}, {"package_name": "java.util.concurrent", "class_name": "ThreadPoolExecutor.DiscardOldestPolicy", "full_name": "java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy"}, {"package_name": "java.util.concurrent", "class_name": "ThreadPoolExecutor.DiscardPolicy", "full_name": "java.util.concurrent.ThreadPoolExecutor.DiscardPolicy"}, {"package_name": "java.lang", "class_name": "Throwable", "full_name": "java.lang.Throwable"}, {"package_name": "android.media", "class_name": "ThumbnailUtils", "full_name": "android.media.ThumbnailUtils"}, {"package_name": "android.service.quicksettings", "class_name": "Tile", "full_name": "android.service.quicksettings.Tile"}, {"package_name": "android.service.quicksettings", "class_name": "TileService", "full_name": "android.service.quicksettings.TileService"}, {"package_name": "android.text.format", "class_name": "Time", "full_name": "android.text.format.Time"}, {"package_name": "java.sql", "class_name": "Time", "full_name": "java.sql.Time"}, {"package_name": "android.animation", "class_name": "TimeAnimator", "full_name": "android.animation.TimeAnimator"}, {"package_name": "android.animation", "class_name": "TimeAnimator.TimeListener", "full_name": "android.animation.TimeAnimator.TimeListener"}, {"package_name": "android.media", "class_name": "TimedMetaData", "full_name": "android.media.TimedMetaData"}, {"package_name": "android.media", "class_name": "TimedText", "full_name": "android.media.TimedText"}, {"package_name": "android.util", "class_name": "TimeFormatException", "full_name": "android.util.TimeFormatException"}, {"package_name": "android.animation", "class_name": "TimeInterpolator", "full_name": "android.animation.TimeInterpolator"}, {"package_name": "android.text.method", "class_name": "TimeKeyListener", "full_name": "android.text.method.TimeKeyListener"}, {"package_name": "java.util.concurrent", "class_name": "TimeoutException", "full_name": "java.util.concurrent.TimeoutException"}, {"package_name": "android.widget", "class_name": "TimePicker", "full_name": "android.widget.TimePicker"}, {"package_name": "android.widget", "class_name": "TimePicker.OnTimeChangedListener", "full_name": "android.widget.TimePicker.OnTimeChangedListener"}, {"package_name": "android.app", "class_name": "TimePickerDialog", "full_name": "android.app.TimePickerDialog"}, {"package_name": "android.app", "class_name": "TimePickerDialog.OnTimeSetListener", "full_name": "android.app.TimePickerDialog.OnTimeSetListener"}, {"package_name": "java.util", "class_name": "Timer", "full_name": "java.util.Timer"}, {"package_name": "android.os.health", "class_name": "TimerStat", "full_name": "android.os.health.TimerStat"}, {"package_name": "java.util", "class_name": "TimerTask", "full_name": "java.util.TimerTask"}, {"package_name": "java.security", "class_name": "Timestamp", "full_name": "java.security.Timestamp"}, {"package_name": "java.sql", "class_name": "Timestamp", "full_name": "java.sql.Timestamp"}, {"package_name": "android.icu.util", "class_name": "TimeUnit", "full_name": "android.icu.util.TimeUnit"}, {"package_name": "java.util.concurrent", "class_name": "TimeUnit", "full_name": "java.util.concurrent.TimeUnit"}, {"package_name": "android.util", "class_name": "TimeUtils", "full_name": "android.util.TimeUtils"}, {"package_name": "android.icu.util", "class_name": "TimeZone", "full_name": "android.icu.util.TimeZone"}, {"package_name": "java.util", "class_name": "TimeZone", "full_name": "java.util.TimeZone"}, {"package_name": "android.icu.util", "class_name": "TimeZone.SystemTimeZoneType", "full_name": "android.icu.util.TimeZone.SystemTimeZoneType"}, {"package_name": "android.icu.text", "class_name": "TimeZoneFormat", "full_name": "android.icu.text.TimeZoneFormat"}, {"package_name": "android.icu.text", "class_name": "TimeZoneFormat.GMTOffsetPatternType", "full_name": "android.icu.text.TimeZoneFormat.GMTOffsetPatternType"}, {"package_name": "android.icu.text", "class_name": "TimeZoneFormat.ParseOption", "full_name": "android.icu.text.TimeZoneFormat.ParseOption"}, {"package_name": "android.icu.text", "class_name": "TimeZoneFormat.Style", "full_name": "android.icu.text.TimeZoneFormat.Style"}, {"package_name": "android.icu.text", "class_name": "TimeZoneFormat.TimeType", "full_name": "android.icu.text.TimeZoneFormat.TimeType"}, {"package_name": "android.icu.text", "class_name": "TimeZoneNames", "full_name": "android.icu.text.TimeZoneNames"}, {"package_name": "android.icu.text", "class_name": "TimeZoneNames.NameType", "full_name": "android.icu.text.TimeZoneNames.NameType"}, {"package_name": "android.util", "class_name": "TimingLogger", "full_name": "android.util.TimingLogger"}, {"package_name": "android.widget", "class_name": "Toast", "full_name": "android.widget.Toast"}, {"package_name": "android.widget", "class_name": "ToggleButton", "full_name": "android.widget.ToggleButton"}, {"package_name": "android.os", "class_name": "TokenWatcher", "full_name": "android.os.TokenWatcher"}, {"package_name": "android.media", "class_name": "ToneGenerator", "full_name": "android.media.ToneGenerator"}, {"package_name": "android.widget", "class_name": "Toolbar", "full_name": "android.widget.Toolbar"}, {"package_name": "android.widget", "class_name": "Toolbar.LayoutParams", "full_name": "android.widget.Toolbar.LayoutParams"}, {"package_name": "android.widget", "class_name": "Toolbar.OnMenuItemClickListener", "full_name": "android.widget.Toolbar.OnMenuItemClickListener"}, {"package_name": "java.util", "class_name": "TooManyListenersException", "full_name": "java.util.TooManyListenersException"}, {"package_name": "android.text.method", "class_name": "Touch", "full_name": "android.text.method.Touch"}, {"package_name": "android.view", "class_name": "TouchDelegate", "full_name": "android.view.TouchDelegate"}, {"package_name": "android.test", "class_name": "TouchUtils", "full_name": "android.test.TouchUtils"}, {"package_name": "android.os", "class_name": "Trace", "full_name": "android.os.Trace"}, {"package_name": "android.webkit", "class_name": "TracingConfig", "full_name": "android.webkit.TracingConfig"}, {"package_name": "android.webkit", "class_name": "TracingConfig.Builder", "full_name": "android.webkit.TracingConfig.Builder"}, {"package_name": "android.webkit", "class_name": "TracingController", "full_name": "android.webkit.TracingController"}, {"package_name": "android.net", "class_name": "TrafficStats", "full_name": "android.net.TrafficStats"}, {"package_name": "android.os", "class_name": "TransactionTooLargeException", "full_name": "android.os.TransactionTooLargeException"}, {"package_name": "android.service.autofill", "class_name": "Transformation", "full_name": "android.service.autofill.Transformation"}, {"package_name": "android.view.animation", "class_name": "Transformation", "full_name": "android.view.animation.Transformation"}, {"package_name": "android.text.method", "class_name": "TransformationMethod", "full_name": "android.text.method.TransformationMethod"}, {"package_name": "javax.xml.transform", "class_name": "Transformer", "full_name": "javax.xml.transform.Transformer"}, {"package_name": "javax.xml.transform", "class_name": "TransformerConfigurationException", "full_name": "javax.xml.transform.TransformerConfigurationException"}, {"package_name": "javax.xml.transform", "class_name": "TransformerException", "full_name": "javax.xml.transform.TransformerException"}, {"package_name": "javax.xml.transform", "class_name": "TransformerFactory", "full_name": "javax.xml.transform.TransformerFactory"}, {"package_name": "javax.xml.transform", "class_name": "TransformerFactoryConfigurationError", "full_name": "javax.xml.transform.TransformerFactoryConfigurationError"}, {"package_name": "javax.xml.transform.sax", "class_name": "TransformerHandler", "full_name": "javax.xml.transform.sax.TransformerHandler"}, {"package_name": "android.transition", "class_name": "Transition", "full_name": "android.transition.Transition"}, {"package_name": "android.transition", "class_name": "Transition.EpicenterCallback", "full_name": "android.transition.Transition.EpicenterCallback"}, {"package_name": "android.transition", "class_name": "Transition.TransitionListener", "full_name": "android.transition.Transition.TransitionListener"}, {"package_name": "android.graphics.drawable", "class_name": "TransitionDrawable", "full_name": "android.graphics.drawable.TransitionDrawable"}, {"package_name": "android.transition", "class_name": "TransitionInflater", "full_name": "android.transition.TransitionInflater"}, {"package_name": "android.transition", "class_name": "TransitionListenerAdapter", "full_name": "android.transition.TransitionListenerAdapter"}, {"package_name": "android.transition", "class_name": "TransitionManager", "full_name": "android.transition.TransitionManager"}, {"package_name": "android.transition", "class_name": "TransitionPropagation", "full_name": "android.transition.TransitionPropagation"}, {"package_name": "android.transition", "class_name": "TransitionSet", "full_name": "android.transition.TransitionSet"}, {"package_name": "android.transition", "class_name": "TransitionValues", "full_name": "android.transition.TransitionValues"}, {"package_name": "android.view.animation", "class_name": "TranslateAnimation", "full_name": "android.view.animation.TranslateAnimation"}, {"package_name": "android.hardware", "class_name": "TriggerEvent", "full_name": "android.hardware.TriggerEvent"}, {"package_name": "android.hardware", "class_name": "TriggerEventListener", "full_name": "android.hardware.TriggerEventListener"}, {"package_name": "java.security.cert", "class_name": "TrustAnchor", "full_name": "java.security.cert.TrustAnchor"}, {"package_name": "javax.net.ssl", "class_name": "TrustManager", "full_name": "javax.net.ssl.TrustManager"}, {"package_name": "javax.net.ssl", "class_name": "TrustManagerFactory", "full_name": "javax.net.ssl.TrustManagerFactory"}, {"package_name": "javax.net.ssl", "class_name": "TrustManagerFactorySpi", "full_name": "javax.net.ssl.TrustManagerFactorySpi"}, {"package_name": "android.text.style", "class_name": "TtsSpan", "full_name": "android.text.style.TtsSpan"}, {"package_name": "android.text.style", "class_name": "TtsSpan.CardinalBuilder", "full_name": "android.text.style.TtsSpan.CardinalBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.DateBuilder", "full_name": "android.text.style.TtsSpan.DateBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.DecimalBuilder", "full_name": "android.text.style.TtsSpan.DecimalBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.DigitsBuilder", "full_name": "android.text.style.TtsSpan.DigitsBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.ElectronicBuilder", "full_name": "android.text.style.TtsSpan.ElectronicBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.FractionBuilder", "full_name": "android.text.style.TtsSpan.FractionBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.MeasureBuilder", "full_name": "android.text.style.TtsSpan.MeasureBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.MoneyBuilder", "full_name": "android.text.style.TtsSpan.MoneyBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.OrdinalBuilder", "full_name": "android.text.style.TtsSpan.OrdinalBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.TelephoneBuilder", "full_name": "android.text.style.TtsSpan.TelephoneBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.TextBuilder", "full_name": "android.text.style.TtsSpan.TextBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.TimeBuilder", "full_name": "android.text.style.TtsSpan.TimeBuilder"}, {"package_name": "android.text.style", "class_name": "TtsSpan.VerbatimBuilder", "full_name": "android.text.style.TtsSpan.VerbatimBuilder"}, {"package_name": "android.media.tv", "class_name": "TvContentRating", "full_name": "android.media.tv.TvContentRating"}, {"package_name": "android.media.tv", "class_name": "TvContract", "full_name": "android.media.tv.TvContract"}, {"package_name": "android.media.tv", "class_name": "TvContract.BaseTvColumns", "full_name": "android.media.tv.TvContract.BaseTvColumns"}, {"package_name": "android.media.tv", "class_name": "TvContract.Channels", "full_name": "android.media.tv.TvContract.Channels"}, {"package_name": "android.media.tv", "class_name": "TvContract.Channels.Logo", "full_name": "android.media.tv.TvContract.Channels.Logo"}, {"package_name": "android.media.tv", "class_name": "TvContract.PreviewPrograms", "full_name": "android.media.tv.TvContract.PreviewPrograms"}, {"package_name": "android.media.tv", "class_name": "TvContract.Programs", "full_name": "android.media.tv.TvContract.Programs"}, {"package_name": "android.media.tv", "class_name": "TvContract.Programs.Genres", "full_name": "android.media.tv.TvContract.Programs.Genres"}, {"package_name": "android.media.tv", "class_name": "TvContract.RecordedPrograms", "full_name": "android.media.tv.TvContract.RecordedPrograms"}, {"package_name": "android.media.tv", "class_name": "TvContract.WatchNextPrograms", "full_name": "android.media.tv.TvContract.WatchNextPrograms"}, {"package_name": "android.media.tv", "class_name": "TvInputInfo", "full_name": "android.media.tv.TvInputInfo"}, {"package_name": "android.media.tv", "class_name": "TvInputInfo.Builder", "full_name": "android.media.tv.TvInputInfo.Builder"}, {"package_name": "android.media.tv", "class_name": "TvInputManager", "full_name": "android.media.tv.TvInputManager"}, {"package_name": "android.media.tv", "class_name": "TvInputManager.TvInputCallback", "full_name": "android.media.tv.TvInputManager.TvInputCallback"}, {"package_name": "android.media.tv", "class_name": "TvInputService", "full_name": "android.media.tv.TvInputService"}, {"package_name": "android.media.tv", "class_name": "TvInputService.HardwareSession", "full_name": "android.media.tv.TvInputService.HardwareSession"}, {"package_name": "android.media.tv", "class_name": "TvInputService.RecordingSession", "full_name": "android.media.tv.TvInputService.RecordingSession"}, {"package_name": "android.media.tv", "class_name": "TvInputService.Session", "full_name": "android.media.tv.TvInputService.Session"}, {"package_name": "android.media.tv", "class_name": "TvRecordingClient", "full_name": "android.media.tv.TvRecordingClient"}, {"package_name": "android.media.tv", "class_name": "TvRecordingClient.RecordingCallback", "full_name": "android.media.tv.TvRecordingClient.RecordingCallback"}, {"package_name": "android.media.tv", "class_name": "TvTrackInfo", "full_name": "android.media.tv.TvTrackInfo"}, {"package_name": "android.media.tv", "class_name": "TvTrackInfo.Builder", "full_name": "android.media.tv.TvTrackInfo.Builder"}, {"package_name": "android.media.tv", "class_name": "TvView", "full_name": "android.media.tv.TvView"}, {"package_name": "android.media.tv", "class_name": "TvView.OnUnhandledInputEventListener", "full_name": "android.media.tv.TvView.OnUnhandledInputEventListener"}, {"package_name": "android.media.tv", "class_name": "TvView.TimeShiftPositionCallback", "full_name": "android.media.tv.TvView.TimeShiftPositionCallback"}, {"package_name": "android.media.tv", "class_name": "TvView.TvInputCallback", "full_name": "android.media.tv.TvView.TvInputCallback"}, {"package_name": "android.widget", "class_name": "TwoLineListItem", "full_name": "android.widget.TwoLineListItem"}, {"package_name": "android.preference", "class_name": "TwoStatePreference", "full_name": "android.preference.TwoStatePreference"}, {"package_name": "android.renderscript", "class_name": "Type", "full_name": "android.renderscript.Type"}, {"package_name": "java.lang.reflect", "class_name": "Type", "full_name": "java.lang.reflect.Type"}, {"package_name": "android.renderscript", "class_name": "Type.Builder", "full_name": "android.renderscript.Type.Builder"}, {"package_name": "android.renderscript", "class_name": "Type.CubemapFace", "full_name": "android.renderscript.Type.CubemapFace"}, {"package_name": "android.content.res", "class_name": "TypedArray", "full_name": "android.content.res.TypedArray"}, {"package_name": "android.util", "class_name": "TypedValue", "full_name": "android.util.TypedValue"}, {"package_name": "android.graphics", "class_name": "Typeface", "full_name": "android.graphics.Typeface"}, {"package_name": "android.graphics", "class_name": "Typeface.Builder", "full_name": "android.graphics.Typeface.Builder"}, {"package_name": "android.text.style", "class_name": "TypefaceSpan", "full_name": "android.text.style.TypefaceSpan"}, {"package_name": "javax.xml.validation", "class_name": "TypeInfoProvider", "full_name": "javax.xml.validation.TypeInfoProvider"}, {"package_name": "java.lang", "class_name": "TypeNotPresentException", "full_name": "java.lang.TypeNotPresentException"}, {"package_name": "java.sql", "class_name": "Types", "full_name": "java.sql.Types"}, {"package_name": "android.icu.lang", "class_name": "UCharacter", "full_name": "android.icu.lang.UCharacter"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.BidiPairedBracketType", "full_name": "android.icu.lang.UCharacter.BidiPairedBracketType"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.DecompositionType", "full_name": "android.icu.lang.UCharacter.DecompositionType"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.EastAsianWidth", "full_name": "android.icu.lang.UCharacter.EastAsianWidth"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.GraphemeClusterBreak", "full_name": "android.icu.lang.UCharacter.GraphemeClusterBreak"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.HangulSyllableType", "full_name": "android.icu.lang.UCharacter.HangulSyllableType"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.JoiningGroup", "full_name": "android.icu.lang.UCharacter.JoiningGroup"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.JoiningType", "full_name": "android.icu.lang.UCharacter.JoiningType"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.LineBreak", "full_name": "android.icu.lang.UCharacter.LineBreak"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.NumericType", "full_name": "android.icu.lang.UCharacter.NumericType"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.SentenceBreak", "full_name": "android.icu.lang.UCharacter.SentenceBreak"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.UnicodeBlock", "full_name": "android.icu.lang.UCharacter.UnicodeBlock"}, {"package_name": "android.icu.lang", "class_name": "UCharacter.WordBreak", "full_name": "android.icu.lang.UCharacter.WordBreak"}, {"package_name": "android.icu.lang", "class_name": "UCharacterCategory", "full_name": "android.icu.lang.UCharacterCategory"}, {"package_name": "android.icu.lang", "class_name": "UCharacterDirection", "full_name": "android.icu.lang.UCharacterDirection"}, {"package_name": "android.icu.lang", "class_name": "UCharacterEnums", "full_name": "android.icu.lang.UCharacterEnums"}, {"package_name": "android.icu.lang", "class_name": "UCharacterEnums.ECharacterCategory", "full_name": "android.icu.lang.UCharacterEnums.ECharacterCategory"}, {"package_name": "android.icu.lang", "class_name": "UCharacterEnums.ECharacterDirection", "full_name": "android.icu.lang.UCharacterEnums.ECharacterDirection"}, {"package_name": "android.icu.text", "class_name": "UCharacterIterator", "full_name": "android.icu.text.UCharacterIterator"}, {"package_name": "android.icu.text", "class_name": "UFormat", "full_name": "android.icu.text.UFormat"}, {"package_name": "android.app", "class_name": "UiAutomation", "full_name": "android.app.UiAutomation"}, {"package_name": "android.app", "class_name": "UiAutomation.AccessibilityEventFilter", "full_name": "android.app.UiAutomation.AccessibilityEventFilter"}, {"package_name": "android.app", "class_name": "UiAutomation.OnAccessibilityEventListener", "full_name": "android.app.UiAutomation.OnAccessibilityEventListener"}, {"package_name": "android.os.health", "class_name": "UidHealthStats", "full_name": "android.os.health.UidHealthStats"}, {"package_name": "android.app", "class_name": "UiModeManager", "full_name": "android.app.UiModeManager"}, {"package_name": "android.test", "class_name": "UiThreadTest", "full_name": "android.test.UiThreadTest"}, {"package_name": "android.icu.util", "class_name": "ULocale", "full_name": "android.icu.util.ULocale"}, {"package_name": "android.icu.util", "class_name": "ULocale.Builder", "full_name": "android.icu.util.ULocale.Builder"}, {"package_name": "android.icu.util", "class_name": "ULocale.Category", "full_name": "android.icu.util.ULocale.Category"}, {"package_name": "android.os.strictmode", "class_name": "UnbufferedIoViolation", "full_name": "android.os.strictmode.UnbufferedIoViolation"}, {"package_name": "java.io", "class_name": "UncheckedIOException", "full_name": "java.io.UncheckedIOException"}, {"package_name": "java.lang.reflect", "class_name": "UndeclaredThrowableException", "full_name": "java.lang.reflect.UndeclaredThrowableException"}, {"package_name": "android.text.style", "class_name": "UnderlineSpan", "full_name": "android.text.style.UnderlineSpan"}, {"package_name": "android.icu.text", "class_name": "UnicodeFilter", "full_name": "android.icu.text.UnicodeFilter"}, {"package_name": "android.icu.text", "class_name": "UnicodeMatcher", "full_name": "android.icu.text.UnicodeMatcher"}, {"package_name": "android.icu.text", "class_name": "UnicodeSet", "full_name": "android.icu.text.UnicodeSet"}, {"package_name": "android.icu.text", "class_name": "UnicodeSet.ComparisonStyle", "full_name": "android.icu.text.UnicodeSet.ComparisonStyle"}, {"package_name": "android.icu.text", "class_name": "UnicodeSet.EntryRange", "full_name": "android.icu.text.UnicodeSet.EntryRange"}, {"package_name": "android.icu.text", "class_name": "UnicodeSet.SpanCondition", "full_name": "android.icu.text.UnicodeSet.SpanCondition"}, {"package_name": "android.icu.text", "class_name": "UnicodeSetIterator", "full_name": "android.icu.text.UnicodeSetIterator"}, {"package_name": "android.icu.text", "class_name": "UnicodeSetSpanner", "full_name": "android.icu.text.UnicodeSetSpanner"}, {"package_name": "android.icu.text", "class_name": "UnicodeSetSpanner.CountMethod", "full_name": "android.icu.text.UnicodeSetSpanner.CountMethod"}, {"package_name": "android.icu.text", "class_name": "UnicodeSetSpanner.TrimOption", "full_name": "android.icu.text.UnicodeSetSpanner.TrimOption"}, {"package_name": "android.icu.util", "class_name": "UniversalTimeScale", "full_name": "android.icu.util.UniversalTimeScale"}, {"package_name": "java.lang", "class_name": "UnknownError", "full_name": "java.lang.UnknownError"}, {"package_name": "java.util", "class_name": "UnknownFormatConversionException", "full_name": "java.util.UnknownFormatConversionException"}, {"package_name": "java.util", "class_name": "UnknownFormatFlagsException", "full_name": "java.util.UnknownFormatFlagsException"}, {"package_name": "java.net", "class_name": "UnknownHostException", "full_name": "java.net.UnknownHostException"}, {"package_name": "java.net", "class_name": "UnknownServiceException", "full_name": "java.net.UnknownServiceException"}, {"package_name": "java.nio.charset", "class_name": "UnmappableCharacterException", "full_name": "java.nio.charset.UnmappableCharacterException"}, {"package_name": "java.security", "class_name": "UnrecoverableEntryException", "full_name": "java.security.UnrecoverableEntryException"}, {"package_name": "java.security", "class_name": "UnrecoverableKeyException", "full_name": "java.security.UnrecoverableKeyException"}, {"package_name": "java.nio.channels", "class_name": "UnresolvedAddressException", "full_name": "java.nio.channels.UnresolvedAddressException"}, {"package_name": "java.security", "class_name": "UnresolvedPermission", "full_name": "java.security.UnresolvedPermission"}, {"package_name": "java.lang", "class_name": "UnsatisfiedLinkError", "full_name": "java.lang.UnsatisfiedLinkError"}, {"package_name": "java.nio.channels", "class_name": "UnsupportedAddressTypeException", "full_name": "java.nio.channels.UnsupportedAddressTypeException"}, {"package_name": "javax.security.auth.callback", "class_name": "UnsupportedCallbackException", "full_name": "javax.security.auth.callback.UnsupportedCallbackException"}, {"package_name": "java.nio.charset", "class_name": "UnsupportedCharsetException", "full_name": "java.nio.charset.UnsupportedCharsetException"}, {"package_name": "java.lang", "class_name": "UnsupportedClassVersionError", "full_name": "java.lang.UnsupportedClassVersionError"}, {"package_name": "java.io", "class_name": "UnsupportedEncodingException", "full_name": "java.io.UnsupportedEncodingException"}, {"package_name": "java.lang", "class_name": "UnsupportedOperationException", "full_name": "java.lang.UnsupportedOperationException"}, {"package_name": "android.media", "class_name": "UnsupportedSchemeException", "full_name": "android.media.UnsupportedSchemeException"}, {"package_name": "java.time.temporal", "class_name": "UnsupportedTemporalTypeException", "full_name": "java.time.temporal.UnsupportedTemporalTypeException"}, {"package_name": "android.os.strictmode", "class_name": "UntaggedSocketViolation", "full_name": "android.os.strictmode.UntaggedSocketViolation"}, {"package_name": "android.text.style", "class_name": "UpdateAppearance", "full_name": "android.text.style.UpdateAppearance"}, {"package_name": "android.text.style", "class_name": "UpdateLayout", "full_name": "android.text.style.UpdateLayout"}, {"package_name": "android.icu.lang", "class_name": "UProperty", "full_name": "android.icu.lang.UProperty"}, {"package_name": "android.icu.lang", "class_name": "UProperty.NameChoice", "full_name": "android.icu.lang.UProperty.NameChoice"}, {"package_name": "android.net", "class_name": "Uri", "full_name": "android.net.Uri"}, {"package_name": "java.net", "class_name": "URI", "full_name": "java.net.URI"}, {"package_name": "android.net", "class_name": "Uri.Builder", "full_name": "android.net.Uri.Builder"}, {"package_name": "android.content", "class_name": "UriMatcher", "full_name": "android.content.UriMatcher"}, {"package_name": "android.content", "class_name": "UriPermission", "full_name": "android.content.UriPermission"}, {"package_name": "javax.xml.transform", "class_name": "URIResolver", "full_name": "javax.xml.transform.URIResolver"}, {"package_name": "java.net", "class_name": "URISyntaxException", "full_name": "java.net.URISyntaxException"}, {"package_name": "java.net", "class_name": "URL", "full_name": "java.net.URL"}, {"package_name": "java.net", "class_name": "URLClassLoader", "full_name": "java.net.URLClassLoader"}, {"package_name": "java.net", "class_name": "URLConnection", "full_name": "java.net.URLConnection"}, {"package_name": "java.net", "class_name": "URLDecoder", "full_name": "java.net.URLDecoder"}, {"package_name": "java.net", "class_name": "URLEncoder", "full_name": "java.net.URLEncoder"}, {"package_name": "android.net", "class_name": "UrlQuerySanitizer", "full_name": "android.net.UrlQuerySanitizer"}, {"package_name": "android.net", "class_name": "UrlQuerySanitizer.IllegalCharacterValueSanitizer", "full_name": "android.net.UrlQuerySanitizer.IllegalCharacterValueSanitizer"}, {"package_name": "android.net", "class_name": "UrlQuerySanitizer.ParameterValuePair", "full_name": "android.net.UrlQuerySanitizer.ParameterValuePair"}, {"package_name": "android.net", "class_name": "UrlQuerySanitizer.ValueSanitizer", "full_name": "android.net.UrlQuerySanitizer.ValueSanitizer"}, {"package_name": "android.text.style", "class_name": "URLSpan", "full_name": "android.text.style.URLSpan"}, {"package_name": "java.net", "class_name": "URLStreamHandler", "full_name": "java.net.URLStreamHandler"}, {"package_name": "java.net", "class_name": "URLStreamHandlerFactory", "full_name": "java.net.URLStreamHandlerFactory"}, {"package_name": "android.webkit", "class_name": "URLUtil", "full_name": "android.webkit.URLUtil"}, {"package_name": "android.app.usage", "class_name": "UsageEvents", "full_name": "android.app.usage.UsageEvents"}, {"package_name": "android.app.usage", "class_name": "UsageEvents.Event", "full_name": "android.app.usage.UsageEvents.Event"}, {"package_name": "android.app.usage", "class_name": "UsageStats", "full_name": "android.app.usage.UsageStats"}, {"package_name": "android.app.usage", "class_name": "UsageStatsManager", "full_name": "android.app.usage.UsageStatsManager"}, {"package_name": "android.hardware.usb", "class_name": "UsbAccessory", "full_name": "android.hardware.usb.UsbAccessory"}, {"package_name": "android.hardware.usb", "class_name": "UsbConfiguration", "full_name": "android.hardware.usb.UsbConfiguration"}, {"package_name": "android.hardware.usb", "class_name": "UsbConstants", "full_name": "android.hardware.usb.UsbConstants"}, {"package_name": "android.hardware.usb", "class_name": "UsbDevice", "full_name": "android.hardware.usb.UsbDevice"}, {"package_name": "android.hardware.usb", "class_name": "UsbDeviceConnection", "full_name": "android.hardware.usb.UsbDeviceConnection"}, {"package_name": "android.hardware.usb", "class_name": "UsbEndpoint", "full_name": "android.hardware.usb.UsbEndpoint"}, {"package_name": "android.hardware.usb", "class_name": "UsbInterface", "full_name": "android.hardware.usb.UsbInterface"}, {"package_name": "android.hardware.usb", "class_name": "UsbManager", "full_name": "android.hardware.usb.UsbManager"}, {"package_name": "android.hardware.usb", "class_name": "UsbRequest", "full_name": "android.hardware.usb.UsbRequest"}, {"package_name": "android.icu.lang", "class_name": "UScript", "full_name": "android.icu.lang.UScript"}, {"package_name": "android.icu.lang", "class_name": "UScript.ScriptUsage", "full_name": "android.icu.lang.UScript.ScriptUsage"}, {"package_name": "android.service.autofill", "class_name": "UserData", "full_name": "android.service.autofill.UserData"}, {"package_name": "android.service.autofill", "class_name": "UserData.Builder", "full_name": "android.service.autofill.UserData.Builder"}, {"package_name": "java.nio.file.attribute", "class_name": "UserDefinedFileAttributeView", "full_name": "java.nio.file.attribute.UserDefinedFileAttributeView"}, {"package_name": "android.provider", "class_name": "UserDictionary", "full_name": "android.provider.UserDictionary"}, {"package_name": "android.provider", "class_name": "UserDictionary.Words", "full_name": "android.provider.UserDictionary.Words"}, {"package_name": "android.os", "class_name": "UserHandle", "full_name": "android.os.UserHandle"}, {"package_name": "android.os", "class_name": "UserManager", "full_name": "android.os.UserManager"}, {"package_name": "android.os", "class_name": "UserManager.UserOperationException", "full_name": "android.os.UserManager.UserOperationException"}, {"package_name": "android.security.keystore", "class_name": "UserNotAuthenticatedException", "full_name": "android.security.keystore.UserNotAuthenticatedException"}, {"package_name": "android.security.keystore", "class_name": "UserPresenceUnavailableException", "full_name": "android.security.keystore.UserPresenceUnavailableException"}, {"package_name": "java.nio.file.attribute", "class_name": "UserPrincipal", "full_name": "java.nio.file.attribute.UserPrincipal"}, {"package_name": "java.nio.file.attribute", "class_name": "UserPrincipalLookupService", "full_name": "java.nio.file.attribute.UserPrincipalLookupService"}, {"package_name": "java.nio.file.attribute", "class_name": "UserPrincipalNotFoundException", "full_name": "java.nio.file.attribute.UserPrincipalNotFoundException"}, {"package_name": "java.io", "class_name": "UTFDataFormatException", "full_name": "java.io.UTFDataFormatException"}, {"package_name": "android.speech.tts", "class_name": "UtteranceProgressListener", "full_name": "android.speech.tts.UtteranceProgressListener"}, {"package_name": "java.util", "class_name": "UUID", "full_name": "java.util.UUID"}, {"package_name": "android.service.autofill", "class_name": "Validator", "full_name": "android.service.autofill.Validator"}, {"package_name": "javax.xml.validation", "class_name": "Validator", "full_name": "javax.xml.validation.Validator"}, {"package_name": "javax.xml.validation", "class_name": "ValidatorHandler", "full_name": "javax.xml.validation.ValidatorHandler"}, {"package_name": "android.service.autofill", "class_name": "Validators", "full_name": "android.service.autofill.Validators"}, {"package_name": "android.animation", "class_name": "ValueAnimator", "full_name": "android.animation.ValueAnimator"}, {"package_name": "android.animation", "class_name": "ValueAnimator.AnimatorUpdateListener", "full_name": "android.animation.ValueAnimator.AnimatorUpdateListener"}, {"package_name": "android.icu.util", "class_name": "ValueIterator", "full_name": "android.icu.util.ValueIterator"}, {"package_name": "android.icu.util", "class_name": "ValueIterator.Element", "full_name": "android.icu.util.ValueIterator.Element"}, {"package_name": "java.time.temporal", "class_name": "ValueRange", "full_name": "java.time.temporal.ValueRange"}, {"package_name": "android.graphics.drawable", "class_name": "VectorDrawable", "full_name": "android.graphics.drawable.VectorDrawable"}, {"package_name": "android.view", "class_name": "VelocityTracker", "full_name": "android.view.VelocityTracker"}, {"package_name": "java.lang", "class_name": "VerifyError", "full_name": "java.lang.VerifyError"}, {"package_name": "junit.runner", "class_name": "Version", "full_name": "junit.runner.Version"}, {"package_name": "android.content.pm", "class_name": "VersionedPackage", "full_name": "android.content.pm.VersionedPackage"}, {"package_name": "android.icu.util", "class_name": "VersionInfo", "full_name": "android.icu.util.VersionInfo"}, {"package_name": "android.os", "class_name": "VibrationEffect", "full_name": "android.os.VibrationEffect"}, {"package_name": "android.os", "class_name": "Vibrator", "full_name": "android.os.Vibrator"}, {"package_name": "android.telecom", "class_name": "VideoProfile", "full_name": "android.telecom.VideoProfile"}, {"package_name": "android.telecom", "class_name": "VideoProfile.CameraCapabilities", "full_name": "android.telecom.VideoProfile.CameraCapabilities"}, {"package_name": "android.widget", "class_name": "VideoView", "full_name": "android.widget.VideoView"}, {"package_name": "android.view", "class_name": "View", "full_name": "android.view.View"}, {"package_name": "android.view", "class_name": "View.AccessibilityDelegate", "full_name": "android.view.View.AccessibilityDelegate"}, {"package_name": "android.view", "class_name": "View.BaseSavedState", "full_name": "android.view.View.BaseSavedState"}, {"package_name": "android.view", "class_name": "View.DragShadowBuilder", "full_name": "android.view.View.DragShadowBuilder"}, {"package_name": "android.view", "class_name": "View.MeasureSpec", "full_name": "android.view.View.MeasureSpec"}, {"package_name": "android.view", "class_name": "View.OnApplyWindowInsetsListener", "full_name": "android.view.View.OnApplyWindowInsetsListener"}, {"package_name": "android.view", "class_name": "View.OnAttachStateChangeListener", "full_name": "android.view.View.OnAttachStateChangeListener"}, {"package_name": "android.view", "class_name": "View.OnCapturedPointerListener", "full_name": "android.view.View.OnCapturedPointerListener"}, {"package_name": "android.view", "class_name": "View.OnClickListener", "full_name": "android.view.View.OnClickListener"}, {"package_name": "android.view", "class_name": "View.OnContextClickListener", "full_name": "android.view.View.OnContextClickListener"}, {"package_name": "android.view", "class_name": "View.OnCreateContextMenuListener", "full_name": "android.view.View.OnCreateContextMenuListener"}, {"package_name": "android.view", "class_name": "View.OnDragListener", "full_name": "android.view.View.OnDragListener"}, {"package_name": "android.view", "class_name": "View.OnFocusChangeListener", "full_name": "android.view.View.OnFocusChangeListener"}, {"package_name": "android.view", "class_name": "View.OnGenericMotionListener", "full_name": "android.view.View.OnGenericMotionListener"}, {"package_name": "android.view", "class_name": "View.OnHoverListener", "full_name": "android.view.View.OnHoverListener"}, {"package_name": "android.view", "class_name": "View.OnKeyListener", "full_name": "android.view.View.OnKeyListener"}, {"package_name": "android.view", "class_name": "View.OnLayoutChangeListener", "full_name": "android.view.View.OnLayoutChangeListener"}, {"package_name": "android.view", "class_name": "View.OnLongClickListener", "full_name": "android.view.View.OnLongClickListener"}, {"package_name": "android.view", "class_name": "View.OnScrollChangeListener", "full_name": "android.view.View.OnScrollChangeListener"}, {"package_name": "android.view", "class_name": "View.OnSystemUiVisibilityChangeListener", "full_name": "android.view.View.OnSystemUiVisibilityChangeListener"}, {"package_name": "android.view", "class_name": "View.OnTouchListener", "full_name": "android.view.View.OnTouchListener"}, {"package_name": "android.view", "class_name": "View.OnUnhandledKeyEventListener", "full_name": "android.view.View.OnUnhandledKeyEventListener"}, {"package_name": "android.view", "class_name": "ViewAnimationUtils", "full_name": "android.view.ViewAnimationUtils"}, {"package_name": "android.widget", "class_name": "ViewAnimator", "full_name": "android.widget.ViewAnimator"}, {"package_name": "android.test", "class_name": "ViewAsserts", "full_name": "android.test.ViewAsserts"}, {"package_name": "android.view", "class_name": "ViewConfiguration", "full_name": "android.view.ViewConfiguration"}, {"package_name": "android.view", "class_name": "ViewDebug", "full_name": "android.view.ViewDebug"}, {"package_name": "android.view", "class_name": "ViewDebug.CapturedViewProperty", "full_name": "android.view.ViewDebug.CapturedViewProperty"}, {"package_name": "android.view", "class_name": "ViewDebug.ExportedProperty", "full_name": "android.view.ViewDebug.ExportedProperty"}, {"package_name": "android.view", "class_name": "ViewDebug.FlagToString", "full_name": "android.view.ViewDebug.FlagToString"}, {"package_name": "android.view", "class_name": "ViewDebug.HierarchyTraceType", "full_name": "android.view.ViewDebug.HierarchyTraceType"}, {"package_name": "android.view", "class_name": "ViewDebug.IntToString", "full_name": "android.view.ViewDebug.IntToString"}, {"package_name": "android.view", "class_name": "ViewDebug.RecyclerTraceType", "full_name": "android.view.ViewDebug.RecyclerTraceType"}, {"package_name": "android.widget", "class_name": "ViewFlipper", "full_name": "android.widget.ViewFlipper"}, {"package_name": "android.view", "class_name": "ViewGroup", "full_name": "android.view.ViewGroup"}, {"package_name": "android.view", "class_name": "ViewGroup.LayoutParams", "full_name": "android.view.ViewGroup.LayoutParams"}, {"package_name": "android.view", "class_name": "ViewGroup.MarginLayoutParams", "full_name": "android.view.ViewGroup.MarginLayoutParams"}, {"package_name": "android.view", "class_name": "ViewGroup.OnHierarchyChangeListener", "full_name": "android.view.ViewGroup.OnHierarchyChangeListener"}, {"package_name": "android.view", "class_name": "ViewGroupOverlay", "full_name": "android.view.ViewGroupOverlay"}, {"package_name": "android.view", "class_name": "ViewManager", "full_name": "android.view.ViewManager"}, {"package_name": "android.view", "class_name": "ViewOutlineProvider", "full_name": "android.view.ViewOutlineProvider"}, {"package_name": "android.view", "class_name": "ViewOverlay", "full_name": "android.view.ViewOverlay"}, {"package_name": "android.view", "class_name": "ViewParent", "full_name": "android.view.ViewParent"}, {"package_name": "android.view", "class_name": "ViewPropertyAnimator", "full_name": "android.view.ViewPropertyAnimator"}, {"package_name": "android.view", "class_name": "ViewStructure", "full_name": "android.view.ViewStructure"}, {"package_name": "android.view", "class_name": "ViewStructure.HtmlInfo", "full_name": "android.view.ViewStructure.HtmlInfo"}, {"package_name": "android.view", "class_name": "ViewStructure.HtmlInfo.Builder", "full_name": "android.view.ViewStructure.HtmlInfo.Builder"}, {"package_name": "android.view", "class_name": "ViewStub", "full_name": "android.view.ViewStub"}, {"package_name": "android.view", "class_name": "ViewStub.OnInflateListener", "full_name": "android.view.ViewStub.OnInflateListener"}, {"package_name": "android.widget", "class_name": "ViewSwitcher", "full_name": "android.widget.ViewSwitcher"}, {"package_name": "android.widget", "class_name": "ViewSwitcher.ViewFactory", "full_name": "android.widget.ViewSwitcher.ViewFactory"}, {"package_name": "android.view", "class_name": "ViewTreeObserver", "full_name": "android.view.ViewTreeObserver"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnDrawListener", "full_name": "android.view.ViewTreeObserver.OnDrawListener"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnGlobalFocusChangeListener", "full_name": "android.view.ViewTreeObserver.OnGlobalFocusChangeListener"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnGlobalLayoutListener", "full_name": "android.view.ViewTreeObserver.OnGlobalLayoutListener"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnPreDrawListener", "full_name": "android.view.ViewTreeObserver.OnPreDrawListener"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnScrollChangedListener", "full_name": "android.view.ViewTreeObserver.OnScrollChangedListener"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnTouchModeChangeListener", "full_name": "android.view.ViewTreeObserver.OnTouchModeChangeListener"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnWindowAttachListener", "full_name": "android.view.ViewTreeObserver.OnWindowAttachListener"}, {"package_name": "android.view", "class_name": "ViewTreeObserver.OnWindowFocusChangeListener", "full_name": "android.view.ViewTreeObserver.OnWindowFocusChangeListener"}, {"package_name": "android.os.strictmode", "class_name": "Violation", "full_name": "android.os.strictmode.Violation"}, {"package_name": "android.hardware.display", "class_name": "VirtualDisplay", "full_name": "android.hardware.display.VirtualDisplay"}, {"package_name": "android.hardware.display", "class_name": "VirtualDisplay.Callback", "full_name": "android.hardware.display.VirtualDisplay.Callback"}, {"package_name": "android.media.audiofx", "class_name": "Virtualizer", "full_name": "android.media.audiofx.Virtualizer"}, {"package_name": "android.media.audiofx", "class_name": "Virtualizer.OnParameterChangeListener", "full_name": "android.media.audiofx.Virtualizer.OnParameterChangeListener"}, {"package_name": "android.media.audiofx", "class_name": "Virtualizer.Settings", "full_name": "android.media.audiofx.Virtualizer.Settings"}, {"package_name": "java.lang", "class_name": "VirtualMachineError", "full_name": "java.lang.VirtualMachineError"}, {"package_name": "android.opengl", "class_name": "Visibility", "full_name": "android.opengl.Visibility"}, {"package_name": "android.transition", "class_name": "Visibility", "full_name": "android.transition.Visibility"}, {"package_name": "android.transition", "class_name": "VisibilityPropagation", "full_name": "android.transition.VisibilityPropagation"}, {"package_name": "android.media.audiofx", "class_name": "Visualizer", "full_name": "android.media.audiofx.Visualizer"}, {"package_name": "android.media.audiofx", "class_name": "Visualizer.MeasurementPeakRms", "full_name": "android.media.audiofx.Visualizer.MeasurementPeakRms"}, {"package_name": "android.media.audiofx", "class_name": "Visualizer.OnDataCaptureListener", "full_name": "android.media.audiofx.Visualizer.OnDataCaptureListener"}, {"package_name": "android.telephony", "class_name": "VisualVoicemailService", "full_name": "android.telephony.VisualVoicemailService"}, {"package_name": "android.telephony", "class_name": "VisualVoicemailService.VisualVoicemailTask", "full_name": "android.telephony.VisualVoicemailService.VisualVoicemailTask"}, {"package_name": "android.telephony", "class_name": "VisualVoicemailSms", "full_name": "android.telephony.VisualVoicemailSms"}, {"package_name": "android.telephony", "class_name": "VisualVoicemailSmsFilterSettings", "full_name": "android.telephony.VisualVoicemailSmsFilterSettings"}, {"package_name": "android.telephony", "class_name": "VisualVoicemailSmsFilterSettings.Builder", "full_name": "android.telephony.VisualVoicemailSmsFilterSettings.Builder"}, {"package_name": "android.speech.tts", "class_name": "Voice", "full_name": "android.speech.tts.Voice"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionService", "full_name": "android.service.voice.VoiceInteractionService"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession", "full_name": "android.service.voice.VoiceInteractionSession"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession.AbortVoiceRequest", "full_name": "android.service.voice.VoiceInteractionSession.AbortVoiceRequest"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession.CommandRequest", "full_name": "android.service.voice.VoiceInteractionSession.CommandRequest"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession.CompleteVoiceRequest", "full_name": "android.service.voice.VoiceInteractionSession.CompleteVoiceRequest"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession.ConfirmationRequest", "full_name": "android.service.voice.VoiceInteractionSession.ConfirmationRequest"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession.Insets", "full_name": "android.service.voice.VoiceInteractionSession.Insets"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession.PickOptionRequest", "full_name": "android.service.voice.VoiceInteractionSession.PickOptionRequest"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSession.Request", "full_name": "android.service.voice.VoiceInteractionSession.Request"}, {"package_name": "android.service.voice", "class_name": "VoiceInteractionSessionService", "full_name": "android.service.voice.VoiceInteractionSessionService"}, {"package_name": "android.app", "class_name": "VoiceInteractor", "full_name": "android.app.VoiceInteractor"}, {"package_name": "android.app", "class_name": "VoiceInteractor.AbortVoiceRequest", "full_name": "android.app.VoiceInteractor.AbortVoiceRequest"}, {"package_name": "android.app", "class_name": "VoiceInteractor.CommandRequest", "full_name": "android.app.VoiceInteractor.CommandRequest"}, {"package_name": "android.app", "class_name": "VoiceInteractor.CompleteVoiceRequest", "full_name": "android.app.VoiceInteractor.CompleteVoiceRequest"}, {"package_name": "android.app", "class_name": "VoiceInteractor.ConfirmationRequest", "full_name": "android.app.VoiceInteractor.ConfirmationRequest"}, {"package_name": "android.app", "class_name": "VoiceInteractor.PickOptionRequest", "full_name": "android.app.VoiceInteractor.PickOptionRequest"}, {"package_name": "android.app", "class_name": "VoiceInteractor.PickOptionRequest.Option", "full_name": "android.app.VoiceInteractor.PickOptionRequest.Option"}, {"package_name": "android.app", "class_name": "VoiceInteractor.Prompt", "full_name": "android.app.VoiceInteractor.Prompt"}, {"package_name": "android.app", "class_name": "VoiceInteractor.Request", "full_name": "android.app.VoiceInteractor.Request"}, {"package_name": "android.provider", "class_name": "VoicemailContract", "full_name": "android.provider.VoicemailContract"}, {"package_name": "android.provider", "class_name": "VoicemailContract.Status", "full_name": "android.provider.VoicemailContract.Status"}, {"package_name": "android.provider", "class_name": "VoicemailContract.Voicemails", "full_name": "android.provider.VoicemailContract.Voicemails"}, {"package_name": "java.lang", "class_name": "Void", "full_name": "java.lang.Void"}, {"package_name": "java.lang.invoke", "class_name": "VolatileCallSite", "full_name": "java.lang.invoke.VolatileCallSite"}, {"package_name": "android.media", "class_name": "VolumeAutomation", "full_name": "android.media.VolumeAutomation"}, {"package_name": "android.media", "class_name": "VolumeProvider", "full_name": "android.media.VolumeProvider"}, {"package_name": "android.media", "class_name": "VolumeShaper", "full_name": "android.media.VolumeShaper"}, {"package_name": "android.media", "class_name": "VolumeShaper.Configuration", "full_name": "android.media.VolumeShaper.Configuration"}, {"package_name": "android.media", "class_name": "VolumeShaper.Configuration.Builder", "full_name": "android.media.VolumeShaper.Configuration.Builder"}, {"package_name": "android.media", "class_name": "VolumeShaper.Operation", "full_name": "android.media.VolumeShaper.Operation"}, {"package_name": "android.net", "class_name": "VpnService", "full_name": "android.net.VpnService"}, {"package_name": "android.net", "class_name": "VpnService.Builder", "full_name": "android.net.VpnService.Builder"}, {"package_name": "android.service.vr", "class_name": "VrListenerService", "full_name": "android.service.vr.VrListenerService"}, {"package_name": "android.app", "class_name": "WallpaperColors", "full_name": "android.app.WallpaperColors"}, {"package_name": "android.app", "class_name": "WallpaperInfo", "full_name": "android.app.WallpaperInfo"}, {"package_name": "android.app", "class_name": "WallpaperManager", "full_name": "android.app.WallpaperManager"}, {"package_name": "android.app", "class_name": "WallpaperManager.OnColorsChangedListener", "full_name": "android.app.WallpaperManager.OnColorsChangedListener"}, {"package_name": "android.service.wallpaper", "class_name": "WallpaperService", "full_name": "android.service.wallpaper.WallpaperService"}, {"package_name": "android.service.wallpaper", "class_name": "WallpaperService.Engine", "full_name": "android.service.wallpaper.WallpaperService.Engine"}, {"package_name": "java.nio.file", "class_name": "Watchable", "full_name": "java.nio.file.Watchable"}, {"package_name": "java.nio.file", "class_name": "WatchEvent.Modifier", "full_name": "java.nio.file.WatchEvent.Modifier"}, {"package_name": "java.nio.file", "class_name": "WatchKey", "full_name": "java.nio.file.WatchKey"}, {"package_name": "java.nio.file", "class_name": "WatchService", "full_name": "java.nio.file.WatchService"}, {"package_name": "android.webkit", "class_name": "WebBackForwardList", "full_name": "android.webkit.WebBackForwardList"}, {"package_name": "android.webkit", "class_name": "WebChromeClient", "full_name": "android.webkit.WebChromeClient"}, {"package_name": "android.webkit", "class_name": "WebChromeClient.CustomViewCallback", "full_name": "android.webkit.WebChromeClient.CustomViewCallback"}, {"package_name": "android.webkit", "class_name": "WebChromeClient.FileChooserParams", "full_name": "android.webkit.WebChromeClient.FileChooserParams"}, {"package_name": "android.webkit", "class_name": "WebHistoryItem", "full_name": "android.webkit.WebHistoryItem"}, {"package_name": "android.webkit", "class_name": "WebIconDatabase", "full_name": "android.webkit.WebIconDatabase"}, {"package_name": "android.webkit", "class_name": "WebIconDatabase.IconListener", "full_name": "android.webkit.WebIconDatabase.IconListener"}, {"package_name": "android.webkit", "class_name": "WebMessage", "full_name": "android.webkit.WebMessage"}, {"package_name": "android.webkit", "class_name": "WebMessagePort", "full_name": "android.webkit.WebMessagePort"}, {"package_name": "android.webkit", "class_name": "WebMessagePort.WebMessageCallback", "full_name": "android.webkit.WebMessagePort.WebMessageCallback"}, {"package_name": "android.webkit", "class_name": "WebResourceError", "full_name": "android.webkit.WebResourceError"}, {"package_name": "android.webkit", "class_name": "WebResourceRequest", "full_name": "android.webkit.WebResourceRequest"}, {"package_name": "android.webkit", "class_name": "WebResourceResponse", "full_name": "android.webkit.WebResourceResponse"}, {"package_name": "android.webkit", "class_name": "WebSettings", "full_name": "android.webkit.WebSettings"}, {"package_name": "android.webkit", "class_name": "WebSettings.LayoutAlgorithm", "full_name": "android.webkit.WebSettings.LayoutAlgorithm"}, {"package_name": "android.webkit", "class_name": "WebSettings.PluginState", "full_name": "android.webkit.WebSettings.PluginState"}, {"package_name": "android.webkit", "class_name": "WebSettings.RenderPriority", "full_name": "android.webkit.WebSettings.RenderPriority"}, {"package_name": "android.webkit", "class_name": "WebSettings.TextSize", "full_name": "android.webkit.WebSettings.TextSize"}, {"package_name": "android.webkit", "class_name": "WebSettings.ZoomDensity", "full_name": "android.webkit.WebSettings.ZoomDensity"}, {"package_name": "android.webkit", "class_name": "WebStorage", "full_name": "android.webkit.WebStorage"}, {"package_name": "android.webkit", "class_name": "WebStorage.Origin", "full_name": "android.webkit.WebStorage.Origin"}, {"package_name": "android.webkit", "class_name": "WebStorage.QuotaUpdater", "full_name": "android.webkit.WebStorage.QuotaUpdater"}, {"package_name": "android.webkit", "class_name": "WebView", "full_name": "android.webkit.WebView"}, {"package_name": "android.webkit", "class_name": "WebView.FindListener", "full_name": "android.webkit.WebView.FindListener"}, {"package_name": "android.webkit", "class_name": "WebView.HitTestResult", "full_name": "android.webkit.WebView.HitTestResult"}, {"package_name": "android.webkit", "class_name": "WebView.PictureListener", "full_name": "android.webkit.WebView.PictureListener"}, {"package_name": "android.webkit", "class_name": "WebView.VisualStateCallback", "full_name": "android.webkit.WebView.VisualStateCallback"}, {"package_name": "android.webkit", "class_name": "WebView.WebViewTransport", "full_name": "android.webkit.WebView.WebViewTransport"}, {"package_name": "android.webkit", "class_name": "WebViewClient", "full_name": "android.webkit.WebViewClient"}, {"package_name": "android.webkit", "class_name": "WebViewDatabase", "full_name": "android.webkit.WebViewDatabase"}, {"package_name": "android.webkit", "class_name": "WebViewFragment", "full_name": "android.webkit.WebViewFragment"}, {"package_name": "android.os.strictmode", "class_name": "WebViewMethodCalledOnWrongThreadViolation", "full_name": "android.os.strictmode.WebViewMethodCalledOnWrongThreadViolation"}, {"package_name": "java.time.temporal", "class_name": "WeekFields", "full_name": "java.time.temporal.WeekFields"}, {"package_name": "android.net.wifi.aware", "class_name": "WifiAwareManager", "full_name": "android.net.wifi.aware.WifiAwareManager"}, {"package_name": "android.net.wifi.aware", "class_name": "WifiAwareSession", "full_name": "android.net.wifi.aware.WifiAwareSession"}, {"package_name": "android.net.wifi", "class_name": "WifiConfiguration", "full_name": "android.net.wifi.WifiConfiguration"}, {"package_name": "android.net.wifi", "class_name": "WifiConfiguration.AuthAlgorithm", "full_name": "android.net.wifi.WifiConfiguration.AuthAlgorithm"}, {"package_name": "android.net.wifi", "class_name": "WifiConfiguration.GroupCipher", "full_name": "android.net.wifi.WifiConfiguration.GroupCipher"}, {"package_name": "android.net.wifi", "class_name": "WifiConfiguration.KeyMgmt", "full_name": "android.net.wifi.WifiConfiguration.KeyMgmt"}, {"package_name": "android.net.wifi", "class_name": "WifiConfiguration.PairwiseCipher", "full_name": "android.net.wifi.WifiConfiguration.PairwiseCipher"}, {"package_name": "android.net.wifi", "class_name": "WifiConfiguration.Protocol", "full_name": "android.net.wifi.WifiConfiguration.Protocol"}, {"package_name": "android.net.wifi", "class_name": "WifiConfiguration.Status", "full_name": "android.net.wifi.WifiConfiguration.Status"}, {"package_name": "android.companion", "class_name": "WifiDeviceFilter", "full_name": "android.companion.WifiDeviceFilter"}, {"package_name": "android.companion", "class_name": "WifiDeviceFilter.Builder", "full_name": "android.companion.WifiDeviceFilter.Builder"}, {"package_name": "android.net.wifi", "class_name": "WifiEnterpriseConfig", "full_name": "android.net.wifi.WifiEnterpriseConfig"}, {"package_name": "android.net.wifi", "class_name": "WifiEnterpriseConfig.Eap", "full_name": "android.net.wifi.WifiEnterpriseConfig.Eap"}, {"package_name": "android.net.wifi", "class_name": "WifiInfo", "full_name": "android.net.wifi.WifiInfo"}, {"package_name": "android.net.wifi", "class_name": "WifiManager", "full_name": "android.net.wifi.WifiManager"}, {"package_name": "android.net.wifi", "class_name": "WifiManager.LocalOnlyHotspotCallback", "full_name": "android.net.wifi.WifiManager.LocalOnlyHotspotCallback"}, {"package_name": "android.net.wifi", "class_name": "WifiManager.LocalOnlyHotspotReservation", "full_name": "android.net.wifi.WifiManager.LocalOnlyHotspotReservation"}, {"package_name": "android.net.wifi", "class_name": "WifiManager.MulticastLock", "full_name": "android.net.wifi.WifiManager.MulticastLock"}, {"package_name": "android.net.wifi", "class_name": "WifiManager.WifiLock", "full_name": "android.net.wifi.WifiManager.WifiLock"}, {"package_name": "android.net.wifi", "class_name": "WifiManager.WpsCallback", "full_name": "android.net.wifi.WifiManager.WpsCallback"}, {"package_name": "android.net.wifi.rtt", "class_name": "WifiRttManager", "full_name": "android.net.wifi.rtt.WifiRttManager"}, {"package_name": "java.lang.reflect", "class_name": "WildcardType", "full_name": "java.lang.reflect.WildcardType"}, {"package_name": "android.view", "class_name": "Window", "full_name": "android.view.Window"}, {"package_name": "android.view", "class_name": "Window.Callback", "full_name": "android.view.Window.Callback"}, {"package_name": "android.view", "class_name": "Window.OnFrameMetricsAvailableListener", "full_name": "android.view.Window.OnFrameMetricsAvailableListener"}, {"package_name": "android.view", "class_name": "Window.OnRestrictedCaptionAreaChangedListener", "full_name": "android.view.Window.OnRestrictedCaptionAreaChangedListener"}, {"package_name": "android.view", "class_name": "WindowAnimationFrameStats", "full_name": "android.view.WindowAnimationFrameStats"}, {"package_name": "android.view", "class_name": "WindowContentFrameStats", "full_name": "android.view.WindowContentFrameStats"}, {"package_name": "android.view", "class_name": "WindowId", "full_name": "android.view.WindowId"}, {"package_name": "android.view", "class_name": "WindowId.FocusObserver", "full_name": "android.view.WindowId.FocusObserver"}, {"package_name": "android.view", "class_name": "WindowInsets", "full_name": "android.view.WindowInsets"}, {"package_name": "android.view", "class_name": "WindowManager", "full_name": "android.view.WindowManager"}, {"package_name": "android.view", "class_name": "WindowManager.BadTokenException", "full_name": "android.view.WindowManager.BadTokenException"}, {"package_name": "android.view", "class_name": "WindowManager.InvalidDisplayException", "full_name": "android.view.WindowManager.InvalidDisplayException"}, {"package_name": "android.view", "class_name": "WindowManager.LayoutParams", "full_name": "android.view.WindowManager.LayoutParams"}, {"package_name": "android.os", "class_name": "WorkSource", "full_name": "android.os.WorkSource"}, {"package_name": "android.net.wifi", "class_name": "WpsInfo", "full_name": "android.net.wifi.WpsInfo"}, {"package_name": "android.security.keystore", "class_name": "WrappedKeyEntry", "full_name": "android.security.keystore.WrappedKeyEntry"}, {"package_name": "java.sql", "class_name": "Wrapper", "full_name": "java.sql.Wrapper"}, {"package_name": "android.widget", "class_name": "WrapperListAdapter", "full_name": "android.widget.WrapperListAdapter"}, {"package_name": "android.text.style", "class_name": "WrapTogetherSpan", "full_name": "android.text.style.WrapTogetherSpan"}, {"package_name": "java.nio.channels", "class_name": "WritableByteChannel", "full_name": "java.nio.channels.WritableByteChannel"}, {"package_name": "java.io", "class_name": "WriteAbortedException", "full_name": "java.io.WriteAbortedException"}, {"package_name": "java.nio.channels", "class_name": "WritePendingException", "full_name": "java.nio.channels.WritePendingException"}, {"package_name": "java.io", "class_name": "Writer", "full_name": "java.io.Writer"}, {"package_name": "java.lang.invoke", "class_name": "WrongMethodTypeException", "full_name": "java.lang.invoke.WrongMethodTypeException"}, {"package_name": "android.graphics", "class_name": "Xfermode", "full_name": "android.graphics.Xfermode"}, {"package_name": "android.util", "class_name": "Xml", "full_name": "android.util.Xml"}, {"package_name": "android.util", "class_name": "Xml.Encoding", "full_name": "android.util.Xml.Encoding"}, {"package_name": "javax.xml", "class_name": "XMLConstants", "full_name": "javax.xml.XMLConstants"}, {"package_name": "org.xml.sax", "class_name": "XMLFilter", "full_name": "org.xml.sax.XMLFilter"}, {"package_name": "org.xml.sax.helpers", "class_name": "XMLFilterImpl", "full_name": "org.xml.sax.helpers.XMLFilterImpl"}, {"package_name": "java.util.logging", "class_name": "XMLFormatter", "full_name": "java.util.logging.XMLFormatter"}, {"package_name": "javax.xml.datatype", "class_name": "XMLGregorianCalendar", "full_name": "javax.xml.datatype.XMLGregorianCalendar"}, {"package_name": "org.xml.sax", "class_name": "XMLReader", "full_name": "org.xml.sax.XMLReader"}, {"package_name": "org.xml.sax.helpers", "class_name": "XMLReaderAdapter", "full_name": "org.xml.sax.helpers.XMLReaderAdapter"}, {"package_name": "org.xml.sax.helpers", "class_name": "XMLReaderFactory", "full_name": "org.xml.sax.helpers.XMLReaderFactory"}, {"package_name": "android.content.res", "class_name": "XmlResourceParser", "full_name": "android.content.res.XmlResourceParser"}, {"package_name": "javax.xml.xpath", "class_name": "XPath", "full_name": "javax.xml.xpath.XPath"}, {"package_name": "javax.xml.xpath", "class_name": "XPathConstants", "full_name": "javax.xml.xpath.XPathConstants"}, {"package_name": "javax.xml.xpath", "class_name": "XPathException", "full_name": "javax.xml.xpath.XPathException"}, {"package_name": "javax.xml.xpath", "class_name": "XPathExpression", "full_name": "javax.xml.xpath.XPathExpression"}, {"package_name": "javax.xml.xpath", "class_name": "XPathExpressionException", "full_name": "javax.xml.xpath.XPathExpressionException"}, {"package_name": "javax.xml.xpath", "class_name": "XPathFactory", "full_name": "javax.xml.xpath.XPathFactory"}, {"package_name": "javax.xml.xpath", "class_name": "XPathFactoryConfigurationException", "full_name": "javax.xml.xpath.XPathFactoryConfigurationException"}, {"package_name": "javax.xml.xpath", "class_name": "XPathFunction", "full_name": "javax.xml.xpath.XPathFunction"}, {"package_name": "javax.xml.xpath", "class_name": "XPathFunctionException", "full_name": "javax.xml.xpath.XPathFunctionException"}, {"package_name": "javax.xml.xpath", "class_name": "XPathFunctionResolver", "full_name": "javax.xml.xpath.XPathFunctionResolver"}, {"package_name": "javax.xml.xpath", "class_name": "XPathVariableResolver", "full_name": "javax.xml.xpath.XPathVariableResolver"}, {"package_name": "java.time", "class_name": "Year", "full_name": "java.time.Year"}, {"package_name": "java.time", "class_name": "YearMonth", "full_name": "java.time.YearMonth"}, {"package_name": "android.graphics", "class_name": "YuvImage", "full_name": "android.graphics.YuvImage"}, {"package_name": "java.util.zip", "class_name": "ZipEntry", "full_name": "java.util.zip.ZipEntry"}, {"package_name": "java.util.zip", "class_name": "ZipError", "full_name": "java.util.zip.ZipError"}, {"package_name": "java.util.zip", "class_name": "ZipException", "full_name": "java.util.zip.ZipException"}, {"package_name": "java.util.zip", "class_name": "ZipFile", "full_name": "java.util.zip.ZipFile"}, {"package_name": "java.util.zip", "class_name": "ZipInputStream", "full_name": "java.util.zip.ZipInputStream"}, {"package_name": "java.util.zip", "class_name": "ZipOutputStream", "full_name": "java.util.zip.ZipOutputStream"}, {"package_name": "java.time", "class_name": "ZonedDateTime", "full_name": "java.time.ZonedDateTime"}, {"package_name": "java.time", "class_name": "ZoneId", "full_name": "java.time.ZoneId"}, {"package_name": "java.time", "class_name": "ZoneOffset", "full_name": "java.time.ZoneOffset"}, {"package_name": "java.time.zone", "class_name": "ZoneOffsetTransition", "full_name": "java.time.zone.ZoneOffsetTransition"}, {"package_name": "java.time.zone", "class_name": "ZoneOffsetTransitionRule", "full_name": "java.time.zone.ZoneOffsetTransitionRule"}, {"package_name": "java.time.zone", "class_name": "ZoneOffsetTransitionRule.TimeDefinition", "full_name": "java.time.zone.ZoneOffsetTransitionRule.TimeDefinition"}, {"package_name": "java.time.zone", "class_name": "ZoneRules", "full_name": "java.time.zone.ZoneRules"}, {"package_name": "java.time.zone", "class_name": "ZoneRulesException", "full_name": "java.time.zone.ZoneRulesException"}, {"package_name": "android.widget", "class_name": "ZoomButton", "full_name": "android.widget.ZoomButton"}, {"package_name": "android.widget", "class_name": "ZoomButtonsController", "full_name": "android.widget.ZoomButtonsController"}, {"package_name": "android.widget", "class_name": "ZoomButtonsController.OnZoomListener", "full_name": "android.widget.ZoomButtonsController.OnZoomListener"}, {"package_name": "android.widget", "class_name": "ZoomControls", "full_name": "android.widget.ZoomControls"}]
\ No newline at end of file
diff --git a/app/src/main/assets/js/beautify.js b/app/src/main/assets/js/js-beautify/beautify.js
similarity index 99%
rename from app/src/main/assets/js/beautify.js
rename to app/src/main/assets/js/js-beautify/beautify.js
index c3af2d366..5fdfb6b61 100644
--- a/app/src/main/assets/js/beautify.js
+++ b/app/src/main/assets/js/js-beautify/beautify.js
@@ -88,6 +88,14 @@
*/
(function() {
+var formatXml = require("xml_formatter");
+function println(str){
+ java.lang.System.out.println(str);
+}
+String.prototype.replaceAll = function(search, replacement) {
+ var target = this;
+ return target.split(search).join(replacement);
+};
var legacy_beautify_js =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
@@ -363,6 +371,7 @@ function Beautifier(js_source_text, options) {
'TK_WORD': handle_word,
'TK_RESERVED': handle_word,
'TK_SEMICOLON': handle_semicolon,
+ 'TK_XML': handle_string,
'TK_STRING': handle_string,
'TK_EQUALS': handle_equals,
'TK_OPERATOR': handle_operator,
@@ -696,6 +705,13 @@ function Beautifier(js_source_text, options) {
printable_token = printable_token || current_token.text;
print_token_line_indentation();
+ if(current_token.type == "TK_XML" && printable_token){
+ var indent_count = output.current_line._indent_count;
+ println("indent_count: " + indent_count);
+ var indent = output.indent_cache[Math.max(0, indent_count - 1)];
+ printable_token = formatXml(printable_token, {margin: indent});
+ current_token.text = printable_token;
+ }
output.add_token(printable_token);
}
@@ -1877,14 +1893,14 @@ module.exports.mergeOpts = mergeOpts;
function OutputLine(parent) {
var _character_count = 0;
// use indent_count as a marker for lines that have preserved indentation
- var _indent_count = -1;
+ this._indent_count = -1;
var _items = [];
var _empty = true;
this.set_indent = function(level) {
_character_count = parent.baseIndentLength + level * parent.indent_length;
- _indent_count = level;
+ this._indent_count = level;
};
this.get_character_count = function() {
@@ -1920,8 +1936,8 @@ function OutputLine(parent) {
};
this.remove_indent = function() {
- if (_indent_count > 0) {
- _indent_count -= 1;
+ if (this._indent_count > 0) {
+ this._indent_count -= 1;
_character_count -= parent.indent_length;
}
};
@@ -1937,8 +1953,8 @@ function OutputLine(parent) {
this.toString = function() {
var result = '';
if (!this._empty) {
- if (_indent_count >= 0) {
- result = parent.indent_cache[_indent_count];
+ if (this._indent_count >= 0) {
+ result = parent.indent_cache[this._indent_count];
}
result += _items.join('');
}
@@ -2567,7 +2583,8 @@ function Tokenizer(input_string, opts) {
xmlStr += input.match(/[\s\S]*/g)[0];
}
xmlStr = xmlStr.replace(acorn.allLineBreaks, '\n');
- return [xmlStr, "TK_STRING"];
+ n_newlines = 1;
+ return [xmlStr, "TK_XML"];
}
} else {
//
diff --git a/app/src/main/assets/js/js-beautify/xml_formatter.js b/app/src/main/assets/js/js-beautify/xml_formatter.js
new file mode 100644
index 000000000..08a2d461a
--- /dev/null
+++ b/app/src/main/assets/js/js-beautify/xml_formatter.js
@@ -0,0 +1,43 @@
+
+const stringTimesN = (n, char) => Array(n + 1).join(char)
+
+// Adapted from https://gist.github.com/sente/1083506
+function prettifyXml(xmlInput, options) {
+ options = options || {};
+ let newlineOption = options.newline || '\n';
+ let indentOption = options.indent || 4;
+ let margin = options.margin || '';
+ const indentString = stringTimesN(indentOption, ' ')
+
+ let formatted = '';
+ const regex = /(>)(<)(\/*)/g;
+ const xml = xmlInput.replace(regex, '$1' + newlineOption + '$2$3');
+ let pad = 0;
+ xml.split(/\r?\n/).forEach(l => {
+ const line = l.trim();
+
+ let indent = 0;
+ if (line.match(/.+<\/\w[^>]*>$/)) {
+ indent = 0;
+ } else if (line.match(/^<\/\w/)) {
+ // Somehow istanbul doesn't see the else case as covered, although it is. Skip it.
+ /* istanbul ignore else */
+ if (pad !== 0) {
+ pad -= 1
+ }
+ } else if (line.match(/^<\w([^>]*[^\/])?>.*$/)) {
+ indent = 1
+ } else {
+ indent = 0
+ }
+
+ const padding = stringTimesN(pad, indentString);
+ formatted += margin + padding + line + newlineOption // eslint-disable-line prefer-template
+ pad += indent
+ })
+
+ return formatted.trim()
+}
+
+// For non-es2015 usage
+module.exports = prettifyXml
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\215\217\347\250\213/ui\344\270\255\344\275\277\347\224\250\345\215\217\347\250\213/main.js" "b/app/src/main/assets/sample/\345\215\217\347\250\213/ui\344\270\255\344\275\277\347\224\250\345\215\217\347\250\213/main.js"
new file mode 100644
index 000000000..5baee9046
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\215\217\347\250\213/ui\344\270\255\344\275\277\347\224\250\345\215\217\347\250\213/main.js"
@@ -0,0 +1,24 @@
+"ui";
+
+ui.layout(
+
+
+ UI中使用协程
+
+
+);
+
+continuation.delay(5000);
+if (!requestScreenCapture()) {
+ dialogs.alert("请授予软件截图权限").await();
+}
+
+
+// 退出应用对话框
+ui.emitter.on("back_pressed", function (e) {
+ e.consumed = true;
+ let exit = dialogs.confirm("确定要退出程序").await();
+ if (exit) {
+ ui.finish();
+ }
+});
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\215\217\347\250\213/ui\344\270\255\344\275\277\347\224\250\345\215\217\347\250\213/project.json" "b/app/src/main/assets/sample/\345\215\217\347\250\213/ui\344\270\255\344\275\277\347\224\250\345\215\217\347\250\213/project.json"
new file mode 100644
index 000000000..8afb2e9cb
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\215\217\347\250\213/ui\344\270\255\344\275\277\347\224\250\345\215\217\347\250\213/project.json"
@@ -0,0 +1,11 @@
+{
+ "name": "协程UI示例",
+ "main": "main.js",
+ "ignore": [
+ "build"
+ ],
+ "packageName": "com.example.cont.ui",
+ "versionName": "1.0.0",
+ "versionCode": 1,
+ "useFeatures": ["continuation"]
+}
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/hello.txt" "b/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/hello.txt"
new file mode 100644
index 000000000..9be9bcf84
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/hello.txt"
@@ -0,0 +1 @@
+Nothing
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/main.js" "b/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/main.js"
new file mode 100644
index 000000000..9e93812af
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/main.js"
@@ -0,0 +1,54 @@
+// 注意,要使用协程这个特性,必须使用项目功能,并且在project.json配置好features属性
+
+
+// delay不同于sleep,不会阻塞当前线程
+function delay(millis) {
+ var cont = continuation.create();
+ setTimeout(()=>{
+ cont.resume();
+ }, millis);
+ cont.await();
+}
+
+// 异步IO例子,在另一个线程读取文件,读取完成后返回当前线程继续执行
+function read(path) {
+ var cont = continuation.create();
+ threads.start(function(){
+ try {
+ cont.resume(files.read(path));
+ }catch(err){
+ cont.resumeError(err);
+ }
+ });
+ return cont.await();
+}
+
+// 使用Promise和协程的例子
+function add(a, b) {
+ return new Promise(function(resolve, reject) {
+ var sum = a + b;
+ resolve(sum);
+ });
+}
+
+toastLog("Hello, Continuation!");
+
+//3秒后发出提示
+setTimeout(()=>{
+ toastLog("3秒后....");
+}, 3000);
+
+// 你可以尝试把delay更换成sleep,看会发生什么!
+delay(6000);
+toastLog("6秒后...");
+
+try {
+ toastLog("读取文件hello.txt: " + read("./hello.txt"));
+}catch(err){
+ console.error(err);
+}
+
+var sum = add(1, 2).await();
+toastLog("1 + 2 = " + sum);
+
+
diff --git "a/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/project.json" "b/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/project.json"
new file mode 100644
index 000000000..dccfca878
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\215\217\347\250\213/\345\215\217\347\250\213HelloWorld/project.json"
@@ -0,0 +1,11 @@
+{
+ "name": "协程HelloWorld",
+ "main": "main.js",
+ "ignore": [
+ "build"
+ ],
+ "packageName": "com.example.cont.helloworld",
+ "versionName": "1.0.0",
+ "versionCode": 1,
+ "useFeatures": ["continuation"]
+}
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\345\233\276\347\211\207\345\244\204\347\220\206.js" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\345\233\276\347\211\207\345\244\204\347\220\206.js"
new file mode 100644
index 000000000..654c56ad7
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\345\233\276\347\211\207\345\244\204\347\220\206.js"
@@ -0,0 +1,142 @@
+"ui";
+
+var url = "https://www.autojs.org/assets/uploads/files/1540386817060-918021-20160416200702191-185324559.jpg";
+var logo = null;
+var currentImg = null;
+
+events.on("exit", function(){
+ if(logo != null){
+ logo.recycle();
+ }
+ if(currentImg != null){
+ currentImg.recycle();
+ }
+});
+
+ui.layout(
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+//把一张图片设置到图片控件中
+function setImage(img) {
+ ui.run(() => {
+ ui.img.setImageBitmap(img.bitmap);
+ var oldImg = currentImg;
+ //不能立即回收currentImg,因为此时img控件还在使用它,应该在下次消息循环再回收它
+ ui.post(()=>{
+ if(oldImg != null){
+ oldImg.recycle();
+ }
+ });
+ currentImg = img;
+ });
+}
+
+//启动一个处理图片的线程
+var imgProcess = threads.start(function () {
+ setInterval(() => { }, 1000);
+});
+
+//处理图片的函数,把任务交给图片处理线程处理
+function processImg(process) {
+ imgProcess.setTimeout(() => {
+ if (logo == null) {
+ logo = images.load(url);
+ }
+ //处理图片
+ var result = process(logo);
+ //把处理后的图片设置到图片控件中
+ setImage(result);
+ }, 0);
+}
+
+var degress = 0;
+
+ui.rotate.on("click", () => {
+ processImg(img => {
+ degress += 90;
+ //旋转degress角度
+ return images.rotate(img, degress);
+ });
+});
+
+ui.concat.on("click", () => {
+ processImg(img => {
+ if(currentImg == null){
+ toast("请先点击其他按钮,再点击本按钮");
+ return img.clone();
+ }
+ //把currentImg拼接在img右边
+ return images.concat(img, currentImg, "right");
+ });
+});
+
+ui.grayscale.on("click", () => {
+ processImg(img => {
+ //灰度化
+ return images.grayscale(img);
+ });
+});
+
+ui.binary.on("click", () => {
+ processImg(img => {
+ var g = images.grayscale(img);
+ //二值化,取灰度为30到200之间的图片
+ var result = images.threshold(g, 100, 200);
+ g.recycle();
+ return result;
+ });
+});
+
+ui.adaptiveBinary.on("click", () => {
+ processImg(img => {
+ var g = images.grayscale(img);
+ //自适应二值化,最大值为200,块大小为25
+ var result = images.adaptiveThreshold(g, 200, "MEAN_C", "BINARY", 25, 10);
+ g.recycle();
+ return result;
+ });
+});
+
+ui.hsv.on("click", () => {
+ processImg(img => {
+ //RGB转HSV
+ return images.cvtColor(img, "BGR2HSV");
+ });
+});
+
+ui.blur.on("click", () => {
+ processImg(img => {
+ //模糊
+ return images.blur(img, [10, 10]);
+ });
+});
+
+ui.medianBlur.on("click", () => {
+ processImg(img => {
+ //中值滤波
+ return images.medianBlur(img, 5);
+ });
+});
+
+ui.gaussianBlur.on("click", () => {
+ processImg(img => {
+ //高斯模糊
+ return images.gaussianBlur(img, [5, 5]);
+ });
+});
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/block.png" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/block.png"
new file mode 100644
index 000000000..c0944e12d
Binary files /dev/null and "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/block.png" differ
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/mario.png" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/mario.png"
new file mode 100644
index 000000000..042671c69
Binary files /dev/null and "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/mario.png" differ
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/super_mario.jpg" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/super_mario.jpg"
new file mode 100644
index 000000000..373502ece
Binary files /dev/null and "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/super_mario.jpg" differ
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\346\211\200\346\234\211\351\227\256\345\217\267\346\226\271\345\235\227.js" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\346\211\200\346\234\211\351\227\256\345\217\267\346\226\271\345\235\227.js"
new file mode 100644
index 000000000..ddea51e99
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\346\211\200\346\234\211\351\227\256\345\217\267\346\226\271\345\235\227.js"
@@ -0,0 +1,11 @@
+
+var superMario = images.read("./super_mario.jpg");
+var block = images.read("./block.png");
+
+var result = images.matchTemplate(superMario, block, {
+ threshold: 0.8
+}).matches;
+toastLog(result);
+
+superMario.recycle();
+block.recycle();
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\351\227\256\345\217\267\346\226\271\345\235\227\345\271\266\347\224\273\345\207\272\344\275\215\347\275\256.js" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\351\227\256\345\217\267\346\226\271\345\235\227\345\271\266\347\224\273\345\207\272\344\275\215\347\275\256.js"
new file mode 100644
index 000000000..8b25049be
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\351\227\256\345\217\267\346\226\271\345\235\227\345\271\266\347\224\273\345\207\272\344\275\215\347\275\256.js"
@@ -0,0 +1,23 @@
+
+var superMario = images.read("./super_mario.jpg");
+var block = images.read("./block.png");
+var points = images.matchTemplate(superMario, block, {
+ threshold: 0.8
+}).points;
+
+toastLog(points);
+
+var canvas = new Canvas(superMario);
+var paint = new Paint();
+paint.setColor(colors.parseColor("#2196F3"));
+points.forEach(point => {
+ canvas.drawRect(point.x, point.y, point.x + block.width, point.y + block.height, paint);
+});
+var image = canvas.toImage();
+images.save(image, "/sdcard/tmp.png");
+
+app.viewFile("/sdcard/tmp.png");
+
+superMario.recycle();
+block.recycle();
+image.recycle();
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\351\251\254\351\207\214\345\245\245.js" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\351\251\254\351\207\214\345\245\245.js"
new file mode 100644
index 000000000..6285cbef4
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\346\211\276\345\233\276/\346\211\276\345\207\272\351\251\254\351\207\214\345\245\245.js"
@@ -0,0 +1,8 @@
+
+var superMario = images.read("./super_mario.jpg");
+var mario = images.read("./mario.png");
+var point = findImage(superMario, mario);
+toastLog(point);
+
+superMario.recycle();
+mario.recycle();
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\350\216\267\345\217\226\347\275\221\347\273\234\345\233\276\347\211\207\345\271\266\344\277\235\345\255\230.js" "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\350\216\267\345\217\226\347\275\221\347\273\234\345\233\276\347\211\207\345\271\266\344\277\235\345\255\230.js"
index 971725ee3..c73eade1e 100644
--- "a/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\350\216\267\345\217\226\347\275\221\347\273\234\345\233\276\347\211\207\345\271\266\344\277\235\345\255\230.js"
+++ "b/app/src/main/assets/sample/\345\233\276\347\211\207\344\270\216\345\233\276\350\211\262\345\244\204\347\220\206/\350\216\267\345\217\226\347\275\221\347\273\234\345\233\276\347\211\207\345\271\266\344\277\235\345\255\230.js"
@@ -1,5 +1,5 @@
//这个是Auto.js图标的地址
-var url = "http://www.autojs.org/assets/uploads/profile/3-profileavatar.png";
+var url = "https://www.autojs.org/assets/uploads/profile/3-profileavatar.png";
var logo = images.load(url);
//保存到路径/sdcard/auto.js.png
images.save(logo, "/sdcard/auto.js.png");
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\345\276\205\345\212\236\344\272\213\351\241\271.js" "b/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\345\276\205\345\212\236\344\272\213\351\241\271.js"
new file mode 100644
index 000000000..6f08f2e3e
--- /dev/null
+++ "b/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\345\276\205\345\212\236\344\272\213\351\241\271.js"
@@ -0,0 +1,115 @@
+"ui";
+
+importClass(android.graphics.Paint);
+
+ui.layout(
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+var materialColors = ["#e91e63", "#ab47bc", "#5c6bc0", "#7e57c2", "##2196f3", "#00bcd4",
+ "#26a69a", "#4caf50", "#8bc34a", "#ffeb3b", "#ffa726", "#78909c", "#8d6e63"];
+
+var storage = storages.create("todoList");
+//从storage获取todo列表
+var todoList = storage.get("items", [
+ {
+ title: "写操作系统作业",
+ summary: "明天第1~2节",
+ color: "#f44336",
+ done: false
+ },
+ {
+ title: "给ui模式增加若干Bug",
+ summary: "无限期",
+ color: "#ff5722",
+ done: false
+ },
+ {
+ title: "发布Auto.js 5.0.0正式版",
+ summary: "2019年1月",
+ color: "#4caf50",
+ done: false
+ },
+ {
+ title: "完成毕业设计和论文",
+ summary: "2019年4月",
+ color: "#2196f3",
+ done: false
+ }
+]);;
+
+ui.todoList.setDataSource(todoList);
+
+ui.todoList.on("item_bind", function (itemView, itemHolder) {
+ //绑定勾选框事件
+ itemView.done.on("check", function (checked) {
+ let item = itemHolder.item;
+ item.done = checked;
+ let paint = itemView.title.paint;
+ //设置或取消中划线效果
+ if (checked) {
+ paint.flags |= Paint.STRIKE_THRU_TEXT_FLAG;
+ } else {
+ paint.flags &= ~Paint.STRIKE_THRU_TEXT_FLAG;
+ }
+ itemView.title.invalidate();
+ });
+});
+
+ui.todoList.on("item_click", function (item, i, itemView, listView) {
+ itemView.done.checked = !itemView.done.checked;
+});
+
+ui.todoList.on("item_long_click", function (e, item, i, itemView, listView) {
+ confirm("确定要删除" + item.title + "吗?")
+ .then(ok => {
+ if (ok) {
+ todoList.splice(i, 1);
+ }
+ });
+ e.consumed = true;
+});
+
+//当离开本界面时保存todoList
+ui.emitter.on("pause", () => {
+ storage.put("items", todoList);
+});
+
+ui.add.on("click", () => {
+ dialogs.rawInput("请输入标题")
+ .then(title => {
+ if (!title) {
+ return;
+ }
+ dialogs.rawInput("请输入期限", "明天")
+ .then(summary => {
+ todoList.push({
+ title: title,
+ summary: summary,
+ color: materialColors[random(0, materialColors.length - 1)]
+ });
+ });
+ })
+});
diff --git "a/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\347\231\273\345\275\225\347\225\214\351\235\242.js" "b/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\347\231\273\345\275\225\347\225\214\351\235\242.js"
index cdf357973..62ae478dd 100644
--- "a/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\347\231\273\345\275\225\347\225\214\351\235\242.js"
+++ "b/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\347\231\273\345\275\225\347\225\214\351\235\242.js"
@@ -45,7 +45,7 @@ function showRegisterUI(){
邮箱
-
+
diff --git "a/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\351\237\263\344\271\220\346\265\217\350\247\210\345\231\250.js" "b/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\351\237\263\344\271\220\346\265\217\350\247\210\345\231\250.js"
index f3d6f9497..0664fbdc3 100644
--- "a/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\351\237\263\344\271\220\346\265\217\350\247\210\345\231\250.js"
+++ "b/app/src/main/assets/sample/\345\244\215\346\235\202\347\225\214\351\235\242/\351\237\263\344\271\220\346\265\217\350\247\210\345\231\250.js"
@@ -1,20 +1,39 @@
"ui";
-//音乐文件的后缀名
-var musicExts = [".mp3", ".wma", ".rm", ".wav", ".mid", ".ape", ".flac"];
-//扫描路径
-var path = files.getSdcardPath();
-//保存音乐文件列表的数组
-var musicFiles = [];
+var IconView = (function() {
+ //继承ui.Widget
+ util.extend(IconView, ui.Widget);
+
+ function IconView() {
+ //调用父类构造函数
+ ui.Widget.call(this);
+ //自定义属性color,定义按钮颜色
+ this.defineAttr("icon", (view, name, defaultGetter) => {
+ return this._icon;
+ }, (view, name, value, defaultSetter) => {
+ this._icon = value;
+ view.setImageResource(value);
+ });
+ }
+ IconView.prototype.render = function() {
+ return (
+
+ );
+ }
+ ui.registerWidget("icon", IconView);
+ return IconView;
+})();
+
+var apps = [];
ui.layout(
-
+
-
-
+
+
@@ -22,38 +41,31 @@ ui.layout(
);
-ui.files.setDataSource(musicFiles);
+ui.apps.setDataSource(musicFiles);
-ui.files.on("item_click", function(item, pos){
- media.playMusic(item.path, 1);
+ui.apps.on("item_click", function(item, pos){
+ toast(item);
});
//启动线程来扫描音乐文件
threads.start(function () {
- listMuiscFiles(path, musicFiles);
+ listApps(apps);
ui.run(()=> {
ui.progressbar.setVisility(8);
});
});
-function listMuiscFiles(dir, list) {
- //遍历该文件夹的文件
- files.listDir(dir).forEach(fileName => {
- var path = files.join(dir, fileName);
- //如果是子文件夹则继续扫描子文件夹的文件
- if (files.isDir(path)) {
- listMuiscFiles(path, list);
- return;
- }
- for (var i = 0; i < musicExts.length; i++) {
- //如果文件名的后缀是音乐格式
- if (fileName.endsWith(musicExts[i])) {
- //则把它添加到列表中
- list.push({
- name: fileName,
- path: path
- });
- }
- }
- });
+function listApps(apps) {
+ var pm = context.getPackageManager();
+ let list = pm.getInstalledPackages(0);
+ for(let i = 0; i < list.size(); i++){
+ let p = list.get(i);
+ apps.push({
+ appName: p.applicationInfo.loadLabel(pm).toString(),
+ packageName: p.packageName,
+ versionName: p.versionName,
+ versionCode: p.versionCode,
+ icon: p.applicationInfo.loadIcon(pm)
+ });
+ }
}
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\346\216\247\345\210\266\345\217\260/\344\277\235\345\255\230\346\227\245\345\277\227.js" "b/app/src/main/assets/sample/\346\216\247\345\210\266\345\217\260/\344\277\235\345\255\230\346\227\245\345\277\227.js"
new file mode 100644
index 000000000..f93f6cb67
--- /dev/null
+++ "b/app/src/main/assets/sample/\346\216\247\345\210\266\345\217\260/\344\277\235\345\255\230\346\227\245\345\277\227.js"
@@ -0,0 +1,7 @@
+console.setGlobalLogConfig({
+ file: "/sdcard/log.txt"
+});
+console.log(1);
+console.log(2);
+console.error(3);
+app.viewFile("/sdcard/log.txt");
diff --git "a/app/src/main/assets/sample/\346\216\247\345\210\266\345\217\260/\346\216\247\345\210\266\345\217\260\347\244\272\344\276\213.js" "b/app/src/main/assets/sample/\346\216\247\345\210\266\345\217\260/\346\216\247\345\210\266\345\217\260\347\244\272\344\276\213.js"
index 6af4d3e46..e70afe406 100644
--- "a/app/src/main/assets/sample/\346\216\247\345\210\266\345\217\260/\346\216\247\345\210\266\345\217\260\347\244\272\344\276\213.js"
+++ "b/app/src/main/assets/sample/\346\216\247\345\210\266\345\217\260/\346\216\247\345\210\266\345\217\260\347\244\272\344\276\213.js"
@@ -6,3 +6,9 @@ console.log("这是黑色");
console.info("这是红色");
console.warn("这是蓝色");
console.error("这是绿色=_=");
+hey();
+
+function hey() {
+ console.trace("打印日志行数");
+}
+
diff --git "a/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\345\210\227\350\241\250\346\216\247\344\273\266.js" "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\345\210\227\350\241\250\346\216\247\344\273\266.js"
index fed03fcb2..e85afede2 100644
--- "a/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\345\210\227\350\241\250\346\216\247\344\273\266.js"
+++ "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\345\210\227\350\241\250\346\216\247\344\273\266.js"
@@ -6,6 +6,7 @@ ui.layout(
+
@@ -28,6 +29,14 @@ var items = [
ui.list.setDataSource(items);
-ui.list.on("item_click", function(i, item, itemView, listView){
+ui.list.on("item_click", function(item, i, itemView, listView){
toast("被点击的人名字为: " + item.name + ",年龄为: " + item.age);
-});
\ No newline at end of file
+});
+
+ui.list.on("item_bind", function(itemView, itemHolder){
+ itemView.deleteItem.on("click", function(){
+ let item = itemHolder.item;
+ toast("被删除的人名字为: " + item.name + ",年龄为: " + item.age);
+ items.splice(itemHolder.position, 1);
+ });
+})
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\345\215\241\347\211\207\345\270\203\345\261\200.js" "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\345\215\241\347\211\207\345\270\203\345\261\200.js"
new file mode 100644
index 000000000..d726ed826
--- /dev/null
+++ "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\345\215\241\347\211\207\345\270\203\345\261\200.js"
@@ -0,0 +1,42 @@
+"ui";
+
+ui.layout(
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
diff --git "a/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\344\275\277\347\224\250\351\205\215\347\275\256\345\213\276\351\200\211\346\241\206.js" "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\344\275\277\347\224\250\351\205\215\347\275\256\345\213\276\351\200\211\346\241\206.js"
new file mode 100644
index 000000000..154db38eb
--- /dev/null
+++ "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\344\275\277\347\224\250\351\205\215\347\275\256\345\213\276\351\200\211\346\241\206.js"
@@ -0,0 +1,18 @@
+"ui";
+
+var PrefCheckBox = require('./自定义控件-模块-配置勾选框.js');
+
+ui.layout(
+
+
+
+
+
+);
+
+ui.btn.on("click", function(){
+ toast("配置1为" + PrefCheckBox.getPref().get("perf1"));
+ toast("配置2为" + PrefCheckBox.getPref().get("perf2"));
+});
+
+
diff --git "a/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\345\270\203\345\261\200\346\250\241\346\235\277.js" "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\345\270\203\345\261\200\346\250\241\346\235\277.js"
new file mode 100644
index 000000000..73a7a4813
--- /dev/null
+++ "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\345\270\203\345\261\200\346\250\241\346\235\277.js"
@@ -0,0 +1,41 @@
+"ui";
+
+var InputLayout = (function() {
+ //继承至ui.Widget
+ util.extend(InputLayout, ui.Widget);
+
+ function InputLayout() {
+ ui.Widget.call(this);
+ this.defineAttr("hint", (view, attr, value, defineSetter)=>{
+ view._hint.setText(value);
+ });
+ this.defineAttr("text", (view, attr, value, defineSetter)=>{
+ view._input.setText(value);
+ });
+ }
+ InputLayout.prototype.render = function() {
+ return (
+
+
+
+
+ );
+ }
+ InputLayout.prototype.getInput = function() {
+ return this.view._input.getText();
+ };
+ ui.registerWidget("input-layout", InputLayout);
+ return InputLayout;
+})();
+
+ui.layout(
+
+
+
+
+
+);
+
+ui.ok.on("click", function(){
+ toast("名字是:" + ui.name.widget.getInput() + ", 年龄是:" + ui.age.widget.getInput());
+});
\ No newline at end of file
diff --git "a/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\345\270\246\351\242\234\350\211\262\346\214\211\351\222\256.js" "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\345\270\246\351\242\234\350\211\262\346\214\211\351\222\256.js"
new file mode 100644
index 000000000..a53b1921d
--- /dev/null
+++ "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\345\270\246\351\242\234\350\211\262\346\214\211\351\222\256.js"
@@ -0,0 +1,50 @@
+"ui";
+
+var ColoredButton = (function() {
+ //继承ui.Widget
+ util.extend(ColoredButton, ui.Widget);
+
+ function ColoredButton() {
+ //调用父类构造函数
+ ui.Widget.call(this);
+ //自定义属性color,定义按钮颜色
+ this.defineAttr("color", (view, name, defaultGetter) => {
+ return this._color;
+ }, (view, name, value, defaultSetter) => {
+ this._color = value;
+ view.attr("backgroundTint", value);
+ });
+ //自定义属性onClick,定义被点击时执行的代码
+ this.defineAttr("onClick", (view, name, defaultGetter) => {
+ return this._onClick;
+ }, (view, name, value, defaultSetter) => {
+ this._onClick = value;
+ });
+ }
+ ColoredButton.prototype.render = function() {
+ return (
+
+ );
+ }
+ ColoredButton.prototype.onViewCreated = function(view) {
+ view.on("click", () => {
+ if (this._onClick) {
+ eval(this._onClick);
+ }
+ });
+ }
+ ui.registerWidget("colored-button", ColoredButton);
+ return ColoredButton;
+})();
+
+ui.layout(
+
+
+
+
+);
+
+function hello() {
+ alert("Hello ~");
+
+}
diff --git "a/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\346\250\241\345\235\227-\351\205\215\347\275\256\345\213\276\351\200\211\346\241\206.js" "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\346\250\241\345\235\227-\351\205\215\347\275\256\345\213\276\351\200\211\346\241\206.js"
new file mode 100644
index 000000000..5ac0c983f
--- /dev/null
+++ "b/app/src/main/assets/sample/\347\225\214\351\235\242\346\216\247\344\273\266/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266-\346\250\241\345\235\227-\351\205\215\347\275\256\345\213\276\351\200\211\346\241\206.js"
@@ -0,0 +1,47 @@
+
+//这个自定义控件是一个勾选框checkbox,能够保存自己的勾选状态,在脚本重新启动时能恢复状态
+var PrefCheckBox = (function() {
+ //继承至ui.Widget
+ util.extend(PrefCheckBox, ui.Widget);
+
+ function PrefCheckBox() {
+ //调用父类构造函数
+ ui.Widget.call(this);
+ //自定义属性key,定义在配置中保存时的key
+ this.defineAttr("key");
+ }
+ PrefCheckBox.prototype.render = function() {
+ return (
+
+ );
+ }
+ PrefCheckBox.prototype.onFinishInflation = function(view) {
+ view.setChecked(PrefCheckBox.getPref().get(this.getKey(), false));
+ view.on("check", (checked) => {
+ PrefCheckBox.getPref().put(this.getKey(), checked);
+ });
+ }
+ PrefCheckBox.prototype.getKey = function() {
+ if(this.key){
+ return this.key;
+ }
+ let id = this.view.attr("id");
+ if(!id){
+ throw new Error("should set a id or key to the checkbox");
+ }
+ return id.replace("@+id/", "");
+ }
+ PrefCheckBox.setPref = function(pref) {
+ PrefCheckBox._pref = pref;
+ }
+ PrefCheckBox.getPref = function(){
+ if(!PrefCheckBox._pref){
+ PrefCheckBox._pref = storages.create("pref");
+ }
+ return PrefCheckBox._pref;
+ }
+ ui.registerWidget("pref-checkbox", PrefCheckBox);
+ return PrefCheckBox;
+})();
+
+module.exports = PrefCheckBox;
\ No newline at end of file
diff --git a/app/src/main/java/org/autojs/autojs/App.java b/app/src/main/java/org/autojs/autojs/App.java
deleted file mode 100644
index e28e0cdb8..000000000
--- a/app/src/main/java/org/autojs/autojs/App.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.autojs.autojs;
-
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.support.multidex.MultiDexApplication;
-import android.view.View;
-import android.widget.ImageView;
-
-import com.bumptech.glide.request.target.SimpleTarget;
-import com.bumptech.glide.request.transition.Transition;
-import com.flurry.android.FlurryAgent;
-import com.google.android.gms.ads.MobileAds;
-import com.raizlabs.android.dbflow.config.DatabaseConfig;
-import com.raizlabs.android.dbflow.config.FlowConfig;
-import com.raizlabs.android.dbflow.config.FlowManager;
-import com.raizlabs.android.dbflow.runtime.DirectModelNotifier;
-import com.stardust.app.GlobalAppContext;
-import com.stardust.autojs.core.ui.inflater.ImageLoader;
-import com.stardust.autojs.core.ui.inflater.util.Drawables;
-import org.autojs.autojs.autojs.AutoJs;
-import org.autojs.autojs.autojs.key.GlobalKeyObserver;
-import org.autojs.autojs.network.GlideApp;
-import org.autojs.autojs.storage.database.TimedTaskDatabase;
-import org.autojs.autojs.timing.TimedTaskScheduler;
-import org.autojs.autojs.tool.CrashHandler;
-import org.autojs.autojs.ui.error.ErrorReportActivity;
-import com.stardust.theme.ThemeColor;
-import com.stardust.theme.ThemeColorManager;
-import com.stardust.util.UiHandler;
-
-
-import java.lang.ref.WeakReference;
-
-/**
- * Created by Stardust on 2017/1/27.
- */
-
-public class App extends MultiDexApplication {
-
- private static final String TAG = "App";
-
- private static WeakReference instance;
-
- public static App getApp() {
- return instance.get();
- }
-
- public void onCreate() {
- super.onCreate();
- GlobalAppContext.set(this);
- instance = new WeakReference<>(this);
- setUpStaticsTool();
- setUpDebugEnvironment();
- init();
- }
-
- private void setUpStaticsTool() {
- if (BuildConfig.DEBUG)
- return;
- new FlurryAgent.Builder()
- .withLogEnabled(BuildConfig.DEBUG)
- .build(this, "D42MH48ZN4PJC5TKNYZD");
- }
-
-
- private void setUpDebugEnvironment() {
- Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(ErrorReportActivity.class));
- }
-
- private void init() {
- FlowManager.init(FlowConfig.builder(this)
- .addDatabaseConfig(DatabaseConfig.builder(TimedTaskDatabase.class)
- .modelNotifier(DirectModelNotifier.get())
- .build())
- .build());
- ThemeColorManager.setDefaultThemeColor(new ThemeColor(getResources().getColor(R.color.colorPrimary), getResources().getColor(R.color.colorPrimaryDark), getResources().getColor(R.color.colorAccent)));
- ThemeColorManager.init(this);
- AutoJs.initInstance(this);
- if (Pref.isRunningVolumeControlEnabled()) {
- GlobalKeyObserver.init();
- }
- setupDrawableImageLoader();
- TimedTaskScheduler.setupRepeating(this);
- MobileAds.initialize(this, Constants.ADMOB_APP_ID);
- }
-
- private void setupDrawableImageLoader() {
- Drawables.setDefaultImageLoader(new ImageLoader() {
- @Override
- public void loadInto(ImageView imageView, Uri uri) {
- GlideApp.with(App.this)
- .load(uri)
- .into(imageView);
- }
-
- @Override
- public void loadIntoBackground(View view, Uri uri) {
- GlideApp.with(App.this)
- .load(uri)
- .into(new SimpleTarget() {
- @Override
- public void onResourceReady(Drawable resource, Transition super Drawable> transition) {
- view.setBackground(resource);
- }
- });
- }
-
- @Override
- public Drawable load(View view, Uri uri) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void load(View view, Uri uri, DrawableCallback drawableCallback) {
- GlideApp.with(App.this)
- .load(uri)
- .into(new SimpleTarget() {
- @Override
- public void onResourceReady(Drawable resource, Transition super Drawable> transition) {
- drawableCallback.onLoaded(resource);
- }
- });
- }
-
- @Override
- public void load(View view, Uri uri, BitmapCallback bitmapCallback) {
- GlideApp.with(App.this)
- .asBitmap()
- .load(uri)
- .into(new SimpleTarget() {
- @Override
- public void onResourceReady(Bitmap resource, Transition super Bitmap> transition) {
- bitmapCallback.onLoaded(resource);
- }
- });
- }
- });
- }
-
-
-}
diff --git a/app/src/main/java/org/autojs/autojs/App.kt b/app/src/main/java/org/autojs/autojs/App.kt
new file mode 100644
index 000000000..2dde69f34
--- /dev/null
+++ b/app/src/main/java/org/autojs/autojs/App.kt
@@ -0,0 +1,178 @@
+package org.autojs.autojs
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.drawable.Drawable
+import android.net.Uri
+import androidx.multidex.MultiDexApplication
+import android.view.View
+import android.widget.ImageView
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.target.SimpleTarget
+import com.bumptech.glide.request.transition.Transition
+import com.evernote.android.job.JobRequest
+import com.flurry.android.FlurryAgent
+import com.squareup.leakcanary.LeakCanary
+import com.stardust.app.GlobalAppContext
+import com.stardust.autojs.core.ui.inflater.ImageLoader
+import com.stardust.autojs.core.ui.inflater.util.Drawables
+import com.stardust.theme.ThemeColor
+import com.tencent.bugly.Bugly
+import com.tencent.bugly.crashreport.CrashReport
+import org.autojs.autojs.autojs.AutoJs
+import org.autojs.autojs.autojs.key.GlobalKeyObserver
+import org.autojs.autojs.external.receiver.DynamicBroadcastReceivers
+import org.autojs.autojs.theme.ThemeColorManagerCompat
+import org.autojs.autojs.timing.TimedTaskManager
+import org.autojs.autojs.timing.TimedTaskScheduler
+import org.autojs.autojs.tool.CrashHandler
+import org.autojs.autojs.ui.error.ErrorReportActivity
+import java.lang.ref.WeakReference
+import java.util.*
+
+/**
+ * Created by Stardust on 2017/1/27.
+ */
+
+class App : MultiDexApplication() {
+ lateinit var dynamicBroadcastReceivers: DynamicBroadcastReceivers
+ private set
+
+ override fun onCreate() {
+ super.onCreate()
+ GlobalAppContext.set(this)
+ instance = WeakReference(this)
+ setUpStaticsTool()
+ setUpDebugEnvironment()
+ init()
+ }
+
+ private fun setUpStaticsTool() {
+ if (BuildConfig.DEBUG)
+ return
+ FlurryAgent.Builder()
+ .withLogEnabled(BuildConfig.DEBUG)
+ .build(this, "D42MH48ZN4PJC5TKNYZD")
+ }
+
+ private fun setUpDebugEnvironment() {
+ Bugly.isDev = false
+ val crashHandler = CrashHandler(ErrorReportActivity::class.java)
+
+ val strategy = CrashReport.UserStrategy(applicationContext)
+ strategy.setCrashHandleCallback(crashHandler)
+
+ CrashReport.initCrashReport(applicationContext, BUGLY_APP_ID, false, strategy)
+
+ crashHandler.setBuglyHandler(Thread.getDefaultUncaughtExceptionHandler())
+ Thread.setDefaultUncaughtExceptionHandler(crashHandler)
+ if (LeakCanary.isInAnalyzerProcess(this)) {
+ // This process is dedicated to LeakCanary for heap analysis.
+ // You should not init your app in this process.
+ return
+ }
+ //LeakCanary.install(this);
+
+ }
+
+ private fun init() {
+ ThemeColorManagerCompat.init(this, ThemeColor(resources.getColor(R.color.colorPrimary), resources.getColor(R.color.colorPrimaryDark), resources.getColor(R.color.colorAccent)))
+ AutoJs.initInstance(this)
+ if (Pref.isRunningVolumeControlEnabled()) {
+ GlobalKeyObserver.init()
+ }
+ setupDrawableImageLoader()
+ TimedTaskScheduler.init(this)
+ initDynamicBroadcastReceivers()
+ }
+
+ @SuppressLint("CheckResult")
+ private fun initDynamicBroadcastReceivers() {
+ dynamicBroadcastReceivers = DynamicBroadcastReceivers(this)
+ val localActions = ArrayList()
+ val actions = ArrayList()
+ TimedTaskManager.getInstance().allIntentTasks
+ .filter { task -> task.action != null }
+ .doOnComplete {
+ if (localActions.isNotEmpty()) {
+ dynamicBroadcastReceivers.register(localActions, true)
+ }
+ if (actions.isNotEmpty()) {
+ dynamicBroadcastReceivers.register(actions, false)
+ }
+ LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(Intent(
+ DynamicBroadcastReceivers.ACTION_STARTUP
+ ))
+ }
+ .subscribe({
+ if (it.isLocal) {
+ localActions.add(it.action)
+ } else {
+ actions.add(it.action)
+ }
+ }, { it.printStackTrace() })
+
+
+ }
+
+ private fun setupDrawableImageLoader() {
+ Drawables.setDefaultImageLoader(object : ImageLoader {
+ override fun loadInto(imageView: ImageView, uri: Uri) {
+ Glide.with(imageView)
+ .load(uri)
+ .into(imageView)
+ }
+
+ override fun loadIntoBackground(view: View, uri: Uri) {
+ Glide.with(view)
+ .load(uri)
+ .into(object : SimpleTarget() {
+ override fun onResourceReady(resource: Drawable, transition: Transition?) {
+ view.background = resource
+ }
+ })
+ }
+
+ override fun load(view: View, uri: Uri): Drawable {
+ throw UnsupportedOperationException()
+ }
+
+ override fun load(view: View, uri: Uri, drawableCallback: ImageLoader.DrawableCallback) {
+ Glide.with(view)
+ .load(uri)
+ .into(object : SimpleTarget() {
+ override fun onResourceReady(resource: Drawable, transition: Transition?) {
+ drawableCallback.onLoaded(resource)
+ }
+ })
+ }
+
+ override fun load(view: View, uri: Uri, bitmapCallback: ImageLoader.BitmapCallback) {
+ Glide.with(view)
+ .asBitmap()
+ .load(uri)
+ .into(object : SimpleTarget() {
+ override fun onResourceReady(resource: Bitmap, transition: Transition?) {
+ bitmapCallback.onLoaded(resource)
+ }
+ })
+ }
+ })
+ }
+
+ companion object {
+
+ private val TAG = "App"
+ private val BUGLY_APP_ID = "19b3607b53"
+
+ private lateinit var instance: WeakReference
+
+ val app: App
+ get() = instance.get()!!
+ }
+
+
+}
diff --git a/app/src/main/java/org/autojs/autojs/Constants.java b/app/src/main/java/org/autojs/autojs/Constants.java
index 01f8446c7..0995244ce 100644
--- a/app/src/main/java/org/autojs/autojs/Constants.java
+++ b/app/src/main/java/org/autojs/autojs/Constants.java
@@ -6,13 +6,5 @@
public final class Constants {
- public static final String LOG_TAG_ADMOB = "Admob";
- public static final String ADMOB_APP_ID = "ca-app-pub-5495978608535144~9896346219";
- public static final String ADMOB_SPLASH_BANNER_ID = "ca-app-pub-5495978608535144/3281269730";
- public static final String ADMOB_INTERSTITIAL_ID = "ca-app-pub-5495978608535144/7282625313";
- public static final String ADMOB_APK_BUILDER_REWARD_ID = "ca-app-pub-5495978608535144/2977306962";
- public static final String ADMOB_BANNER_TEST_ID = "ca-app-pub-3940256099942544/6300978111";
- public static final String ADMOB_INTERSTITIAL_TEST_ID = "ca-app-pub-3940256099942544/1033173712";
- public static final String ADMOB_REWARD_VIDEO_TEST_ID = "ca-app-pub-3940256099942544/5224354917";
}
diff --git a/app/src/main/java/org/autojs/autojs/Main.java b/app/src/main/java/org/autojs/autojs/Main.java
deleted file mode 100644
index ce90c40d0..000000000
--- a/app/src/main/java/org/autojs/autojs/Main.java
+++ /dev/null
@@ -1,735 +0,0 @@
-package org.autojs.autojs;
-
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.ContextAction;
-import org.mozilla.javascript.Function;
-import org.mozilla.javascript.GeneratedClassLoader;
-import org.mozilla.javascript.Kit;
-import org.mozilla.javascript.NativeArray;
-import org.mozilla.javascript.RhinoException;
-import org.mozilla.javascript.Script;
-import org.mozilla.javascript.Scriptable;
-import org.mozilla.javascript.ScriptableObject;
-import org.mozilla.javascript.SecurityController;
-import org.mozilla.javascript.commonjs.module.ModuleScope;
-import org.mozilla.javascript.commonjs.module.Require;
-import org.mozilla.javascript.tools.SourceReader;
-import org.mozilla.javascript.tools.ToolErrorReporter;
-import org.mozilla.javascript.tools.shell.Global;
-import org.mozilla.javascript.tools.shell.QuitAction;
-import org.mozilla.javascript.tools.shell.SecurityProxy;
-import org.mozilla.javascript.tools.shell.ShellConsole;
-import org.mozilla.javascript.tools.shell.ShellContextFactory;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.SoftReference;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.charset.Charset;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * The shell program.
- *
- * Can execute scripts interactively or in batch mode at the command line.
- * An example of controlling the JavaScript engine.
- *
- * @author Norris Boyd
- */
-public class Main {
- public static ShellContextFactory
- shellContextFactory = new ShellContextFactory();
-
- public static Global global = new Global();
- static protected ToolErrorReporter errorReporter;
- static protected int exitCode = 0;
- static private final int EXITCODE_RUNTIME_ERROR = 3;
- static private final int EXITCODE_FILE_NOT_FOUND = 4;
- static boolean processStdin = true;
- static List fileList = new ArrayList();
- static List modulePath;
- static String mainModule;
- static boolean sandboxed = false;
- static boolean useRequire = false;
- static Require require;
- private static SecurityProxy securityImpl;
- private final static ScriptCache scriptCache = new ScriptCache(32);
-
- static {
- global.initQuitAction(new IProxy(IProxy.SYSTEM_EXIT));
- }
-
- /**
- * Proxy class to avoid proliferation of anonymous classes.
- */
- private static class IProxy implements ContextAction, QuitAction {
- private static final int PROCESS_FILES = 1;
- private static final int EVAL_INLINE_SCRIPT = 2;
- private static final int SYSTEM_EXIT = 3;
-
- private int type;
- String[] args;
- String scriptText;
-
- IProxy(int type) {
- this.type = type;
- }
-
- public Object run(Context cx) {
- if (useRequire) {
- require = global.installRequire(cx, modulePath, sandboxed);
- }
- if (type == PROCESS_FILES) {
- processFiles(cx, args);
- } else if (type == EVAL_INLINE_SCRIPT) {
- evalInlineScript(cx, scriptText);
- } else {
- throw Kit.codeBug();
- }
- return null;
- }
-
- public void quit(Context cx, int exitCode) {
- if (type == SYSTEM_EXIT) {
- System.exit(exitCode);
- return;
- }
- throw Kit.codeBug();
- }
- }
-
- /**
- * Main entry point.
- *
- * Process arguments as would a normal Java program. Also
- * create a new Context and associate it with the current thread.
- * Then set up the execution environment and begin to
- * execute scripts.
- */
- public static void main(String args[]) {
- try {
- if (Boolean.getBoolean("rhino.use_java_policy_security")) {
- initJavaPolicySecuritySupport();
- }
- } catch (SecurityException ex) {
- ex.printStackTrace(System.err);
- }
-
- int result = exec(args);
- if (result != 0) {
- System.exit(result);
- }
- }
-
- /**
- * Execute the given arguments, but don't System.exit at the end.
- */
- public static int exec(String origArgs[]) {
- errorReporter = new ToolErrorReporter(false, global.getErr());
- shellContextFactory.setErrorReporter(errorReporter);
- String[] args = processOptions(origArgs);
- if (exitCode > 0) {
- return exitCode;
- }
- if (processStdin) {
- fileList.add(null);
- }
- if (true) {
- global.init(shellContextFactory);
- }
- IProxy iproxy = new IProxy(IProxy.PROCESS_FILES);
- iproxy.args = args;
- shellContextFactory.call(iproxy);
-
- return exitCode;
- }
-
- static void processFiles(Context cx, String[] args) {
- // define "arguments" array in the top-level object:
- // need to allocate new array since newArray requires instances
- // of exactly Object[], not ObjectSubclass[]
- Object[] array = new Object[args.length];
- System.arraycopy(args, 0, array, 0, args.length);
- Scriptable argsObj = cx.newArray(global, array);
- global.defineProperty("arguments", argsObj,
- ScriptableObject.DONTENUM);
-
- for (String file : fileList) {
- try {
- processSource(cx, file);
- } catch (IOException ioex) {
- Context.reportError(ToolErrorReporter.getMessage(
- "msg.couldnt.read.source", file, ioex.getMessage()));
- exitCode = EXITCODE_FILE_NOT_FOUND;
- } catch (RhinoException rex) {
- ToolErrorReporter.reportException(
- cx.getErrorReporter(), rex);
- exitCode = EXITCODE_RUNTIME_ERROR;
- } catch (VirtualMachineError ex) {
- // Treat StackOverflow and OutOfMemory as runtime errors
- ex.printStackTrace();
- String msg = ToolErrorReporter.getMessage(
- "msg.uncaughtJSException", ex.toString());
- Context.reportError(msg);
- exitCode = EXITCODE_RUNTIME_ERROR;
- }
- }
- }
-
- static void evalInlineScript(Context cx, String scriptText) {
- try {
- Script script = cx.compileString(scriptText, "", 1, null);
- if (script != null) {
- script.exec(cx, getShellScope());
- }
- } catch (RhinoException rex) {
- ToolErrorReporter.reportException(
- cx.getErrorReporter(), rex);
- exitCode = EXITCODE_RUNTIME_ERROR;
- } catch (VirtualMachineError ex) {
- // Treat StackOverflow and OutOfMemory as runtime errors
- ex.printStackTrace();
- String msg = ToolErrorReporter.getMessage(
- "msg.uncaughtJSException", ex.toString());
- Context.reportError(msg);
- exitCode = EXITCODE_RUNTIME_ERROR;
- }
- }
-
- public static Global getGlobal() {
- return global;
- }
-
- static Scriptable getShellScope() {
- return getScope(null);
- }
-
- static Scriptable getScope(String path) {
- if (useRequire) {
- // If CommonJS modules are enabled use a module scope that resolves
- // relative ids relative to the current URL, file or working directory.
- URI uri;
- if (path == null) {
- // use current directory for shell and -e switch
- uri = new File(System.getProperty("user.dir")).toURI();
- } else {
- // find out whether this is a file path or a URL
- if (SourceReader.toUrl(path) != null) {
- try {
- uri = new URI(path);
- } catch (URISyntaxException x) {
- // fall back to file uri
- uri = new File(path).toURI();
- }
- } else {
- uri = new File(path).toURI();
- }
- }
- return new ModuleScope(global, uri, null);
- } else {
- return global;
- }
- }
-
- /**
- * Parse arguments.
- */
- public static String[] processOptions(String args[]) {
- String usageError;
- goodUsage:
- for (int i = 0; ; ++i) {
- if (i == args.length) {
- return new String[0];
- }
- String arg = args[i];
- if (!arg.startsWith("-")) {
- processStdin = false;
- fileList.add(arg);
- mainModule = arg;
- String[] result = new String[args.length - i - 1];
- System.arraycopy(args, i + 1, result, 0, args.length - i - 1);
- return result;
- }
- if (arg.equals("-version")) {
- if (++i == args.length) {
- usageError = arg;
- break goodUsage;
- }
- int version;
- try {
- version = Integer.parseInt(args[i]);
- } catch (NumberFormatException ex) {
- usageError = args[i];
- break goodUsage;
- }
- if (!Context.isValidLanguageVersion(version)) {
- usageError = args[i];
- break goodUsage;
- }
- shellContextFactory.setLanguageVersion(version);
- continue;
- }
- if (arg.equals("-opt") || arg.equals("-O")) {
- if (++i == args.length) {
- usageError = arg;
- break goodUsage;
- }
- int opt;
- try {
- opt = Integer.parseInt(args[i]);
- } catch (NumberFormatException ex) {
- usageError = args[i];
- break goodUsage;
- }
- if (opt == -2) {
- // Compatibility with Cocoon Rhino fork
- opt = -1;
- } else if (!Context.isValidOptimizationLevel(opt)) {
- usageError = args[i];
- break goodUsage;
- }
- shellContextFactory.setOptimizationLevel(opt);
- continue;
- }
- if (arg.equals("-encoding")) {
- if (++i == args.length) {
- usageError = arg;
- break goodUsage;
- }
- String enc = args[i];
- shellContextFactory.setCharacterEncoding(enc);
- continue;
- }
- if (arg.equals("-strict")) {
- shellContextFactory.setStrictMode(true);
- shellContextFactory.setAllowReservedKeywords(false);
- errorReporter.setIsReportingWarnings(true);
- continue;
- }
- if (arg.equals("-fatal-warnings")) {
- shellContextFactory.setWarningAsError(true);
- continue;
- }
- if (arg.equals("-e")) {
- processStdin = false;
- if (++i == args.length) {
- usageError = arg;
- break goodUsage;
- }
- if (false) {
- global.init(shellContextFactory);
- }
- IProxy iproxy = new IProxy(IProxy.EVAL_INLINE_SCRIPT);
- iproxy.scriptText = args[i];
- shellContextFactory.call(iproxy);
- continue;
- }
- if (arg.equals("-require")) {
- useRequire = true;
- continue;
- }
- if (arg.equals("-sandbox")) {
- sandboxed = true;
- useRequire = true;
- continue;
- }
- if (arg.equals("-modules")) {
- if (++i == args.length) {
- usageError = arg;
- break goodUsage;
- }
- if (modulePath == null) {
- modulePath = new ArrayList();
- }
- modulePath.add(args[i]);
- useRequire = true;
- continue;
- }
- if (arg.equals("-w")) {
- errorReporter.setIsReportingWarnings(true);
- continue;
- }
- if (arg.equals("-f")) {
- processStdin = false;
- if (++i == args.length) {
- usageError = arg;
- break goodUsage;
- }
- if (args[i].equals("-")) {
- fileList.add(null);
- } else {
- fileList.add(args[i]);
- mainModule = args[i];
- }
- continue;
- }
- if (arg.equals("-sealedlib")) {
- global.setSealedStdLib(true);
- continue;
- }
- if (arg.equals("-debug")) {
- shellContextFactory.setGeneratingDebug(true);
- continue;
- }
- if (arg.equals("-?") ||
- arg.equals("-help")) {
- // print usage message
- global.getOut().println(
- ToolErrorReporter.getMessage("msg.shell.usage", Main.class.getName()));
- exitCode = 1;
- return null;
- }
- usageError = arg;
- break goodUsage;
- }
- // print error and usage message
- global.getOut().println(
- ToolErrorReporter.getMessage("msg.shell.invalid", usageError));
- global.getOut().println(
- ToolErrorReporter.getMessage("msg.shell.usage", Main.class.getName()));
- exitCode = 1;
- return null;
- }
-
- private static void initJavaPolicySecuritySupport() {
- Throwable exObj;
- try {
- Class> cl = Class.forName
- ("org.mozilla.javascript.tools.shell.JavaPolicySecurity");
- securityImpl = (SecurityProxy) cl.newInstance();
- SecurityController.initGlobal(securityImpl);
- return;
- } catch (ClassNotFoundException ex) {
- exObj = ex;
- } catch (IllegalAccessException ex) {
- exObj = ex;
- } catch (InstantiationException ex) {
- exObj = ex;
- } catch (LinkageError ex) {
- exObj = ex;
- }
- throw Kit.initCause(new IllegalStateException(
- "Can not load security support: " + exObj), exObj);
- }
-
- /**
- * Evaluate JavaScript source.
- *
- * @param cx the current context
- * @param filename the name of the file to compile, or null
- * for interactive mode.
- * @throws IOException if the source could not be read
- * @throws RhinoException thrown during evaluation of source
- */
- public static void processSource(Context cx, String filename)
- throws IOException {
- if (filename == null || filename.equals("-")) {
- Scriptable scope = getShellScope();
- Charset cs;
- String charEnc = shellContextFactory.getCharacterEncoding();
- if (charEnc != null) {
- cs = Charset.forName(charEnc);
- } else {
- cs = Charset.defaultCharset();
- }
- ShellConsole console = global.getConsole(cs);
- if (filename == null) {
- // print implementation version
- console.println(cx.getImplementationVersion());
- }
-
- int lineno = 1;
- boolean hitEOF = false;
- while (!hitEOF) {
- String[] prompts = global.getPrompts(cx);
- String prompt = null;
- if (filename == null)
- prompt = prompts[0];
- console.flush();
- String source = "";
-
- // Collect lines of source to compile.
- while (true) {
- String newline;
- try {
- newline = console.readLine(prompt);
- } catch (IOException ioe) {
- console.println(ioe.toString());
- break;
- }
- if (newline == null) {
- hitEOF = true;
- break;
- }
- source = source + newline + "\n";
- lineno++;
- if (cx.stringIsCompilableUnit(source))
- break;
- prompt = prompts[1];
- }
- try {
- Script script = cx.compileString(source, "", lineno, null);
- if (script != null) {
- Object result = script.exec(cx, scope);
- // Avoid printing out undefined or function definitions.
- if (result != Context.getUndefinedValue() &&
- !(result instanceof Function &&
- source.trim().startsWith("function"))) {
- try {
- console.println(Context.toString(result));
- } catch (RhinoException rex) {
- ToolErrorReporter.reportException(
- cx.getErrorReporter(), rex);
- }
- }
- // NativeArray h = global.history;
- //h.put((int) h.getLength(), h, source);
- }
- } catch (RhinoException rex) {
- ToolErrorReporter.reportException(
- cx.getErrorReporter(), rex);
- exitCode = EXITCODE_RUNTIME_ERROR;
- } catch (VirtualMachineError ex) {
- // Treat StackOverflow and OutOfMemory as runtime errors
- ex.printStackTrace();
- String msg = ToolErrorReporter.getMessage(
- "msg.uncaughtJSException", ex.toString());
- Context.reportError(msg);
- exitCode = EXITCODE_RUNTIME_ERROR;
- }
- }
- console.println();
- console.flush();
- } else if (useRequire && filename.equals(mainModule)) {
- require.requireMain(cx, filename);
- } else {
- processFile(cx, getScope(filename), filename);
- }
- }
-
- public static void processFileNoThrow(Context cx, Scriptable scope, String filename) {
- try {
- processFile(cx, scope, filename);
- } catch (IOException ioex) {
- Context.reportError(ToolErrorReporter.getMessage(
- "msg.couldnt.read.source", filename, ioex.getMessage()));
- exitCode = EXITCODE_FILE_NOT_FOUND;
- } catch (RhinoException rex) {
- ToolErrorReporter.reportException(
- cx.getErrorReporter(), rex);
- exitCode = EXITCODE_RUNTIME_ERROR;
- } catch (VirtualMachineError ex) {
- // Treat StackOverflow and OutOfMemory as runtime errors
- ex.printStackTrace();
- String msg = ToolErrorReporter.getMessage(
- "msg.uncaughtJSException", ex.toString());
- Context.reportError(msg);
- exitCode = EXITCODE_RUNTIME_ERROR;
- }
- }
-
- public static void processFile(Context cx, Scriptable scope, String filename)
- throws IOException {
- if (securityImpl == null) {
- processFileSecure(cx, scope, filename, null);
- } else {
- //securityImpl.callProcessFileSecure(cx, scope, filename);
- }
- }
-
- static void processFileSecure(Context cx, Scriptable scope,
- String path, Object securityDomain)
- throws IOException {
-
- boolean isClass = path.endsWith(".class");
- Object source = readFileOrUrl(path, !isClass);
-
- byte[] digest = getDigest(source);
- String key = path + "_" + cx.getOptimizationLevel();
- ScriptReference ref = scriptCache.get(key, digest);
- Script script = ref != null ? ref.get() : null;
-
- if (script == null) {
- if (isClass) {
- script = loadCompiledScript(cx, path, (byte[]) source, securityDomain);
- } else {
- String strSrc = (String) source;
- // Support the executable script #! syntax: If
- // the first line begins with a '#', treat the whole
- // line as a comment.
- if (strSrc.length() > 0 && strSrc.charAt(0) == '#') {
- for (int i = 1; i != strSrc.length(); ++i) {
- int c = strSrc.charAt(i);
- if (c == '\n' || c == '\r') {
- strSrc = strSrc.substring(i);
- break;
- }
- }
- }
- script = cx.compileString(strSrc, path, 1, securityDomain);
- }
- scriptCache.put(key, digest, script);
- }
-
- if (script != null) {
- script.exec(cx, scope);
- }
- }
-
- private static byte[] getDigest(Object source) {
- byte[] bytes, digest = null;
-
- if (source != null) {
- if (source instanceof String) {
- try {
- bytes = ((String) source).getBytes("UTF-8");
- } catch (UnsupportedEncodingException ue) {
- bytes = ((String) source).getBytes();
- }
- } else {
- bytes = (byte[]) source;
- }
- try {
- MessageDigest md = MessageDigest.getInstance("MD5");
- digest = md.digest(bytes);
- } catch (NoSuchAlgorithmException nsa) {
- // Should not happen
- throw new RuntimeException(nsa);
- }
- }
-
- return digest;
- }
-
- private static Script loadCompiledScript(Context cx, String path,
- byte[] data, Object securityDomain)
- throws FileNotFoundException {
- if (data == null) {
- throw new FileNotFoundException(path);
- }
- // XXX: For now extract class name of compiled Script from path
- // instead of parsing class bytes
- int nameStart = path.lastIndexOf('/');
- if (nameStart < 0) {
- nameStart = 0;
- } else {
- ++nameStart;
- }
- int nameEnd = path.lastIndexOf('.');
- if (nameEnd < nameStart) {
- // '.' does not exist in path (nameEnd < 0)
- // or it comes before nameStart
- nameEnd = path.length();
- }
- String name = path.substring(nameStart, nameEnd);
- try {
- GeneratedClassLoader loader = SecurityController.createLoader(cx.getApplicationClassLoader(), securityDomain);
- Class> clazz = loader.defineClass(name, data);
- loader.linkClass(clazz);
- if (!Script.class.isAssignableFrom(clazz)) {
- throw Context.reportRuntimeError("msg.must.implement.Script");
- }
- return (Script) clazz.newInstance();
- } catch (IllegalAccessException iaex) {
- Context.reportError(iaex.toString());
- throw new RuntimeException(iaex);
- } catch (InstantiationException inex) {
- Context.reportError(inex.toString());
- throw new RuntimeException(inex);
- }
- }
-
- public static InputStream getIn() {
- return getGlobal().getIn();
- }
-
- public static void setIn(InputStream in) {
- getGlobal().setIn(in);
- }
-
- public static PrintStream getOut() {
- return getGlobal().getOut();
- }
-
- public static void setOut(PrintStream out) {
- getGlobal().setOut(out);
- }
-
- public static PrintStream getErr() {
- return getGlobal().getErr();
- }
-
- public static void setErr(PrintStream err) {
- getGlobal().setErr(err);
- }
-
- /**
- * Read file or url specified by path.
- *
- * @return file or url content as byte[] or as String if
- * convertToString is true.
- */
- private static Object readFileOrUrl(String path, boolean convertToString)
- throws IOException {
- return SourceReader.readFileOrUrl(path, convertToString,
- shellContextFactory.getCharacterEncoding());
- }
-
- static class ScriptReference extends SoftReference