diff --git a/.gitignore b/.gitignore index c2d303428..2774756f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,21 @@ +*.apk +*.exe *.iml -.gradle -/tools -/local.properties -/.idea/workspace.xml -/.idea/libraries -/.idea/caches +*.jks + .DS_Store -/build -/release -/captures .externalNativeBuild -*.apk -*.exe -.idea/caches/build_file_checksums.ser +output.json +output-metadata.json + +/.git/ +/.gradle/ +/.idea/ +/build/ +/libs/**/build/ +/captures/ +/release/ +/tools/ + +/local.properties +/sign.properties \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 0ec008f22..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "docs"] - path = docs - url = https://github.com/hyb1996/AutoJs-Docs diff --git a/LICENSE.md b/LICENSE similarity index 97% rename from LICENSE.md rename to LICENSE index 92b7e2d8f..a612ad981 100644 --- a/LICENSE.md +++ b/LICENSE @@ -1,7 +1,3 @@ -本项目的源代码在MPL2.0协议下发布,同时附加以下条目: -* **非商业性使用** — 不得将此项目及其衍生的项目的源代码和二进制产品用于任何商业和盈利用途 - - Mozilla Public License Version 2.0 ================================== @@ -47,7 +43,7 @@ Mozilla Public License Version 2.0 1.9. "Licensable" means having the right to grant, to the maximum extent possible, - whether at the timeFlag of the initial grant or subsequently, any and + whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. "Modifications" @@ -246,7 +242,7 @@ non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the -first timeFlag You have received notice of non-compliance with this License +first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. @@ -374,4 +370,4 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice --------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file + defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md new file mode 100644 index 000000000..b7b01a2a2 --- /dev/null +++ b/README.md @@ -0,0 +1,177 @@ + + +
+

+ AF_Banner +

+ +

Android 平台支持无障碍服务的 JavaScript 自动化工具

+ +

+ GitHub release (latest by date) + GitHub closed issues + Rhino + CodeFactor Grade + LGTM Grade +
+ Created + GitHub Code Size + GitHub Code Lines + GitHub License +

+
+ +****** + +### 简介 + +* Android 平台支持无障碍服务的 JavaScript 自动化工具 +* 复刻 (Fork) 自 [hyb1996/Auto.js](https://github.com/hyb1996/Auto.js) + +****** + +### 指南 + +****** + +* [项目文档](http://docs.autojs.org) + +****** + +### 功能 + +****** + +* 可用作 JavaScript IDE (代码补全/变量重命名/代码格式化) +* 支持基于 [无障碍服务](https://developer.android.com/reference/android/accessibilityservice/AccessibilityService) 的自动化操作 +* 支持悬浮窗快捷操作 (脚本录制及运行/查看包名及活动/布局分析) +* 支持选择器 API 并提供控件遍历/获取信息/控件操作 (类似 [UiAutomator](https://developer.android.com/training/testing/ui-automator)) +* 支持布局界面分析 (类似 Android Studio 的 LayoutInspector) +* 支持录制功能及录制回放 +* 支持屏幕截图/保存截图/图片找色/图片匹配 +* 支持 [E4X](https://zh.wikipedia.org/wiki/E4X) (ECMAScript for XML) 编写界面 +* 支持将脚本文件或项目打包为 APK 文件 +* 支持利用 Root 权限扩展功能 (屏幕点击/滑动/录制/Shell) +* 支持作为 Tasker 插件使用 + +****** + +### 主要变更 + +****** + +* Rhino 引擎由 [v1.7.7.2](https://github.com/mozilla/rhino/releases/tag/Rhino1_7_7_2_Release) 升级至 [v1.7.14 (SNAPSHOT)](https://github.com/mozilla/rhino/) + + * 支持 [Object.values()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/values) + + ```javascript + Object.values({name: 'Max', age: 4}); // ['max', 4] + ``` + + * 支持 [Array.prototype.includes()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) + + ```javascript + [10, 20, NaN].includes(20); // true + ``` + + * 支持 [BigInt](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/BigInt) + + ```javascript + typeof 567n === 'bigint'; // true + ``` + + * 支持 [模板字符串](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals) + + ```javascript + `Lucky number: ${(Math.random() * 100).toFixed(0)}` + ``` + + * 查看 Rhino 引擎 [更多新特性](https://github.com/SuperMonster003/AutoJs6/blob/master/app/src/main/assets/doc/RHINO.md) + + * 查看 Rhino 引擎 [兼容性列表](https://mozilla.github.io/rhino/compat/engines.html) + +****** + +### 版本历史 + +****** + +[comment]: <> "Version history only shows last 3 versions" + +# v6.0.0 + +###### 2021/12/01 + +* `新增` 主页抽屉底部增加重启应用按钮 +* `新增` 主页抽屉增加忽略电池优化/显示在其他应用上层等开关 +* `修复` 应用初始安装后部分区域主题颜色渲染异常的问题 +* `修复` sign.property 不存在时无法 build 的问题 +* `修复` 定时任务面板一次性任务的月份存取错误 +* `修复` 应用设置页面开关颜色不随主题变更的问题 +* `修复` 无法识别打包插件及打包插件下载地址无效的问题 +* `修复` 首页抽屉 "查看使用情况权限" 开关状态可能不同步的问题 +* `修复` TemplateMatching.fastTemplateMatching 潜在的 Mat 内存泄漏问题 +* `优化` 升级 Rhino 引擎版本 1.7.7.2 -> 1.7.13 -> 1.7.14-snapshot +* `优化` 升级 OpenCV 版本 3.4.3 -> 4.5.4 +* `优化` ViewUtil.getStatusBarHeight 提升兼容性 +* `优化` 主页抽屉移除用户登录相关模块并移除布局占位 +* `优化` 主页移除社区及市场标签页面并优化布局对其方式 +* `优化` 修改一些设置选项的默认开关状态 +* `优化` 关于页面增加 SinceDate 并优化 Copyright 显示 +* `优化` 升级 JSON 模块至 2017-06-12 版本并整合 cycle.js +* `优化` 移除 Activity 前置时的自动检查更新功能并移除检查更新相关按钮 +* `优化` AppOpsKt#isOpPermissionGranted 内部代码逻辑 +* `优化` ResourceMonitor 使用 ReentrantLock 增强安全性 (Ref to TonyJiangWJ) +* `优化` 使用 Maven Central 等仓库替换 JCenter 仓库 +* `优化` 抽离并移除重复的本地库文件 +* `优化` 本地化 CrashReport 版本 2.6.6 +* `优化` 本地化 MutableTheme 版本 1.0.0 +* `优化` 附加 Androidx Preference 版本 1.1.1 +* `优化` 附加 SwipeRefreshLayout 版本 1.1.0 +* `优化` 升级 Android Analytics 版本 7.0.0 -> 13.1.0 +* `优化` 升级 Android Annotations 版本 4.5.2 -> 4.8.0 +* `优化` 升级 Android Gradle 插件版本 3.2.1 -> 4.1.0 -> 7.0.3 -> 7.2.0-alpha04 +* `优化` 升级 Android Job 版本 1.2.6 -> 1.4.2 +* `优化` 升级 Android Material 版本 1.1.0-alpha01 -> 1.5.0-beta01 +* `优化` 升级 Androidx MultiDex 版本 2.0.0 -> 2.0.1 +* `优化` 升级 Apache Commons Lang3 版本 3.6 -> 3.12.0 +* `优化` 升级 Appcompat 版本 1.0.2 -> 1.4.0 +* `优化` 升级 ButterKnife Gradle 插件版本 9.0.0-rc2 -> 10.2.1 -> 10.2.3 +* `优化` 升级 ColorPicker 版本 2.1.5 -> 2.1.7 +* `优化` 升级 Espresso Core 版本 3.1.1-alpha01 -> 3.5.0-alpha03 +* `优化` 升级 Eventbus 版本 3.0.0 -> 3.2.0 +* `优化` 升级 Glide Compiler 版本 4.8.0 -> 4.12.0 -> 4.12.0 +* `优化` 升级 Gradle Build Tool 版本 29.0.2 -> 30.0.2 +* `优化` 升级 Gradle Compile 版本 28 -> 30 -> 31 +* `优化` 升级 Gradle 发行版本 4.10.2 -> 6.5 -> 7.0.2 -> 7.3 +* `优化` 升级 Groovy-Json 插件版本 3.0.7 -> 3.0.8 +* `优化` 升级 Gson 版本 2.8.2 -> 2.8.9 +* `优化` 升级 JavaVersion 版本 1.8 -> 11 -> 16 +* `优化` 升级 Joda Time 版本 2.9.9 -> 2.10.13 +* `优化` 升级 Junit 版本 4.12 -> 4.13.2 +* `优化` 升级 Kotlin Gradle 插件版本 1.3.10 -> 1.4.10 -> 1.6.0 +* `优化` 升级 Kotlinx Coroutines 版本 1.0.1 -> 1.5.2-native-mt +* `优化` 升级 Leakcanary 版本 1.6.1 -> 2.7 +* `优化` 升级 LicensesDialog 版本 1.8.1 -> 2.2.0 +* `优化` 升级 Material Dialogs 版本 0.9.2.3 -> 0.9.6.0 +* `优化` 升级 Okhttp3 版本 3.10.0 -> 5.0.0-alpha.2 -> 5.0.0-alpha.3 +* `优化` 升级 Reactivex RxJava2 RxAndroid 版本 2.0.1 -> 2.1.1 +* `优化` 升级 Reactivex RxJava2 版本 2.1.2 -> 2.2.21 +* `优化` 升级 Retrofit2 Converter Gson 版本 2.3.0 -> 2.9.0 +* `优化` 升级 Retrofit2 Retrofit 版本 2.3.0 -> 2.9.0 +* `优化` 升级 Zip4j 版本 1.3.2 -> 2.9.1 + +##### 更多版本历史可参阅 + +* [CHANGELOG.md](https://github.com/SuperMonster003/AutoJs6/blob/master/app/src/main/assets/doc/CHANGELOG.md) + +****** + +### 相关项目 + +****** + +* [Auto.js](https://github.com/hyb1996/Auto.js-VSCode-Extension) { author: [hyb1996](https://github.com/hyb1996) } + - `适用于 VS Code 的桌面开发插件` +* [Auto.js-TypeScript-Declarations](https://github.com/SuperMonster003/Auto.js-TypeScript-Declarations) { author: [SuperMonster003](https://github.com/SuperMonster003) } + - `Auto.js 声明文件 (.d.ts)` diff --git a/Readme-cn.md b/Readme-cn.md deleted file mode 100644 index 1bfa80e3c..000000000 --- a/Readme-cn.md +++ /dev/null @@ -1,56 +0,0 @@ -# Auto.js - -[Documentation in English](https://github.com/hyb1996/Auto.js/blob/master/Readme.md) - -## 重要提示 - -**Auto.js 开源版本已不再维护(原因参见[Auto.js Pro FAQ](https://pro.autojs.org/faq)),后续将只维护[Auto.js Pro专业版](https://pro.autojs.org),更多信息查看[Auto.js Pro文档](https://pro.autojs.org/docs)和[Auto.js Pro特性](https://pro.autojs.org/features)。** - -## 简介 - -一个支持无障碍服务的Android平台上的JavaScript IDE,其发展目标是JsBox和Workflow。 - -同时有[VS Code 插件](https://github.com/hyb1996/Auto.js-VSCode-Extension)可提供基础的在桌面开发的功能。 - -下载地址:[酷安](http://www.coolapk.com/apk/org.autojs.autojspro) - -Alpha版本:[Releases](https://github.com/hyb1996/NoRootScriptDroid/releases) - -官方文档:https://hyb1996.github.io/AutoJs-Docs/ - -### 特性 -1. 由无障碍服务实现的简单易用的自动操作函数 -2. 悬浮窗录制和运行 -3. 更专业&强大的选择器API,提供对屏幕上的控件的寻找、遍历、获取信息、操作等。类似于Google的UI测试框架UiAutomator,您也可以把他当做移动版UI测试框架使用 -4. 采用JavaScript为脚本语言,并支持代码补全、变量重命名、代码格式化、查找替换等功能,可以作为一个JavaScript IDE使用 -5. 支持使用e4x编写界面,并可以将JavaScript打包为apk文件,您可以用它来开发小工具应用 -6. 支持使用Root权限以提供更强大的屏幕点击、滑动、录制功能和运行shell命令。录制录制可产生js文件或二进制文件,录制动作的回放比较流畅 -7. 提供截取屏幕、保存截图、图片找色、找图等函数 -8. 可作为Tasker插件使用,结合Tasker可胜任日常工作流 -9. 带有界面分析工具,类似Android Studio的LayoutInspector,可以分析界面层次和范围、获取界面上的控件信息 - -本软件与按键精灵等软件不同,主要区别是: -1. Auto.js主要以自动化、工作流为目标,更多地是方便日常生活工作,例如启动游戏时自动屏蔽通知、一键与特定联系人微信视频(知乎上出现过该问题,老人难以进行复杂的操作和子女进行微信视频)等 -2. Auto.js兼容性更好。以坐标为基础的按键精灵、脚本精灵很容易出现分辨率问题,而以控件为基础的Auto.js则没有这个问题 -3. Auto.js执行大部分任务不需要root权限。只有需要精确坐标点击、滑动的相关函数才需要root权限 -4. Auto.js可以提供界面编写等功能,不仅仅是作为一个脚本软件而存在 - - -### 信息 -* 官方论坛: [autojs.org](http://www.autojs.org) -* 文档:可在[这里](https://hyb1996.github.io/AutoJs-Docs/)查看在线文档。目前文档仍然不完善。 -* 示例:可在[这里](https://github.com/hyb1996/NoRootScriptDroid/tree/master/app/src/main/assets/sample)查看一些示例,或者直接在应用内查看和运行。 - -### 截图 - -![screen-capture2](https://raw.githubusercontent.com/hyb1996/NoRootScriptDroid/master/screen-captures/ss02.png) - -![screen-capture5](https://raw.githubusercontent.com/hyb1996/NoRootScriptDroid/master/screen-captures/ss05.png) - -![screen-capture5](https://raw.githubusercontent.com/hyb1996/NoRootScriptDroid/master/screen-captures/ss07.png) - -![screen-capture5](https://raw.githubusercontent.com/hyb1996/NoRootScriptDroid/master/screen-captures/ss08.png) - -## License -基于[Mozilla Public License Version 2.0](https://github.com/hyb1996/NoRootScriptDroid/blob/master/LICENSE.md)并附加以下条款: -* **非商业性使用** — 不得将此项目及其衍生的项目的源代码和二进制产品用于任何商业和盈利用途 diff --git a/app/build.gradle b/app/build.gradle index 8827a8331..cfd3f6d73 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,21 +1,46 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' -apply plugin: 'com.jakewharton.butterknife' +plugins { + id "com.android.application" + id "com.jakewharton.butterknife" + id "kotlin-android" + id "kotlin-kapt" +} + +def AnnotationsVer = "4.8.0" +def SupportLibsVer = "28.0.0" +def ButterKnifeVer = "10.2.3" -def AAVersion = '4.5.2' -def SupportLibVersion = '28.0.0' +def properties = new Properties() +def propFile = new File("sign.properties") +def isPropFileExists = propFile.exists() + +isPropFileExists && properties.load(new FileInputStream(propFile)) configurations.all { resolutionStrategy { - force "com.android.support:appcompat-v7:${SupportLibVersion}" - force "com.android.support:support-v4:${SupportLibVersion}" + force "com.android.support:support-v4:${SupportLibsVer}" } } +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_16 + } +} + +tasks.withType(JavaCompile) { + options.compilerArgs << '-Xlint:deprecation' << '-Xlint:unchecked' +} + android { + signingConfigs { + isPropFileExists && release { + storeFile file(properties["storeFile"]) + keyPassword properties["keyPassword"] + keyAlias properties["keyAlias"] + storePassword properties["storePassword"] + } + } compileSdkVersion versions.compile - buildToolsVersion versions.buildTool defaultConfig { applicationId "org.autojs.autojs" minSdkVersion versions.mini @@ -24,40 +49,50 @@ android { versionName versions.appVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true + javaCompileOptions { + annotationProcessorOptions { + arguments = [ + 'resourcePackageName': applicationId, + "androidManifestFile": "$projectDir/src/main/AndroidManifest.xml".toString() + ] + } + } } buildTypes { debug { shrinkResources false minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + if (isPropFileExists) { + signingConfig signingConfigs.release + } } release { shrinkResources false minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + if (isPropFileExists) { + signingConfig signingConfigs.release + } } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - encoding = 'utf-8' + sourceCompatibility JavaVersion.VERSION_16 + targetCompatibility JavaVersion.VERSION_16 + encoding = "utf-8" } lintOptions { abortOnError false - disable 'MissingTranslation' - disable 'ExtraTranslation' + disable "MissingTranslation" + disable "ExtraTranslation" } - configurations.all { - resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1' + resolutionStrategy.force "com.google.code.findbugs:jsr305:3.0.1" } - flavorDimensions "channel" splits { - // Configures multiple APKs based on ABI. abi { - // Enables building multiple APKs per ABI. enable true @@ -68,7 +103,7 @@ android { reset() // Specifies a list of ABIs that Gradle should create APKs for. - include "x86", "armeabi-v7a" + include "armeabi-v7a" // Specifies that we do not want to also generate a universal APK that includes all ABIs. universalApk false @@ -76,106 +111,117 @@ android { } productFlavors { common { - buildConfigField "String", "CHANNEL", '"common"' - } - coolapk { - buildConfigField "String", "CHANNEL", '"coolapk"' + buildConfigField "String", "CHANNEL", "\"common\"" + buildConfigField "String", "APP_SINCE_DATE", "\"${versions.appSinceDate}\"" } } - } - - - repositories { - flatDir { - dirs 'libs' - } google() } dependencies { - androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1-alpha01', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - testImplementation 'junit:junit:4.12' + testImplementation "junit:junit:4.13.2" + // Kotlin - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.1" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2-native-mt" + // Android Annotations - annotationProcessor "org.androidannotations:androidannotations:$AAVersion" - implementation "org.androidannotations:androidannotations-api:$AAVersion" + kapt "org.androidannotations:androidannotations:${AnnotationsVer}" + implementation "org.androidannotations:androidannotations-api:${AnnotationsVer}" + // ButterKnife - implementation('com.jakewharton:butterknife:9.0.0-rc2', { - exclude group: 'com.android.support' - }) - annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc2' + kapt "com.jakewharton:butterknife-compiler:${ButterKnifeVer}" + implementation "com.jakewharton:butterknife:${ButterKnifeVer}" + // Android supports - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'com.google.android.material:material:1.1.0-alpha01' - implementation 'androidx.multidex:multidex:2.0.0' - // Personal libraries - implementation 'com.github.hyb1996:MutableTheme:1.0.0' + implementation "androidx.appcompat:appcompat:1.4.0" + implementation "androidx.cardview:cardview:1.0.0" + implementation "com.google.android.material:material:1.5.0-beta01" + implementation "androidx.multidex:multidex:2.0.1" + // Material Dialogs - implementation('com.afollestad.material-dialogs:core:0.9.2.3', { - exclude group: 'com.android.support' - }) + implementation "com.afollestad.material-dialogs:core:0.9.6.0" + + // SwipeRefreshLayout + implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" + // Common Markdown - implementation 'com.github.atlassian:commonmark-java:commonmark-parent-0.9.0' + implementation "com.github.atlassian:commonmark-java:commonmark-parent-0.9.0" + // Android issue reporter (a github issue reporter) - implementation('com.heinrichreimersoftware:android-issue-reporter:1.3.1', { - exclude group: 'com.afollestad.material-dialogs' - exclude group: 'com.android.support' - }) - //MultiLevelListView - implementation 'com.github.hyb1996:android-multi-level-listview:1.1' - //Licenses Dialog - implementation 'de.psdev.licensesdialog:licensesdialog:1.8.1' - //Expandable RecyclerView - implementation 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1' - //FlexibleDivider - implementation 'com.yqritc:recyclerview-flexibledivider:1.4.0' - //??? - implementation 'com.wang.avi:library:2.1.3' - //Commons-lang - implementation 'org.apache.commons:commons-lang3:3.6' - //Expandable RecyclerView - implementation 'com.thoughtbot:expandablerecyclerview:1.3' - implementation 'com.github.hyb1996:Auto.js-ApkBuilder:1.0.1' + implementation "com.heinrichreimersoftware:android-issue-reporter:1.3.1" + + // MultiLevelListView + implementation "com.github.hyb1996:android-multi-level-listview:1.1" + + // Licenses Dialog + implementation "de.psdev.licensesdialog:licensesdialog:2.2.0" + + // Expandable RecyclerView + implementation "com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1" + + // FlexibleDivider + implementation "com.yqritc:recyclerview-flexibledivider:1.4.0" + + // AVLoadingView + implementation "com.wang.avi:library:2.1.3" + + // Commons Lang + implementation "org.apache.commons:commons-lang3:3.12.0" + + // Expandable RecyclerView + implementation "com.thoughtbot:expandablerecyclerview:1.3" + + implementation "com.github.hyb1996:Auto.js-ApkBuilder:1.0.1" + // RxJava - implementation "io.reactivex.rxjava2:rxjava:2.1.2" - implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' + implementation "io.reactivex.rxjava2:rxjava:2.2.21" + implementation "io.reactivex.rxjava2:rxandroid:2.1.1" + // Retrofit - implementation 'com.squareup.retrofit2:retrofit:2.3.0' - implementation 'com.squareup.retrofit2:converter-gson:2.3.0' - implementation 'com.squareup.retrofit2:converter-gson:2.3.0' - implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' - implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - //Glide - implementation('com.github.bumptech.glide:glide:4.8.0', { - exclude group: 'com.android.support' - }) - kapt 'com.github.bumptech.glide:compiler:4.8.0' - //joda time - implementation 'joda-time:joda-time:2.9.9' + implementation "com.squareup.retrofit2:retrofit:2.9.0" + implementation "com.squareup.retrofit2:converter-gson:2.9.0" + implementation "com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0" + implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2" + + // Glide + kapt "com.github.bumptech.glide:compiler:4.12.0" + implementation "com.github.bumptech.glide:glide:4.12.0" + + // Joda Time + implementation "joda-time:joda-time:2.10.13" + // Tasker Plugin - implementation 'com.twofortyfouram:android-plugin-client-sdk-for-locale:4.0.3' + implementation "com.twofortyfouram:android-plugin-client-sdk-for-locale:4.0.3" + // Flurry - implementation 'com.flurry.android:analytics:7.0.0@aar' + implementation "com.flurry.android:analytics:13.1.0" + + // Material Dialogs + implementation "com.afollestad.material-dialogs:commons:0.9.6.0" + + // Android Job + implementation "com.evernote:android-job:1.4.2" + + // Leakcanary + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' + + // Extracted from com.github.hyb1996:MutableTheme:1.0.0 + api 'com.jrummyapps:colorpicker:2.1.7' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'com.github.ozodrukh:CircularReveal:2.0.1' + // Bugly - implementation 'com.tencent.bugly:crashreport:2.6.6' - // MaterialDialogCommon - implementation('com.afollestad.material-dialogs:commons:0.9.2.3', { - exclude group: 'com.android.support' - }) - // Android job - implementation 'com.evernote:android-job:1.2.6' - debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1' - releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1' - // Optional, if you use support library fragments: - debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.1' - implementation project(':automator') - implementation project(':common') - implementation project(':autojs') + implementation project(":libs:com.tencent.bugly.crashreport-2.6.6") + + implementation project(":automator") + implementation project(":common") + implementation project(":autojs") } + +java { + sourceCompatibility = JavaVersion.VERSION_16 + targetCompatibility = JavaVersion.VERSION_16 +} \ No newline at end of file diff --git a/app/libs/opencv-3.4.3.aar b/app/libs/opencv-3.4.3.aar deleted file mode 100644 index c0ffeb818..000000000 Binary files a/app/libs/opencv-3.4.3.aar and /dev/null differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index b1738212c..4da40d6bf 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -39,6 +39,7 @@ -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe ; } +-keep enum org.greenrobot.eventbus.ThreadMode { *; } # volley -keepclassmembers class ** { @com.google.common.eventbus.Subscribe ; @@ -70,10 +71,6 @@ *** get*(); } --keep class * extends android.support.v4.app.Fragment { - ; -} - -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } diff --git a/app/release/output.json b/app/release/output.json deleted file mode 100644 index 9c9de02a2..000000000 --- a/app/release/output.json +++ /dev/null @@ -1 +0,0 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"FULL_SPLIT","splits":[{"filterType":"ABI","value":"armeabi-v7a"}],"versionCode":261,"versionName":"4.1.1 Alpha2","enabled":true,"filterName":"armeabi-v7a","outputFile":"inrt-armeabi-v7a-release.apk","fullName":"armeabi-v7aRelease","baseName":"armeabi-v7a-release"},"path":"inrt-armeabi-v7a-release.apk","properties":{}},{"outputType":{"type":"APK"},"apkInfo":{"type":"FULL_SPLIT","splits":[{"filterType":"ABI","value":"x86"}],"versionCode":261,"versionName":"4.1.1 Alpha2","enabled":true,"filterName":"x86","outputFile":"inrt-x86-release.apk","fullName":"x86Release","baseName":"x86-release"},"path":"inrt-x86-release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2b708db8b..84c00630b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,310 +1,330 @@ - - - - - - - - - - - - - - - - + xmlns:tools="http://schemas.android.com/tools" + package="org.autojs.autojs"> + + + + + + + + + + + + + + - - + + - + + android:name=".App" + android:allowBackup="false" + android:icon="@drawable/autojs_material" + android:label="@string/app_name" + android:largeHeap="true" + android:supportsRtl="true" + android:theme="@style/AppTheme" + android:usesCleartextTraffic="true" + tools:replace="android:label, android:allowBackup"> + android:name="android.max_aspect" + android:value="2.1" /> + android:name=".ui.splash.SplashActivity" + android:hardwareAccelerated="true" + android:label="@string/app_name" + android:theme="@style/AppTheme.Splash" + android:exported="true"> - + - + - + android:name=".ui.main.MainActivity_" + android:hardwareAccelerated="true" + android:label="@string/app_name" + android:launchMode="singleTask" + android:theme="@style/AppTheme.FullScreen" /> + android:name=".external.shortcut.ShortcutActivity" + android:taskAffinity="org.autojs.autojs.external.shortcut.ShortcutActivity" + android:theme="@android:style/Theme.NoDisplay" + android:exported="true"> - + - + + android:name="androidx.core.content.FileProvider" + android:authorities="org.autojs.autojs.fileprovider" + android:exported="false" + android:grantUriPermissions="true"> + android:name="android.support.FILE_PROVIDER_PATHS" + android:resource="@xml/provider_paths" /> - - + android:name=".ui.edit.EditActivity_" + android:configChanges="orientation|screenSize" + android:launchMode="standard" + android:multiprocess="true" + android:taskAffinity="org.autojs.autojs.edit" + android:theme="@style/EditorTheme" /> + - + android:name=".ui.settings.SettingsActivity_" + android:theme="@style/AppTheme.Settings" /> + - + android:name=".external.tasker.TaskerScriptEditActivity_" + android:configChanges="orientation|screenSize" /> + + android:name=".ui.user.LoginActivity_" + android:windowSoftInputMode="adjustResize" /> - + android:name=".ui.user.RegisterActivity_" + android:windowSoftInputMode="adjustResize" /> + - - - - - + android:name=".ui.project.BuildActivity_" + android:configChanges="orientation|screenSize" /> + + + + + - + android:name=".ui.shortcut.ShortcutCreateActivity" + android:theme="@style/AppTheme.Transparent" /> + - + - - + + + android:name=".ui.error.IssueReporterActivity" + android:theme="@style/IssueReporterTheme" /> - - + + - + + android:name=".external.tile.LayoutBoundsTile" + android:icon="@drawable/ic_circular_menu_bounds" + android:label="@string/text_inspect_layout_bounds" + android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" + android:exported="false"> + android:name="android.service.quicksettings.ACTIVE_TILE" + android:value="false" /> - + + android:name=".external.tile.LayoutHierarchyTile" + android:icon="@drawable/ic_circular_menu_hierarchy" + android:label="@string/text_inspect_layout_hierarchy" + android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" + android:exported="false"> + android:name="android.service.quicksettings.ACTIVE_TILE" + android:value="false" /> - + + android:name=".external.tasker.PluginActivity" + android:exported="true" + android:icon="@drawable/ic_android_eat_js" + android:label="@string/app_name" + android:targetActivity=".external.tasker.TaskPrefEditActivity_" + tools:ignore="ExportedActivity"> - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - + + android:name=".external.tasker.FireSettingReceiver" + android:exported="true" + android:process=":background" + tools:ignore="ExportedReceiver"> - + + android:name=".external.open.EditIntentActivity" + android:icon="@drawable/autojs_material" + android:label="@string/text_edit_script" + android:exported="true"> - - + + - - + + - - - - + + + + + android:name=".external.open.RunIntentActivity" + android:icon="@drawable/autojs_material" + android:label="@string/text_run_script" + android:taskAffinity="org.autojs.autojs.external.open.RunIntentActivity" + android:theme="@android:style/Theme.NoDisplay" + android:exported="true"> - - + + - - + + - - - - + + + + + android:name=".external.open.ImportIntentActivity" + android:icon="@drawable/autojs_material" + android:label="@string/text_import_script" + android:theme="@style/AppTheme.Transparent" + android:exported="true"> - - + + - - + + - - - - + + + + + android:name="com.stardust.notification.NotificationListenerService" + android:label="@string/app_name" + android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" + android:exported="false"> - + - + - + + android:name="android.appwidget.provider" + android:resource="@xml/script_widget_config" /> - + - + + + \ No newline at end of file diff --git a/app/src/main/assets/doc/CHANGELOG.md b/app/src/main/assets/doc/CHANGELOG.md new file mode 100644 index 000000000..aa5a37fc3 --- /dev/null +++ b/app/src/main/assets/doc/CHANGELOG.md @@ -0,0 +1,68 @@ +****** + +### 版本历史 + +****** + +# v6.0.0 + +###### 2021/12/01 + +* `新增` 主页抽屉底部增加重启应用按钮 +* `新增` 主页抽屉增加忽略电池优化/显示在其他应用上层等开关 +* `修复` 应用初始安装后部分区域主题颜色渲染异常的问题 +* `修复` sign.property 不存在时无法 build 的问题 +* `修复` 定时任务面板一次性任务的月份存取错误 +* `修复` 应用设置页面开关颜色不随主题变更的问题 +* `修复` 无法识别打包插件及打包插件下载地址无效的问题 +* `修复` 首页抽屉 "查看使用情况权限" 开关状态可能不同步的问题 +* `修复` TemplateMatching.fastTemplateMatching 潜在的 Mat 内存泄漏问题 +* `优化` 升级 Rhino 引擎版本 1.7.7.2 -> 1.7.13 -> 1.7.14-snapshot +* `优化` 升级 OpenCV 版本 3.4.3 -> 4.5.4 +* `优化` ViewUtil.getStatusBarHeight 提升兼容性 +* `优化` 主页抽屉移除用户登录相关模块并移除布局占位 +* `优化` 主页移除社区及市场标签页面并优化布局对其方式 +* `优化` 修改一些设置选项的默认开关状态 +* `优化` 关于页面增加 SinceDate 并优化 Copyright 显示 +* `优化` 升级 JSON 模块至 2017-06-12 版本并整合 cycle.js +* `优化` 移除 Activity 前置时的自动检查更新功能并移除检查更新相关按钮 +* `优化` AppOpsKt#isOpPermissionGranted 内部代码逻辑 +* `优化` ResourceMonitor 使用 ReentrantLock 增强安全性 (Ref to TonyJiangWJ) +* `优化` 使用 Maven Central 等仓库替换 JCenter 仓库 +* `优化` 抽离并移除重复的本地库文件 +* `优化` 本地化 CrashReport 版本 2.6.6 +* `优化` 本地化 MutableTheme 版本 1.0.0 +* `优化` 附加 Androidx Preference 版本 1.1.1 +* `优化` 附加 SwipeRefreshLayout 版本 1.1.0 +* `优化` 升级 Android Analytics 版本 7.0.0 -> 13.1.0 +* `优化` 升级 Android Annotations 版本 4.5.2 -> 4.8.0 +* `优化` 升级 Android Gradle 插件版本 3.2.1 -> 4.1.0 -> 7.0.3 -> 7.2.0-alpha04 +* `优化` 升级 Android Job 版本 1.2.6 -> 1.4.2 +* `优化` 升级 Android Material 版本 1.1.0-alpha01 -> 1.5.0-beta01 +* `优化` 升级 Androidx MultiDex 版本 2.0.0 -> 2.0.1 +* `优化` 升级 Apache Commons Lang3 版本 3.6 -> 3.12.0 +* `优化` 升级 Appcompat 版本 1.0.2 -> 1.4.0 +* `优化` 升级 ButterKnife Gradle 插件版本 9.0.0-rc2 -> 10.2.1 -> 10.2.3 +* `优化` 升级 ColorPicker 版本 2.1.5 -> 2.1.7 +* `优化` 升级 Espresso Core 版本 3.1.1-alpha01 -> 3.5.0-alpha03 +* `优化` 升级 Eventbus 版本 3.0.0 -> 3.2.0 +* `优化` 升级 Glide Compiler 版本 4.8.0 -> 4.12.0 -> 4.12.0 +* `优化` 升级 Gradle Build Tool 版本 29.0.2 -> 30.0.2 +* `优化` 升级 Gradle Compile 版本 28 -> 30 -> 31 +* `优化` 升级 Gradle 发行版本 4.10.2 -> 6.5 -> 7.0.2 -> 7.3 +* `优化` 升级 Groovy-Json 插件版本 3.0.7 -> 3.0.8 +* `优化` 升级 Gson 版本 2.8.2 -> 2.8.9 +* `优化` 升级 JavaVersion 版本 1.8 -> 11 -> 16 +* `优化` 升级 Joda Time 版本 2.9.9 -> 2.10.13 +* `优化` 升级 Junit 版本 4.12 -> 4.13.2 +* `优化` 升级 Kotlin Gradle 插件版本 1.3.10 -> 1.4.10 -> 1.6.0 +* `优化` 升级 Kotlinx Coroutines 版本 1.0.1 -> 1.5.2-native-mt +* `优化` 升级 Leakcanary 版本 1.6.1 -> 2.7 +* `优化` 升级 LicensesDialog 版本 1.8.1 -> 2.2.0 +* `优化` 升级 Material Dialogs 版本 0.9.2.3 -> 0.9.6.0 +* `优化` 升级 Okhttp3 版本 3.10.0 -> 5.0.0-alpha.2 -> 5.0.0-alpha.3 +* `优化` 升级 Reactivex RxJava2 RxAndroid 版本 2.0.1 -> 2.1.1 +* `优化` 升级 Reactivex RxJava2 版本 2.1.2 -> 2.2.21 +* `优化` 升级 Retrofit2 Converter Gson 版本 2.3.0 -> 2.9.0 +* `优化` 升级 Retrofit2 Retrofit 版本 2.3.0 -> 2.9.0 +* `优化` 升级 Zip4j 版本 1.3.2 -> 2.9.1 \ No newline at end of file diff --git a/app/src/main/assets/doc/RHINO.md b/app/src/main/assets/doc/RHINO.md new file mode 100644 index 000000000..cfd898ba7 --- /dev/null +++ b/app/src/main/assets/doc/RHINO.md @@ -0,0 +1,177 @@ +* [Object.values()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/values) + + ```javascript + Object.values({name: 'Max', age: 4}); // ['max', 4] + ``` + +* [Array.prototype.includes()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) + + ```javascript + [10, 20, NaN].includes(20); // true + ``` + +* [BigInt](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/BigInt) + + ```javascript + typeof 567n === 'bigint'; // true + ``` + +* [模板字符串](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals) + + ```javascript + `Lucky number: ${(Math.random() * 100).toFixed(0)}` + ``` + +* [求幂运算符](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Exponentiation) + + ```javascript + 9 ** 2 === 81; // true + ``` + +* [简短对象属性](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Object_initializer) + + ```javascript + let a = 7, b = 4, o = {a, b}; + o.a - o.b === 3; // true + ``` + +* [生成器函数](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Generator) + + ```javascript + let gen = function* () { yield 39 }; + gen().next().value === 39; // true + ``` + +* [参数尾逗号](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Trailing_commas) + + ```javascript + Math.max(9, 6, 3,) === 9; // true + ``` + +* [Map](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map) / [Set](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set) / [WeakMap](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) / [WeakSet](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) + + ```javascript + new Map().set('n', 2).set('n', 6).get('n'); // 6 + ``` + +* [Object.setPrototypeOf](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf) + + ```javascript + Object.setPrototypeOf({}, {n: 6}).n; // 6 + ``` + +* [Array.from](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from) / [Array.of](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/of) + + ```javascript + Array.from('123'); // ['1', '2', '3'] + Array.from('123', Number); // [1, 2, 3] + + Array.of('hello', 'world'); // ['hello', 'world'] + ``` + +* [Array.prototype.fill](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/fill) / [copyWithin](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin) + + ```javascript + let a = Array(4).fill('x'); // ['x', 'x', 'x', 'x'] + a.fill('y', 3); // ['x', 'x', 'x', 'y'] + a.fill('z', 0, 2); // ['z', 'z', 'x', 'y'] + + [1, 2, 3, 4, 5].copyWithin(-2, -3, -1); // [1, 2, 3, 3, 4] + [].copyWithin.call(new Int32Array([1, 2, 3]), 0, 2, 3); // [3, 2, 3] + ``` + +* [Array.prototype.find](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/find) / [findIndex](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex) + + ```javascript + let a = [5, 12, 8, 130, 44]; + a.find(n => n > 10); // 12 + a.findIndex(n => n > 10); // 1 + ``` + +* [Array.prototype.keys](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/keys) / [values](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/values) / [entries](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/entries) + + ```javascript + let a = [1,,,4]; + a.length; // 4 + + Object.keys(a); // ['0', '3'] + Array.from(a.keys()); // [0, 1, 2, 3] + + Object.values(a); // [1, 4] + Array.from(a.values()); // [1, undefined, undefined, 4] + + Object.entries(a); // [['0', 1], ['3', 4]] + Array.from(a.entries()); // [[0, 1], [1, undefined], [2, undefined], [3, 4]] + ``` + +* [Number.EPSILON](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON) + + ```javascript + let x = 0.1; + let y = 0.2; + let z = 0.3; + x + y - z === 0; // false + Math.abs(x + y - z) < Number.EPSILON; // true + ``` + +* [Math.clz32](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32) / [sign](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/sign) / [log2](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/log2) / [acosh](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh) / [asinh](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh) / [atanh](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh) / [fround](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/fround) + +* [Object.seal](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/seal) / [isSealed](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed) + + ```javascript + let o = {}; + Object.isSealed(o); // false + Object.preventExtensions(o); + Object.isSealed(o); // true + o.a = 1; + o.a; // /undefined + ``` + +* [Object.freeze](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) / [isFrozen](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen) + + ```javascript + let o = {a: 1, b: 2}; + Object.isFrozen(o); // false + delete o.a; // true + o; // {b: 2} + Object.freeze(o); + Object.isFrozen(o); // true + delete o.b; // false + o; // {b: 2} + o.c = 3; + o; // {b: 2} + ``` + +* [Object.preventExtensions](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions) / [isExtensible](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible) + + ```javascript + let o = {}; + Object.isExtensible(o) // true + Object.preventExtensions(o); + Object.isExtensible(o) // false + o.a = 1; + o; // {} + ``` + +* [Object.entries](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) / [fromEntries](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries) + + ```javascript + let o = {a: 1, b: 2}; + Array.from(Object.entries(o)); // [['a', 1], ['b', 2]] + + let e = [['a', 1], ['b', 2]]; + Object.fromEntries(e); // {a: 1, b: 2} + ``` + +* [String.prototype.padStart](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/padStart) / [padEnd](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd) + + ```javascript + let h = '9'; + let m = '30'; + let s = '7'; + let pad = o => o.padStart(2, '0'); + `${pad(h)}:${pad(m)}:${pad(s)}`; // '09:30:07' + + pad = o => o.padEnd(2, '_'); + `${pad(h)}:${pad(m)}:${pad(s)}`; // '9_:30:7_' + ``` \ No newline at end of file diff --git a/app/src/main/assets/indices/all_android_classes.json b/app/src/main/assets/indices/all_android_classes.json index d92cdfef6..2ecedc3bb 100644 --- a/app/src/main/assets/indices/all_android_classes.json +++ b/app/src/main/assets/indices/all_android_classes.json @@ -1 +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 +[{"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": "androidx.preference", "class_name": "CheckBoxPreference", "full_name": "androidx.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/js-beautify/beautify.js b/app/src/main/assets/js/js-beautify/beautify.js index 5fdfb6b61..a797a2c96 100644 --- a/app/src/main/assets/js/js-beautify/beautify.js +++ b/app/src/main/assets/js/js-beautify/beautify.js @@ -2848,6 +2848,4 @@ function beautify(source){ 'indent_size': 4, 'e4x': true }); -} - -beautify; \ No newline at end of file +} \ 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" index d726ed826..33f4c4619 100644 --- "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" @@ -24,7 +24,7 @@ ui.layout( - + diff --git a/app/src/main/java/androidx/recyclerview/widget/ThemeColorRecyclerView.java b/app/src/main/java/androidx/recyclerview/widget/ThemeColorRecyclerView.java new file mode 100644 index 000000000..ebab2b678 --- /dev/null +++ b/app/src/main/java/androidx/recyclerview/widget/ThemeColorRecyclerView.java @@ -0,0 +1,128 @@ +package androidx.recyclerview.widget; + + +import android.content.Context; +import android.os.Build; +import androidx.annotation.Nullable; +import androidx.core.widget.EdgeEffectCompat; + +import android.util.AttributeSet; +import android.widget.EdgeEffect; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +import java.lang.reflect.Field; + +/** + * Created by Stardust on 2016/8/14. + */ +public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMutable { + + private Field mLeftGlowField, mTopGlowField, mRightGlowField, mBottomGlowField; + private Field mEdgeEffectField; + private int mColorPrimary; + private boolean hasAppliedThemeColorLeft; + private boolean hasAppliedThemeColorTop; + private boolean hasAppliedThemeColorRight; + private boolean hasAppliedThemeColorBottom; + + public ThemeColorRecyclerView(Context context) { + super(context); + init(); + } + + + public ThemeColorRecyclerView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + private boolean applyThemeColor(Field edgeEffectCompatField) { + try { + EdgeEffectCompat edgeEffectCompat = (EdgeEffectCompat) edgeEffectCompatField.get(this); + if (edgeEffectCompat != null) + return setEdgeEffectColor(edgeEffectCompat, mColorPrimary); + } catch (Exception ignored) { + } + return false; + } + + private void init() { + try { + mEdgeEffectField = EdgeEffectCompat.class.getDeclaredField("mEdgeEffect"); + mEdgeEffectField.setAccessible(true); + mLeftGlowField = RecyclerView.class.getDeclaredField("mLeftGlow"); + mLeftGlowField.setAccessible(true); + mRightGlowField = RecyclerView.class.getDeclaredField("mRightGlow"); + mRightGlowField.setAccessible(true); + mTopGlowField = RecyclerView.class.getDeclaredField("mTopGlow"); + mTopGlowField.setAccessible(true); + mBottomGlowField = RecyclerView.class.getDeclaredField("mBottomGlow"); + mBottomGlowField.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + ThemeColorManager.add(this); + } + + // TODO support api 21 below + private boolean setEdgeEffectColor(EdgeEffectCompat compat, int color) { + if (compat == null) + return false; + try { + if (Build.VERSION.SDK_INT >= 21) { // Android L + EdgeEffect edgeEffect = (EdgeEffect) mEdgeEffectField.get(compat); + edgeEffect.setColor(color); + } + return true; + } catch (Exception e) { + return true; + } + } + + @Override + public void setThemeColor(ThemeColor color) { + if (color.colorPrimary == mColorPrimary) + return; + mColorPrimary = color.colorPrimary; + invalidateGlows(); + } + + void invalidateGlows() { + super.invalidateGlows(); + hasAppliedThemeColorBottom = hasAppliedThemeColorLeft = hasAppliedThemeColorRight = hasAppliedThemeColorTop = false; + } + + void ensureLeftGlow() { + super.ensureLeftGlow(); + if (!hasAppliedThemeColorLeft) + hasAppliedThemeColorLeft = applyThemeColor(mLeftGlowField); + } + + void ensureRightGlow() { + super.ensureLeftGlow(); + if (!hasAppliedThemeColorRight) + hasAppliedThemeColorRight = applyThemeColor(mRightGlowField); + } + + void ensureTopGlow() { + super.ensureTopGlow(); + if (!hasAppliedThemeColorTop) + hasAppliedThemeColorTop = applyThemeColor(mTopGlowField); + + } + + void ensureBottomGlow() { + super.ensureBottomGlow(); + if (!hasAppliedThemeColorBottom) + hasAppliedThemeColorBottom = applyThemeColor(mBottomGlowField); + } + +} diff --git a/app/src/main/java/com/stardust/theme/ThemeColor.java b/app/src/main/java/com/stardust/theme/ThemeColor.java new file mode 100644 index 000000000..dac2b1c16 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/ThemeColor.java @@ -0,0 +1,105 @@ +package com.stardust.theme; + +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.annotation.ColorRes; +import androidx.core.content.ContextCompat; + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ThemeColor { + + private static final String KEY_COLOR_PRIMARY = "com.stardust.theme.ThemeColor.KEY_COLOR_PRIMARY"; + private static final String KEY_COLOR_PRIMARY_DARK = "com.stardust.theme.ThemeColor.KEY_COLOR_PRIMARY_DARK"; + private static final String KEY_COLOR_ACCENT = "com.stardust.theme.ThemeColor.KEY_COLOR_ACCENT"; + + private static final ThemeColor TRANSPARENT = new ThemeColor(); + + public int colorPrimary, colorAccent, colorPrimaryDark; + + public ThemeColor() { + } + + + public ThemeColor(int color) { + this(color, color, color); + } + + public ThemeColor(int colorPrimary, int colorAccent) { + this(colorPrimary, colorPrimary, colorAccent); + } + + public ThemeColor(int colorPrimary, int colorPrimaryDark, int colorAccent) { + this.colorAccent = colorAccent; + this.colorPrimary = colorPrimary; + this.colorPrimaryDark = colorPrimaryDark; + } + + public ThemeColor colorPrimary(int colorPrimary) { + this.colorPrimary = colorPrimary; + return this; + } + + public ThemeColor colorPrimaryDark(int colorPrimaryDark) { + this.colorPrimaryDark = colorPrimaryDark; + return this; + } + + public ThemeColor colorAccent(int colorAccent) { + this.colorAccent = colorAccent; + return this; + } + + public void saveIn(SharedPreferences preferences) { + preferences.edit() + .putInt(KEY_COLOR_PRIMARY, colorPrimary) + .putInt(KEY_COLOR_PRIMARY_DARK, colorPrimaryDark) + .putInt(KEY_COLOR_ACCENT, colorAccent) + .apply(); + + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof ThemeColor) { + ThemeColor color = (ThemeColor) obj; + return colorPrimary == color.colorPrimary && colorPrimaryDark == color.colorPrimaryDark + && colorAccent == color.colorAccent; + } + return false; + } + + public ThemeColor readFrom(SharedPreferences preferences, ThemeColor defaultThemeColor) { + colorPrimary = preferences.getInt(KEY_COLOR_PRIMARY, defaultThemeColor.colorPrimary); + colorAccent = preferences.getInt(KEY_COLOR_ACCENT, defaultThemeColor.colorAccent); + colorPrimaryDark = preferences.getInt(KEY_COLOR_PRIMARY_DARK, defaultThemeColor.colorPrimaryDark); + return this; + } + + public static ThemeColor fromPreferences(SharedPreferences preferences, ThemeColor defaultThemeColor) { + if (preferences.contains(KEY_COLOR_PRIMARY) && preferences.contains(KEY_COLOR_PRIMARY_DARK) && preferences.contains(KEY_COLOR_ACCENT)) { + return new ThemeColor().readFrom(preferences, TRANSPARENT); + } else if (defaultThemeColor == null) { + return null; + } else { + return new ThemeColor().readFrom(preferences, defaultThemeColor); + } + } + + public static ThemeColor fromColorRes(Context context, @ColorRes int colorPrimaryRes) { + return fromColorRes(context, colorPrimaryRes, colorPrimaryRes, colorPrimaryRes); + } + + public static ThemeColor fromColorRes(Context context, @ColorRes int colorPrimaryRes, @ColorRes int colorPrimaryDarkRes, @ColorRes int colorAccentRes) { + return new ThemeColor() + .colorPrimary(ContextCompat.getColor(context, colorPrimaryRes)) + .colorPrimaryDark(ContextCompat.getColor(context, colorPrimaryDarkRes)) + .colorAccent(ContextCompat.getColor(context, colorAccentRes)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/stardust/theme/ThemeColorHelper.java b/app/src/main/java/com/stardust/theme/ThemeColorHelper.java new file mode 100644 index 000000000..5b000c79a --- /dev/null +++ b/app/src/main/java/com/stardust/theme/ThemeColorHelper.java @@ -0,0 +1,110 @@ +package com.stardust.theme; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.res.ColorStateList; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.ShapeDrawable; +import android.os.Build; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.appcompat.widget.SwitchCompat; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AbsListView; +import android.widget.Switch; + +import com.stardust.theme.internal.ScrollingViewEdgeGlowColorHelper; + + +/** + * Created by Stardust on 2016/10/24. + */ + +public class ThemeColorHelper { + + private static final String TAG = "ThemeColorHelper"; + private static final int[][] SWITCH_STATES = new int[][]{ + new int[]{-android.R.attr.state_checked}, + new int[]{android.R.attr.state_checked}, + }; + + private static void setColorPrimary(View v, int themeColor) { + if (v instanceof ThemeColorMutable) { + ((ThemeColorMutable) v).setThemeColor(new ThemeColor(themeColor)); + return; + } + if (v instanceof AbsListView) { + ScrollingViewEdgeGlowColorHelper.setEdgeGlowColor((AbsListView) v, themeColor); + return; + } + Log.e(TAG, "Unsupported view: " + v); + } + + private static void setColorPrimary(ViewGroup viewGroup, int themeColor) { + for (int i = 0; i < viewGroup.getChildCount(); i++) { + setColorPrimary(viewGroup.getChildAt(i), themeColor); + } + } + + public static void setColorPrimary(SwitchCompat switchCompat, int color) { + setThumbDrawableTintList(switchCompat.getThumbDrawable(), color); + setTrackDrawableTintList(switchCompat.getTrackDrawable(), color); + } + + public static void setColorPrimary(Switch sw, int color) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + setThumbDrawableTintList(sw.getThumbDrawable(), color); + setTrackDrawableTintList(sw.getTrackDrawable(), color); + } + } + + private static void setThumbDrawableTintList(Drawable drawable, int color) { + int[] thumbColors = new int[]{ + Color.DKGRAY, + color, + }; + DrawableCompat.setTintList(DrawableCompat.wrap(drawable), new ColorStateList(SWITCH_STATES, thumbColors)); + + } + + private static void setTrackDrawableTintList(Drawable drawable, int color) { + int[] trackColors = new int[]{ + Color.GRAY, + makeAlpha(0x66, color) + }; + DrawableCompat.setTintList(DrawableCompat.wrap(drawable), new ColorStateList(SWITCH_STATES, trackColors)); + } + + private static int makeAlpha(int alpha, int color) { + return (color & 0xffffff) | (alpha << 24); + } + + + @TargetApi(21) + public static void setStatusBarColor(Activity activity, int color) { + if (Build.VERSION.SDK_INT >= 21) { + Window window = activity.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(color); + } + } + + public static void setBackgroundColor(View view, int color) { + Drawable background = view.getBackground(); + if (background instanceof ShapeDrawable) { + ((ShapeDrawable) background).getPaint().setColor(color); + } else if (background instanceof GradientDrawable) { + ((GradientDrawable) background).setColor(color); + } else if (background instanceof ColorDrawable) { + ((ColorDrawable) background).setColor(color); + } else { + view.setBackgroundColor(color); + } + } +} diff --git a/app/src/main/java/com/stardust/theme/ThemeColorManager.java b/app/src/main/java/com/stardust/theme/ThemeColorManager.java new file mode 100644 index 000000000..633b1c3b0 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/ThemeColorManager.java @@ -0,0 +1,254 @@ +package com.stardust.theme; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.graphics.Paint; +import android.os.Build; +import android.preference.PreferenceManager; +import android.view.View; + +import java.lang.ref.WeakReference; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Vector; + +/** + * Created by Stardust on 2016/5/10. + */ + +public class ThemeColorManager { + + private static ThemeColor defaultThemeColor; + private static ThemeColor themeColor; + private static WeakReference contextWeakReference; + private static boolean shouldApplyDefaultThemeColor; + + public static void init(Context context) { + init(context, null, false); + } + + public static void init(Context context, ThemeColor defaultThemeColor, boolean apply) { + contextWeakReference = new WeakReference<>(context); + ThemeColorManager.defaultThemeColor = defaultThemeColor; + themeColor = ThemeColor.fromPreferences(PreferenceManager.getDefaultSharedPreferences(context), defaultThemeColor); + shouldApplyDefaultThemeColor = apply; + } + + + public static void add(ThemeColorMutable colorMutable) { + ThemeColorMutableManager.add(colorMutable); + } + + public static void addViewBackground(View titleBarView) { + BackgroundColorManager.add(titleBarView); + } + + public static void addActivityStatusBar(Activity activity) { + StatusBarManager.add(activity); + } + + public static void addPaint(Paint paint) { + PaintManager.add(paint); + } + + public static void addActivityNavigationBar(final Activity activity) { + if (Build.VERSION.SDK_INT > 19) { + ThemeColorWidgetReferenceManager.add(new ThemeColorMutableReference() { + WeakReference weakReference = new WeakReference<>(activity); + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public void setThemeColor(ThemeColor color) { + activity.getWindow().setNavigationBarColor(color.colorPrimary); + } + + @Override + public boolean isNull() { + return weakReference.get() == null; + } + }); + } + } + + public static int getColorPrimary() { + if (themeColor == null) { + if (defaultThemeColor == null) + return 0; + else + return defaultThemeColor.colorPrimary; + } + return themeColor.colorPrimary; + } + + public static ThemeColor getThemeColor() { + return themeColor; + } + + public static ThemeColor getDefaultThemeColor() { + return defaultThemeColor; + } + + public static void setDefaultThemeColor(ThemeColor defaultThemeColor) { + ThemeColorManager.defaultThemeColor = defaultThemeColor; + } + + public static void setThemeColor(ThemeColor themeColor) { + ThemeColorManager.themeColor = themeColor; + saveThemeColorIfNeeded(); + int color = themeColor.colorPrimary; + BackgroundColorManager.setColor(color); + StatusBarManager.setColor(color); + PaintManager.setColor(color); + ThemeColorMutableManager.setColor(themeColor); + ThemeColorWidgetReferenceManager.setColor(themeColor); + } + + /** + * 设置主题色并为记录的状态栏和标题栏改变颜色 + * + * @param color 主题色RGB值 + */ + public static void setThemeColor(int color) { + themeColor = new ThemeColor(color); + saveThemeColorIfNeeded(); + BackgroundColorManager.setColor(color); + StatusBarManager.setColor(color); + PaintManager.setColor(color); + ThemeColorMutableManager.setColor(themeColor); + ThemeColorWidgetReferenceManager.setColor(themeColor); + } + + private static void saveThemeColorIfNeeded() { + if (contextWeakReference != null && contextWeakReference.get() != null) { + themeColor.saveIn(PreferenceManager.getDefaultSharedPreferences(contextWeakReference.get())); + } + } + + + private static boolean shouldApplyThemeColor() { + return themeColor != null && (defaultThemeColor == null || !defaultThemeColor.equals(themeColor) || shouldApplyDefaultThemeColor); + } + + private static class BackgroundColorManager { + private static List> views = new LinkedList<>(); + + public static void add(View view) { + views.add(new WeakReference<>(view)); + if (shouldApplyThemeColor()) + view.setBackgroundColor(themeColor.colorPrimary); + } + + + public static void setColor(int color) { + Iterator> iterator = views.iterator(); + while (iterator.hasNext()) { + View view = iterator.next().get(); + if (view != null) { + view.setBackgroundColor(color); + } else { + iterator.remove(); + } + } + } + } + + private static class StatusBarManager { + private static Vector> activities = new Vector<>(); + + @TargetApi(21) + public static void add(Activity activity) { + if (Build.VERSION.SDK_INT >= 21) { + activities.add(new WeakReference<>(activity)); + if (shouldApplyThemeColor()) + activity.getWindow().setStatusBarColor(themeColor.colorPrimary); + } + } + + @TargetApi(21) + public static void setColor(int color) { + Iterator> iterator = activities.iterator(); + while (iterator.hasNext()) { + Activity activity = iterator.next().get(); + if (activity != null) { + activity.getWindow().setStatusBarColor(color); + } else { + iterator.remove(); + } + } + } + } + + private static class PaintManager { + private static List> paints = new LinkedList<>(); + + public static void add(Paint paint) { + if (shouldApplyThemeColor()) + paint.setColor(themeColor.colorPrimary); + paints.add(new WeakReference<>(paint)); + } + + public static void setColor(int color) { + Iterator> iterator = paints.iterator(); + while (iterator.hasNext()) { + Paint paint = iterator.next().get(); + if (paint != null) { + paint.setColor(color); + } else { + iterator.remove(); + } + } + } + } + + private static class ThemeColorWidgetReferenceManager { + + private static List widgets = new LinkedList<>(); + + public static void add(ThemeColorMutableReference widget) { + if (shouldApplyThemeColor()) + widget.setThemeColor(themeColor); + widgets.add(widget); + } + + public static void setColor(ThemeColor color) { + Iterator iterator = widgets.iterator(); + while (iterator.hasNext()) { + ThemeColorMutableReference widget = iterator.next(); + if (!widget.isNull()) { + widget.setThemeColor(color); + } else { + iterator.remove(); + } + } + } + + } + + private static class ThemeColorMutableManager { + + private static List> widgets = new LinkedList<>(); + + public static void add(ThemeColorMutable widget) { + if (shouldApplyThemeColor()) + widget.setThemeColor(themeColor); + widgets.add(new WeakReference<>(widget)); + } + + public static void setColor(ThemeColor color) { + Iterator> iterator = widgets.iterator(); + while (iterator.hasNext()) { + ThemeColorMutable widget = iterator.next().get(); + if (widget != null) { + widget.setThemeColor(color); + } else { + iterator.remove(); + } + } + } + + } + + +} diff --git a/app/src/main/java/com/stardust/theme/ThemeColorMutable.java b/app/src/main/java/com/stardust/theme/ThemeColorMutable.java new file mode 100644 index 000000000..8d10ba396 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/ThemeColorMutable.java @@ -0,0 +1,11 @@ +package com.stardust.theme; + +/** + * Created by Stardust on 2016/10/24. + */ + +public interface ThemeColorMutable { + + void setThemeColor(ThemeColor color); + +} diff --git a/app/src/main/java/com/stardust/theme/ThemeColorMutableReference.java b/app/src/main/java/com/stardust/theme/ThemeColorMutableReference.java new file mode 100644 index 000000000..c7016da35 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/ThemeColorMutableReference.java @@ -0,0 +1,13 @@ +package com.stardust.theme; + +/** + * Created by Stardust on 2016/10/24. + */ + +public interface ThemeColorMutableReference { + + void setThemeColor(ThemeColor color); + + boolean isNull(); + +} diff --git a/app/src/main/java/com/stardust/theme/app/ColorSelectActivity.java b/app/src/main/java/com/stardust/theme/app/ColorSelectActivity.java new file mode 100644 index 000000000..8a5aab54a --- /dev/null +++ b/app/src/main/java/com/stardust/theme/app/ColorSelectActivity.java @@ -0,0 +1,330 @@ +package com.stardust.theme.app; + +import android.animation.Animator; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewAnimationUtils; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.ThemeColorRecyclerView; + +import com.google.android.material.appbar.AppBarLayout; +import com.jrummyapps.android.colorpicker.ColorPickerDialog; +import com.jrummyapps.android.colorpicker.ColorPickerDialogListener; +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorHelper; +import com.stardust.theme.ThemeColorManager; + +import org.autojs.autojs.R; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ColorSelectActivity extends AppCompatActivity { + + public static class ColorItem { + String name; + + ThemeColor themeColor; + + public ColorItem(String name, ThemeColor themeColor) { + this.name = name; + this.themeColor = themeColor; + } + + public ColorItem(String name, int color) { + this(name, new ThemeColor(color)); + } + } + + public static void startColorSelect(Context context, String title, List items) { + colorItems = items; + context.startActivity(new Intent(context, ColorSelectActivity.class) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .putExtra("title", title)); + } + + private static List colorItems = new ArrayList<>(); + private String mTitle; + + private AppBarLayout mAppBarLayout; + private int mCurrentColor; + private ColorSettingRecyclerView mColorSettingRecyclerView; + private final ColorSettingRecyclerView.OnItemClickListener mOnItemClickListener = new ColorSettingRecyclerView.OnItemClickListener() { + @Override + public void onItemClick(View v, int position) { + ThemeColor color = mColorSettingRecyclerView.getSelectedThemeColor(); + if (color != null) { + int colorPrimary = color.colorPrimary; + setColorWithAnimation(mAppBarLayout, colorPrimary); + } + + } + }; + + private void setColorWithAnimation(final View view, final int colorTo) { + int x = view.getLeft(); + int y = view.getBottom(); + + findViewById(R.id.appBarContainer).setBackgroundColor(mCurrentColor); + view.setBackgroundColor(colorTo); + + int startRadius = 0; + int endRadius = (int) Math.hypot(view.getWidth(), view.getHeight()); + + Animator anim = ViewAnimationUtils.createCircularReveal(view, x, y, startRadius, endRadius); + anim.setDuration(500); + anim.start(); + mCurrentColor = colorTo; + } + + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + handleIntent(); + setUpUI(); + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + } + + private void handleIntent() { + mTitle = getIntent().getStringExtra("title"); + if (mTitle == null) { + mTitle = getString(R.string.mt_color_picker_title); + } + } + + private void setUpUI() { + setContentView(R.layout.mt_activity_color_select); + mAppBarLayout = findViewById(R.id.appBar); + mCurrentColor = ThemeColorManager.getColorPrimary(); + mAppBarLayout.setBackgroundColor(mCurrentColor); + setUpToolbar(); + setUpColorSettingRecyclerView(); + } + + private void setUpColorSettingRecyclerView() { + mColorSettingRecyclerView = findViewById(R.id.color_setting_recycler_view); + mColorSettingRecyclerView.setColors(colorItems); + mColorSettingRecyclerView.setSelectedColor(mCurrentColor); + mColorSettingRecyclerView.setOnItemClickListener(mOnItemClickListener); + } + + private void setUpToolbar() { + Toolbar mToolbar = findViewById(R.id.toolbar); + mToolbar.setTitle(mTitle); + setSupportActionBar(mToolbar); + Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); + mToolbar.setNavigationOnClickListener(v -> finish()); + } + + @Override + public void finish() { + ThemeColor color = mColorSettingRecyclerView.getSelectedThemeColor(); + if (color != null) + ThemeColorManager.setThemeColor(color.colorPrimary); + super.finish(); + } + + public static class ColorSettingRecyclerView extends ThemeColorRecyclerView { + + private static final String COLOR_SETTING_CUSTOM_COLOR = ColorSettingRecyclerView.class.getName() + ".COLOR_SETTING_CUSTOM_COLOR"; + + interface OnItemClickListener { + void onItemClick(View v, int position); + } + + private static final int SELECT_NONE = -1; + + private final List mColors = new ArrayList<>(); + private OnItemClickListener mOnItemClickListener; + private final View.OnClickListener mActualOnItemClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + RecyclerView.ViewHolder holder = getChildViewHolder(v); + if (holder != null) { + int position = holder.getBindingAdapterPosition(); + if (position == mColors.size() - 1) { + showColorPicker(v); + } else { + setSelectedPosition(position); + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(v, position); + } + } + } + + } + }; + + + private int mSelectedPosition = SELECT_NONE; + + public ColorSettingRecyclerView(Context context) { + super(context); + init(); + } + + public ColorSettingRecyclerView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ColorSettingRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + + @Nullable + public ThemeColor getSelectedThemeColor() { + if (mSelectedPosition < 0) + return null; + return mColors.get(mSelectedPosition).themeColor; + } + + public void setSelectedPosition(int selectedPosition) { + if (mSelectedPosition != SELECT_NONE) { + int oldSelectedPosition = mSelectedPosition; + this.mSelectedPosition = selectedPosition; + Objects.requireNonNull(getAdapter()).notifyItemChanged(oldSelectedPosition); + getAdapter().notifyItemChanged(mSelectedPosition); + } else { + this.mSelectedPosition = selectedPosition; + getAdapter().notifyDataSetChanged(); + } + } + + public void setSelectedColor(int colorPrimary) { + int i = 0; + for (ColorItem colorItem : mColors) { + if (colorItem.themeColor.colorPrimary == colorPrimary) { + setSelectedPosition(i); + return; + } + i++; + } + mSelectedPosition = SELECT_NONE; + } + + + public void setColors(List colors) { + mColors.clear(); + mColors.addAll(colors); + mColors.add(new ColorItem(getContext().getString(R.string.mt_custom), getCustomColor())); + } + + private int getCustomColor() { + return PreferenceManager.getDefaultSharedPreferences(getContext()).getInt(COLOR_SETTING_CUSTOM_COLOR, 0xffffffff); + } + + private void showColorPicker(final View v) { + ColorPickerDialog dialog = ColorPickerDialog.newBuilder() + .setAllowCustom(true) + .setAllowPresets(false) + .setDialogType(ColorPickerDialog.TYPE_CUSTOM) + .setShowAlphaSlider(false) + .setDialogTitle(R.string.mt_color_picker_title) + .setColor(getCustomColor()) + .create(); + dialog.setColorPickerDialogListener(new ColorPickerDialogListener() { + @Override + public void onColorSelected(int dialogId, @ColorInt int color) { + color = 0xff000000 | color; + PreferenceManager.getDefaultSharedPreferences(getContext()).edit().putInt(COLOR_SETTING_CUSTOM_COLOR, color).apply(); + mColors.get(mColors.size() - 1).themeColor.colorPrimary = color; + setSelectedPosition(mColors.size() - 1); + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(v, mColors.size() - 1); + } + } + + @Override + public void onDialogDismissed(int dialogId) { + + } + }); + Activity activity = (Activity) getContext(); + dialog.show(activity.getFragmentManager(), "Tag"); + } + + + private void init() { + setAdapter(new Adapter()); + setLayoutManager(new LinearLayoutManager(getContext())); + addItemDecoration(new DividerItemDecoration(getContext(), VERTICAL)); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + mOnItemClickListener = onItemClickListener; + } + + private class Adapter extends RecyclerView.Adapter { + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.mt_color_setting_recycler_view_item, parent, false)); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + ColorItem item = mColors.get(position); + holder.setColor(item.themeColor.colorPrimary); + holder.name.setText(item.name); + holder.setChecked(mSelectedPosition == position); + } + + @Override + public int getItemCount() { + return mColors.size(); + } + } + + private class ViewHolder extends RecyclerView.ViewHolder { + + ImageView color; + TextView name; + + ViewHolder(View itemView) { + super(itemView); + itemView.setOnClickListener(mActualOnItemClickListener); + color = itemView.findViewById(R.id.color); + name = itemView.findViewById(R.id.name); + } + + void setChecked(boolean checked) { + if (checked) { + color.setImageResource(R.drawable.mt_ic_check_white_36dp); + } else { + color.setImageDrawable(null); + } + } + + void setColor(int c) { + ThemeColorHelper.setBackgroundColor(color, c); + } + + } + } +} diff --git a/app/src/main/java/com/stardust/theme/app/ThemeColorAppCompatActivity.java b/app/src/main/java/com/stardust/theme/app/ThemeColorAppCompatActivity.java new file mode 100644 index 000000000..0b95a8b9c --- /dev/null +++ b/app/src/main/java/com/stardust/theme/app/ThemeColorAppCompatActivity.java @@ -0,0 +1,20 @@ +package com.stardust.theme.app; + +import android.os.Bundle; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.stardust.theme.ThemeColorManager; + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ThemeColorAppCompatActivity extends AppCompatActivity { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ThemeColorManager.addActivityStatusBar(this); + } +} diff --git a/app/src/main/java/com/stardust/theme/app/ThemeColorMaterialDialog.java b/app/src/main/java/com/stardust/theme/app/ThemeColorMaterialDialog.java new file mode 100644 index 000000000..604969550 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/app/ThemeColorMaterialDialog.java @@ -0,0 +1,30 @@ +package com.stardust.theme.app; + +/** + * Created by Stardust on 2016/8/15. + */ +public class ThemeColorMaterialDialog { + + /* + + public static final int DEFAULT_NEGATIVE_COLOR = 0xff7a7a7a; + public static final int DEFAULT_NEUTRAL_COLOR = 0xff616161; + + protected ThemeColorMaterialDialog(Builder builder) { + super(builder); + } + + public static class Builder extends MaterialDialog.Builder { + + public Builder(@NonNull Context context) { + super(context); + positiveColor(ThemeColorManager.getColorPrimary()); + negativeColor(DEFAULT_NEGATIVE_COLOR); + neutralColor(DEFAULT_NEUTRAL_COLOR); + itemsColor(ThemeColorManager.getColorPrimary()); + linkColor(ThemeColorManager.getColorPrimary()); + widgetColor(ThemeColorManager.getColorPrimary()); + } + } + */ +} diff --git a/app/src/main/java/com/stardust/theme/internal/DrawableTool.java b/app/src/main/java/com/stardust/theme/internal/DrawableTool.java new file mode 100644 index 000000000..d01ea2149 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/internal/DrawableTool.java @@ -0,0 +1,19 @@ +package com.stardust.theme.internal; + +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; + +/** + * Created by Stardust on 2017/2/12. + */ + +public class DrawableTool { + + public static Drawable filterDrawableColor(Drawable drawable, int color) { + if (drawable == null || drawable.getConstantState() == null) + return null; + Drawable res = drawable.getConstantState().newDrawable().mutate(); + res.setColorFilter(color, PorterDuff.Mode.SRC_IN); + return res; + } +} diff --git a/app/src/main/java/com/stardust/theme/internal/ScrollingViewEdgeGlowColorHelper.java b/app/src/main/java/com/stardust/theme/internal/ScrollingViewEdgeGlowColorHelper.java new file mode 100644 index 000000000..c474cc1e7 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/internal/ScrollingViewEdgeGlowColorHelper.java @@ -0,0 +1,90 @@ +package com.stardust.theme.internal; + +import android.annotation.TargetApi; +import android.os.Build; +import android.widget.AbsListView; +import android.widget.EdgeEffect; +import android.widget.ScrollView; + +import androidx.recyclerview.widget.RecyclerView; + +import java.lang.reflect.Field; +import java.util.Objects; + +/** + * Created by Stardust on 2016/8/14. + */ +public class ScrollingViewEdgeGlowColorHelper { + + private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_TOP; + private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM; + + private static final Field ABS_LIST_VIEW_FIELD_EDGE_GLOW_TOP; + private static final Field ABS_LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM; + + private static final Field RECYCLER_VIEW_FIELD_EDGE_GLOW_TOP; + private static final Field RECYCLER_VIEW_FIELD_EDGE_GLOW_BOTTOM; + + static { + Field[] fields = getEdgeGlowField(ScrollView.class); + SCROLL_VIEW_FIELD_EDGE_GLOW_TOP = fields[0]; + SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM = fields[1]; + + fields = getEdgeGlowField(AbsListView.class); + ABS_LIST_VIEW_FIELD_EDGE_GLOW_TOP = fields[0]; + ABS_LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM = fields[1]; + + fields = getEdgeGlowField(RecyclerView.class); + RECYCLER_VIEW_FIELD_EDGE_GLOW_TOP = fields[0]; + RECYCLER_VIEW_FIELD_EDGE_GLOW_BOTTOM = fields[1]; + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public static void setEdgeGlowColor(AbsListView listView, int color) { + try { + Objects.requireNonNull((EdgeEffect) ABS_LIST_VIEW_FIELD_EDGE_GLOW_TOP.get(listView)).setColor(color); + Objects.requireNonNull((EdgeEffect) ABS_LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(listView)).setColor(color); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public static void setEdgeGlowColor(ScrollView scrollView, int color) { + try { + Objects.requireNonNull((EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_TOP.get(scrollView)).setColor(color); + Objects.requireNonNull((EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(scrollView)).setColor(color); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public static void setEdgeGlowColor(RecyclerView recyclerView, int color) { + try { + Objects.requireNonNull((EdgeEffect) RECYCLER_VIEW_FIELD_EDGE_GLOW_TOP.get(recyclerView)).setColor(color); + Objects.requireNonNull((EdgeEffect) RECYCLER_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(recyclerView)).setColor(color); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + private static Field[] getEdgeGlowField(Class viewClass) { + Field edgeGlowTop = null, edgeGlowBottom = null; + for (Field f : viewClass.getDeclaredFields()) { + switch (f.getName()) { + case "mEdgeGlowTop": + f.setAccessible(true); + edgeGlowTop = f; + break; + case "mEdgeGlowBottom": + f.setAccessible(true); + edgeGlowBottom = f; + break; + } + if (edgeGlowBottom != null && edgeGlowTop != null) + break; + } + return new Field[]{edgeGlowTop, edgeGlowBottom}; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/stardust/theme/preference/Test.java b/app/src/main/java/com/stardust/theme/preference/Test.java new file mode 100644 index 000000000..1e3f4318b --- /dev/null +++ b/app/src/main/java/com/stardust/theme/preference/Test.java @@ -0,0 +1,30 @@ +package com.stardust.theme.preference; + +import android.content.Context; +import android.os.Build; +import android.preference.SwitchPreference; +import androidx.annotation.RequiresApi; +import android.util.AttributeSet; + +/** + * Created by Stardust on 2017/8/25. + */ + +public class Test extends SwitchPreference { + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public Test(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public Test(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public Test(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public Test(Context context) { + super(context); + } +} diff --git a/app/src/main/java/com/stardust/theme/preference/ThemeColorCheckBoxPreference.java b/app/src/main/java/com/stardust/theme/preference/ThemeColorCheckBoxPreference.java new file mode 100644 index 000000000..ac5e2652c --- /dev/null +++ b/app/src/main/java/com/stardust/theme/preference/ThemeColorCheckBoxPreference.java @@ -0,0 +1,43 @@ +package com.stardust.theme.preference; + +import android.content.Context; +import android.os.Build; +import android.preference.CheckBoxPreference; + +import androidx.annotation.RequiresApi; +import android.util.AttributeSet; + +import org.autojs.autojs.R; + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ThemeColorCheckBoxPreference extends CheckBoxPreference { + + public ThemeColorCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public ThemeColorCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + public ThemeColorCheckBoxPreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorCheckBoxPreference(Context context) { + super(context); + init(); + } + + private void init() { + setWidgetLayoutResource(R.layout.mt_theme_color_check_box_preference); + } + +} diff --git a/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceCategory.java b/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceCategory.java new file mode 100644 index 000000000..f96dc4d5e --- /dev/null +++ b/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceCategory.java @@ -0,0 +1,71 @@ +package com.stardust.theme.preference; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Color; +import android.os.Build; +import android.preference.PreferenceCategory; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + + +/** + * Created by Stardust on 2016/8/8. + */ +public class ThemeColorPreferenceCategory extends PreferenceCategory implements ThemeColorMutable { + + private TextView mTitleTextView; + private int mColor = Color.TRANSPARENT; + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public ThemeColorPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + public ThemeColorPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + public ThemeColorPreferenceCategory(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorPreferenceCategory(Context context) { + super(context); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + public void setTitleTextColor(int titleTextColor) { + mColor = titleTextColor; + if (mTitleTextView != null) + mTitleTextView.setTextColor(titleTextColor); + } + + public View onCreateView(ViewGroup parent) { + View view = super.onCreateView(parent); + mTitleTextView = (TextView) view.findViewById(android.R.id.title); + if (mColor != Color.TRANSPARENT) + mTitleTextView.setTextColor(mColor); + return view; + } + + @Override + public void setThemeColor(ThemeColor color) { + mColor = color.colorPrimary; + if (mTitleTextView != null) + mTitleTextView.setTextColor(mColor); + } +} diff --git a/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceFragment.java b/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceFragment.java new file mode 100644 index 000000000..d7488a8c5 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceFragment.java @@ -0,0 +1,73 @@ +package com.stardust.theme.preference; + +import android.annotation.TargetApi; +import android.os.Build; +import android.preference.PreferenceFragment; +import android.widget.ListView; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.internal.ScrollingViewEdgeGlowColorHelper; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +import java.lang.reflect.Field; + +/** + * Created by Stardust on 2016/8/14. + */ +@TargetApi(Build.VERSION_CODES.HONEYCOMB) +public class ThemeColorPreferenceFragment extends PreferenceFragment implements ThemeColorMutable { + + private static Field LIST_VIEW; + private int mThemeColor; + private boolean hasAppliedThemeColor = false; + + static { + try { + LIST_VIEW = PreferenceFragment.class.getDeclaredField("mList"); + LIST_VIEW.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + private ListView getListView() { + try { + return (ListView) LIST_VIEW.get(this); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public void addPreferencesFromResource(int resId) { + super.addPreferencesFromResource(resId); + ThemeColorManager.add(this); + } + + @Override + public void setThemeColor(ThemeColor color) { + if (mThemeColor == color.colorPrimary) + return; + mThemeColor = color.colorPrimary; + hasAppliedThemeColor = false; + } + + private void applyThemeColor() { + ListView listView = getListView(); + if (listView != null) { + ScrollingViewEdgeGlowColorHelper.setEdgeGlowColor(listView, mThemeColor); + hasAppliedThemeColor = true; + } + } + + + public void onResume() { + super.onResume(); + if (!hasAppliedThemeColor) { + applyThemeColor(); + } + } + +} diff --git a/app/src/main/java/com/stardust/theme/preference/ThemeColorSwitchPreference.java b/app/src/main/java/com/stardust/theme/preference/ThemeColorSwitchPreference.java new file mode 100644 index 000000000..7a7218aa4 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/preference/ThemeColorSwitchPreference.java @@ -0,0 +1,88 @@ +package com.stardust.theme.preference; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Color; +import android.os.Build; +import android.preference.SwitchPreference; +import androidx.annotation.RequiresApi; +import androidx.appcompat.widget.SwitchCompat; +import android.util.AttributeSet; +import android.view.View; +import android.widget.Checkable; +import android.widget.Switch; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorHelper; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +import java.lang.reflect.Field; + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ThemeColorSwitchPreference extends SwitchPreference implements ThemeColorMutable { + + private View mCheckableView; + private int mColor = Color.TRANSPARENT; + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public ThemeColorSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + public ThemeColorSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + public ThemeColorSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorSwitchPreference(Context context) { + super(context); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + mCheckableView = view.findViewById(Resources.getSystem().getIdentifier("switch_widget", "id", "android")); + + if (mColor != Color.TRANSPARENT) { + applyColor(); + } + } + + @Override + public void setThemeColor(ThemeColor color) { + mColor = color.colorPrimary; + if (mCheckableView != null) { + applyColor(); + } + } + + public void applyColor() { + if (mCheckableView != null && mCheckableView instanceof Checkable) { + if (mCheckableView instanceof Switch) { + final Switch switchView = (Switch) mCheckableView; + ThemeColorHelper.setColorPrimary(switchView, mColor); + } + + if (mCheckableView instanceof SwitchCompat) { + final SwitchCompat switchView = (SwitchCompat) mCheckableView; + ThemeColorHelper.setColorPrimary(switchView, mColor); + + } + } + } +} diff --git a/app/src/main/java/com/stardust/theme/util/ListBuilder.java b/app/src/main/java/com/stardust/theme/util/ListBuilder.java new file mode 100644 index 000000000..8cf889793 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/util/ListBuilder.java @@ -0,0 +1,30 @@ +package com.stardust.theme.util; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ListBuilder { + + private List mList; + + public ListBuilder() { + this(new ArrayList()); + } + + public ListBuilder(List list) { + mList = list; + } + + public ListBuilder add(T entry) { + mList.add(entry); + return this; + } + + public List list() { + return mList; + } +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorFloatingActionButton.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorFloatingActionButton.java new file mode 100644 index 000000000..c71938aef --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorFloatingActionButton.java @@ -0,0 +1,41 @@ +package com.stardust.theme.widget; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.util.AttributeSet; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +/** + * Created by Stardust on 2016/8/16. + */ +public class ThemeColorFloatingActionButton extends FloatingActionButton implements ThemeColorMutable { + public ThemeColorFloatingActionButton(Context context) { + super(context); + init(); + } + + public ThemeColorFloatingActionButton(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorFloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + @Override + public void setThemeColor(ThemeColor color) { + setBackgroundTintList(ColorStateList.valueOf(color.colorAccent)); + } + + +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorHorizontalScrollView.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorHorizontalScrollView.java new file mode 100644 index 000000000..fc49e2289 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorHorizontalScrollView.java @@ -0,0 +1,83 @@ +package com.stardust.theme.widget; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.widget.EdgeEffect; +import android.widget.HorizontalScrollView; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +import java.lang.reflect.Field; + +/** + * Created by Stardust on 2016/8/14. + */ +public class ThemeColorHorizontalScrollView extends HorizontalScrollView implements ThemeColorMutable { + private int mFadingEdgeColor; + private EdgeEffect mEdgeGlowLeft; + private EdgeEffect mEdgeGlowRight; + + public ThemeColorHorizontalScrollView(Context context) { + super(context); + init(); + } + + public ThemeColorHorizontalScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public ThemeColorHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + private void init() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + mEdgeGlowLeft = new EdgeEffect(getContext()); + mEdgeGlowRight = new EdgeEffect(getContext()); + } + ThemeColorManager.add(this); + } + + public int getSolidColor() { + return mFadingEdgeColor; + } + + @Override + public void setThemeColor(ThemeColor color) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mFadingEdgeColor = color.colorPrimary; + if (mEdgeGlowLeft != null && mEdgeGlowRight != null) { + mEdgeGlowLeft.setColor(color.colorPrimary); + mEdgeGlowRight.setColor(color.colorPrimary); + syncEdgeEffect(); + } + invalidate(); + } + } + + private void syncEdgeEffect() { + try { + Field f1 = HorizontalScrollView.class.getDeclaredField("mEdgeGlowLeft"); + f1.setAccessible(true); + f1.set(this, mEdgeGlowLeft); + + Field f2 = HorizontalScrollView.class.getDeclaredField("mEdgeGlowRight"); + f2.setAccessible(true); + f2.set(this, mEdgeGlowRight); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorImageView.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorImageView.java new file mode 100644 index 000000000..ff1e7053f --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorImageView.java @@ -0,0 +1,62 @@ +package com.stardust.theme.widget; + +import android.content.Context; +import android.graphics.Color; + +import androidx.annotation.RequiresApi; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatTextView; +import android.util.AttributeSet; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; +import com.stardust.theme.internal.DrawableTool; + +/** + * Created by Stardust on 2017/2/12. + */ + +public class ThemeColorImageView extends AppCompatImageView implements ThemeColorMutable { + + private int mColor = Color.TRANSPARENT; + + public ThemeColorImageView(Context context) { + super(context); + init(); + } + + public ThemeColorImageView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorImageView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + @Override + public void setThemeColor(ThemeColor color) { + if (mColor == color.colorPrimary) + return; + mColor = color.colorPrimary; + setColor(color.colorPrimary); + } + + @Override + public void setImageResource(int resId) { + super.setImageResource(resId); + if (mColor != Color.TRANSPARENT) + setColor(mColor); + } + + private void setColor(int color) { + + setImageDrawable(DrawableTool.filterDrawableColor(getDrawable(), color)); + } +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorNavigationView.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorNavigationView.java new file mode 100644 index 000000000..3836f6798 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorNavigationView.java @@ -0,0 +1,59 @@ +package com.stardust.theme.widget; + +import android.content.Context; +import android.content.res.ColorStateList; + +import android.util.AttributeSet; + +import com.google.android.material.navigation.NavigationView; +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +import java.lang.reflect.Field; + +/** + * Created by Stardust on 2016/8/15. + */ + +public class ThemeColorNavigationView extends NavigationView implements ThemeColorMutable { + + private static final int COLOR_GRAY = 0xff7a7a7a; + private static Field PRESENTER_FIELD; + + static { + try { + PRESENTER_FIELD = NavigationView.class.getDeclaredField("presenter"); + PRESENTER_FIELD.setAccessible(true); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + } + + public ThemeColorNavigationView(Context context) { + super(context); + init(); + } + + public ThemeColorNavigationView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorNavigationView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + @Override + public void setThemeColor(ThemeColor color) { + ColorStateList list = new ColorStateList(new int[][]{{android.R.attr.state_checked}, {-android.R.attr.state_checked}}, new int[]{color.colorPrimary, COLOR_GRAY}); + setItemIconTintList(list); + setItemTextColor(list); + } + +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorScrollView.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorScrollView.java new file mode 100644 index 000000000..a83e033a8 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorScrollView.java @@ -0,0 +1,57 @@ +package com.stardust.theme.widget; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.widget.ScrollView; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorMutable; +import com.stardust.theme.internal.ScrollingViewEdgeGlowColorHelper; +import com.stardust.theme.ThemeColorManager; + +/** + * Created by Stardust on 2016/8/14. + */ +public class ThemeColorScrollView extends ScrollView implements ThemeColorMutable { + + private int mFadingEdgeColor; + + public ThemeColorScrollView(Context context) { + super(context); + init(); + } + + public ThemeColorScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public ThemeColorScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + private void init() { + mFadingEdgeColor = super.getSolidColor(); + ThemeColorManager.add(this); + } + + public int getSolidColor() { + return mFadingEdgeColor; + } + + @Override + public void setThemeColor(ThemeColor color) { + mFadingEdgeColor = color.colorPrimary; + ScrollingViewEdgeGlowColorHelper.setEdgeGlowColor(this, mFadingEdgeColor); + invalidate(); + } +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorSwitch.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorSwitch.java new file mode 100644 index 000000000..758e37702 --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorSwitch.java @@ -0,0 +1,40 @@ +package com.stardust.theme.widget; + +import android.content.Context; +import androidx.appcompat.widget.SwitchCompat; +import android.util.AttributeSet; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorHelper; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + + +/** + * Created by Stardust on 2016/8/7. + */ +public class ThemeColorSwitch extends SwitchCompat implements ThemeColorMutable { + public ThemeColorSwitch(Context context) { + super(context); + init(); + } + + public ThemeColorSwitch(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorSwitch(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + @Override + public void setThemeColor(ThemeColor color) { + ThemeColorHelper.setColorPrimary(this, color.colorPrimary); + } +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorTextView.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorTextView.java new file mode 100644 index 000000000..06b49689f --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorTextView.java @@ -0,0 +1,43 @@ +package com.stardust.theme.widget; + +import android.content.Context; + +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.appcompat.widget.AppCompatTextView; +import android.util.AttributeSet; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ThemeColorTextView extends AppCompatTextView implements ThemeColorMutable { + + public ThemeColorTextView(Context context) { + super(context); + init(); + } + + public ThemeColorTextView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorTextView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + @Override + public void setThemeColor(ThemeColor color) { + setTextColor(color.colorPrimary); + } +} diff --git a/app/src/main/java/com/stardust/theme/widget/ThemeColorToolbar.java b/app/src/main/java/com/stardust/theme/widget/ThemeColorToolbar.java new file mode 100644 index 000000000..09b43dabe --- /dev/null +++ b/app/src/main/java/com/stardust/theme/widget/ThemeColorToolbar.java @@ -0,0 +1,43 @@ +package com.stardust.theme.widget; + +import android.content.Context; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; +import android.util.AttributeSet; + +import com.stardust.theme.ThemeColor; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorMutable; + +/** + * Created by Stardust on 2017/3/5. + */ + +public class ThemeColorToolbar extends Toolbar implements ThemeColorMutable { + + public ThemeColorToolbar(Context context) { + super(context); + init(); + } + + + public ThemeColorToolbar(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ThemeColorToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + ThemeColorManager.add(this); + } + + + @Override + public void setThemeColor(ThemeColor color) { + setBackgroundColor(color.colorPrimary); + } +} diff --git a/app/src/main/java/org/autojs/autojs/App.kt b/app/src/main/java/org/autojs/autojs/App.kt index 2dde69f34..c9132dc78 100644 --- a/app/src/main/java/org/autojs/autojs/App.kt +++ b/app/src/main/java/org/autojs/autojs/App.kt @@ -1,21 +1,19 @@ 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.core.content.ContextCompat import androidx.localbroadcastmanager.content.LocalBroadcastManager +import androidx.multidex.MultiDexApplication 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 @@ -54,8 +52,8 @@ class App : MultiDexApplication() { if (BuildConfig.DEBUG) return FlurryAgent.Builder() - .withLogEnabled(BuildConfig.DEBUG) - .build(this, "D42MH48ZN4PJC5TKNYZD") + .withLogEnabled(BuildConfig.DEBUG) + .build(this, "D42MH48ZN4PJC5TKNYZD") } private fun setUpDebugEnvironment() { @@ -69,17 +67,14 @@ class App : MultiDexApplication() { 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))) + ThemeColorManagerCompat.init(ThemeColor( + ContextCompat.getColor(this, R.color.colorPrimary), + ContextCompat.getColor(this, R.color.colorPrimaryDark), + ContextCompat.getColor(this, R.color.colorAccent) + )) AutoJs.initInstance(this) if (Pref.isRunningVolumeControlEnabled()) { GlobalKeyObserver.init() @@ -95,25 +90,27 @@ class App : MultiDexApplication() { 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 - )) + .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) } - .subscribe({ - if (it.isLocal) { - localActions.add(it.action) - } else { - actions.add(it.action) - } - }, { it.printStackTrace() }) + }, { it.printStackTrace() }) } @@ -122,18 +119,18 @@ class App : MultiDexApplication() { Drawables.setDefaultImageLoader(object : ImageLoader { override fun loadInto(imageView: ImageView, uri: Uri) { Glide.with(imageView) - .load(uri) - .into(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 - } - }) + .load(uri) + .into(object : SimpleTarget() { + override fun onResourceReady(resource: Drawable, transition: Transition?) { + view.background = resource + } + }) } override fun load(view: View, uri: Uri): Drawable { @@ -142,31 +139,30 @@ class App : MultiDexApplication() { 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) - } - }) + .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) - } - }) + .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 const val BUGLY_APP_ID = "19b3607b53" private lateinit var instance: WeakReference diff --git a/app/src/main/java/org/autojs/autojs/Pref.java b/app/src/main/java/org/autojs/autojs/Pref.java index 776db6783..8b68d34a9 100644 --- a/app/src/main/java/org/autojs/autojs/Pref.java +++ b/app/src/main/java/org/autojs/autojs/Pref.java @@ -3,17 +3,15 @@ import android.content.Context; import android.content.SharedPreferences; import android.os.Environment; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import com.stardust.app.GlobalAppContext; import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; -import com.stardust.theme.ThemeColorManager; import org.autojs.autojs.autojs.key.GlobalKeyObserver; -import org.autojs.autojs.theme.ThemeColorManagerCompat; import java.io.File; -import java.util.concurrent.TimeUnit; +import java.util.Objects; /** * Created by Stardust on 2017/1/31. @@ -22,20 +20,16 @@ public class Pref { private static final SharedPreferences DISPOSABLE_BOOLEAN = GlobalAppContext.get().getSharedPreferences("DISPOSABLE_BOOLEAN", Context.MODE_PRIVATE); private static final String KEY_SERVER_ADDRESS = "KEY_SERVER_ADDRESS"; - private static final String KEY_SHOULD_SHOW_ANNUNCIATION = "KEY_SHOULD_SHOW_ANNUNCIATION"; private static final String KEY_FLOATING_MENU_SHOWN = "KEY_FLOATING_MENU_SHOWN"; private static final String KEY_EDITOR_THEME = "editor.theme"; private static final String KEY_EDITOR_TEXT_SIZE = "editor.textSize"; - private static SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged(SharedPreferences p, String key) { - if (key.equals(getString(R.string.key_guard_mode))) { - AccessibilityConfig.setIsUnintendedGuardEnabled(p.getBoolean(getString(R.string.key_guard_mode), false)); - } else if ((key.equals(getString(R.string.key_use_volume_control_record)) || key.equals(getString(R.string.key_use_volume_control_running))) - && p.getBoolean(key, false)) { - GlobalKeyObserver.init(); - } + private static final SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = (p, key) -> { + if (key.equals(getString(R.string.key_guard_mode))) { + AccessibilityConfig.setIsUnintendedGuardEnabled(p.getBoolean(getString(R.string.key_guard_mode), false)); + } else if ((key.equals(getString(R.string.key_use_volume_control_record)) || key.equals(getString(R.string.key_use_volume_control_running))) + && p.getBoolean(key, false)) { + GlobalKeyObserver.init(); } }; @@ -60,19 +54,15 @@ public static boolean isNightModeEnabled() { } public static boolean isFirstGoToAccessibilitySetting() { - return getDisposableBoolean("isFirstGoToAccessibilitySetting", true); - } - - public static int oldVersion() { - return 0; + return getDisposableBoolean("isFirstGoToAccessibilitySetting", false); } public static boolean isRunningVolumeControlEnabled() { - return def().getBoolean(getString(R.string.key_use_volume_control_running), false); + return def().getBoolean(getString(R.string.key_use_volume_control_running), true); } public static boolean shouldEnableAccessibilityServiceByRoot() { - return def().getBoolean(getString(R.string.key_enable_accessibility_service_by_root), false); + return def().getBoolean(getString(R.string.key_enable_accessibility_service_by_root), true); } private static String getString(int id) { @@ -87,10 +77,6 @@ public static boolean isFirstUsing() { def().registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener); } - public static boolean isEditActivityFirstUsing() { - return getDisposableBoolean("Love Honmua 18.7.9", true); - } - public static String getServerAddressOrDefault(String defaultAddress) { return def().getString(KEY_SERVER_ADDRESS, defaultAddress); } @@ -99,30 +85,12 @@ public static void saveServerAddress(String address) { def().edit().putString(KEY_SERVER_ADDRESS, address).apply(); } - public static boolean shouldShowAnnunciation() { - return getDisposableBoolean(KEY_SHOULD_SHOW_ANNUNCIATION, true); - } - - private static boolean isFirstDay() { - long firstUsingMillis = def().getLong("firstUsingMillis", -1); - if (firstUsingMillis == -1) { - def().edit().putLong("firstUsingMillis", System.currentTimeMillis()).apply(); - return true; - } - return System.currentTimeMillis() - firstUsingMillis <= TimeUnit.DAYS.toMillis(1); - } - public static boolean isRecordToastEnabled() { return def().getBoolean(getString(R.string.key_record_toast), true); } public static boolean rootRecordGeneratesBinary() { - return def().getString(getString(R.string.key_root_record_out_file_type), "binary") - .equals("binary"); - } - - public static boolean isObservingKeyEnabled() { - return def().getBoolean(getString(R.string.key_enable_observe_key), false); + return Objects.equals(def().getString(getString(R.string.key_root_record_out_file_type), "binary"), "binary"); } public static boolean isStableModeEnabled() { @@ -169,6 +137,6 @@ public static String getScriptDirPath() { } public static boolean isForegroundServiceEnabled() { - return def().getBoolean(getString(R.string.key_foreground_servie), false); + return def().getBoolean(getString(R.string.key_foreground_service), false); } } diff --git a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java index c85ed7a91..cb2160e00 100644 --- a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java +++ b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java @@ -170,11 +170,7 @@ public void waitForAccessibilityServiceEnabled() { @Override protected AccessibilityConfig createAccessibilityConfig() { - AccessibilityConfig config = super.createAccessibilityConfig(); - if (BuildConfig.CHANNEL.equals("coolapk")) { - config.addWhiteList("com.coolapk.market"); - } - return config; + return super.createAccessibilityConfig(); } @Override diff --git a/app/src/main/java/org/autojs/autojs/autojs/api/timing/TimedTasks.kt b/app/src/main/java/org/autojs/autojs/autojs/api/timing/TimedTasks.kt deleted file mode 100644 index 576714097..000000000 --- a/app/src/main/java/org/autojs/autojs/autojs/api/timing/TimedTasks.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.autojs.autojs.autojs.api.timing - -import com.stardust.autojs.execution.ExecutionConfig -import org.autojs.autojs.timing.TimedTask -import org.autojs.autojs.timing.TimedTaskManager -import org.joda.time.LocalDateTime -import org.joda.time.LocalTime - -object TimedTasks { - - fun daily(path: String, hour: Int, minute: Int) { - TimedTaskManager.getInstance().addTask(TimedTask.dailyTask(LocalTime(hour, minute), path, ExecutionConfig())) - } - - fun disposable(path: String, millis: Long) { - TimedTaskManager.getInstance().addTask(TimedTask.disposableTask(LocalDateTime(millis), path, ExecutionConfig())) - } - - fun weekly(path: String, millis: Long) { - //TimedTaskManager.getInstance().addTask(TimedTask.weeklyTask(LocalDateTime(millis), path, ExecutionConfig())) - } - -} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/autojs/record/GlobalActionRecorder.java b/app/src/main/java/org/autojs/autojs/autojs/record/GlobalActionRecorder.java index a0529cdff..c0bb00670 100644 --- a/app/src/main/java/org/autojs/autojs/autojs/record/GlobalActionRecorder.java +++ b/app/src/main/java/org/autojs/autojs/autojs/record/GlobalActionRecorder.java @@ -176,7 +176,7 @@ private void showRecordHandleDialog(final String script) { .newScriptFileForScript(script); } else { ClipboardUtil.setClip(mContext, script); - Toast.makeText(mContext, R.string.text_already_copy_to_clip, Toast.LENGTH_SHORT).show(); + Toast.makeText(mContext, R.string.text_already_copied_to_clip, Toast.LENGTH_SHORT).show(); } }) .negativeText(R.string.text_cancel) diff --git a/app/src/main/java/org/autojs/autojs/build/ApkBuilderPluginHelper.java b/app/src/main/java/org/autojs/autojs/build/ApkBuilderPluginHelper.java index dc302e5ce..070964f56 100644 --- a/app/src/main/java/org/autojs/autojs/build/ApkBuilderPluginHelper.java +++ b/app/src/main/java/org/autojs/autojs/build/ApkBuilderPluginHelper.java @@ -49,10 +49,6 @@ public static int getPluginVersion(Context context) { return -1; } } - - public static int getSuitablePluginVersion() { - return BuildConfig.VERSION_CODE - 200; - } } diff --git a/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt b/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt index 5a03e150f..b3adba361 100644 --- a/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt +++ b/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt @@ -3,18 +3,15 @@ package org.autojs.autojs.model.script import android.content.Context import android.content.Intent import android.net.Uri -import androidx.annotation.Nullable import android.widget.Toast - +import androidx.annotation.Nullable import com.stardust.app.GlobalAppContext import com.stardust.autojs.execution.ExecutionConfig import com.stardust.autojs.execution.ScriptExecution -import com.stardust.autojs.execution.ScriptExecutionListener import com.stardust.autojs.execution.SimpleScriptExecutionListener import com.stardust.autojs.runtime.exception.ScriptInterruptedException import com.stardust.autojs.script.ScriptSource import com.stardust.util.IntentUtil - import org.autojs.autojs.Pref import org.autojs.autojs.R import org.autojs.autojs.autojs.AutoJs @@ -23,9 +20,7 @@ import org.autojs.autojs.external.fileprovider.AppFileProvider import org.autojs.autojs.external.shortcut.Shortcut import org.autojs.autojs.external.shortcut.ShortcutActivity import org.autojs.autojs.ui.edit.EditActivity - import org.mozilla.javascript.RhinoException - import java.io.File import java.io.FileFilter @@ -60,14 +55,18 @@ object Scripts { col = rhinoException.columnNumber() } if (ScriptInterruptedException.causedByInterrupted(e)) { - GlobalAppContext.get().sendBroadcast(Intent(ACTION_ON_EXECUTION_FINISHED) + GlobalAppContext.get().sendBroadcast( + Intent(ACTION_ON_EXECUTION_FINISHED) .putExtra(EXTRA_EXCEPTION_LINE_NUMBER, line) - .putExtra(EXTRA_EXCEPTION_COLUMN_NUMBER, col)) + .putExtra(EXTRA_EXCEPTION_COLUMN_NUMBER, col) + ) } else { - GlobalAppContext.get().sendBroadcast(Intent(ACTION_ON_EXECUTION_FINISHED) + GlobalAppContext.get().sendBroadcast( + Intent(ACTION_ON_EXECUTION_FINISHED) .putExtra(EXTRA_EXCEPTION_MESSAGE, e.message) .putExtra(EXTRA_EXCEPTION_LINE_NUMBER, line) - .putExtra(EXTRA_EXCEPTION_COLUMN_NUMBER, col)) + .putExtra(EXTRA_EXCEPTION_COLUMN_NUMBER, col) + ) } } @@ -84,10 +83,10 @@ object Scripts { fun createShortcut(scriptFile: ScriptFile) { Shortcut(GlobalAppContext.get()).name(scriptFile.simplifiedName) - .targetClass(ShortcutActivity::class.java) - .iconRes(R.drawable.ic_node_js_black) - .extras(Intent().putExtra(ScriptIntents.EXTRA_KEY_PATH, scriptFile.path)) - .send() + .targetClass(ShortcutActivity::class.java) + .iconRes(R.drawable.ic_node_js_black) + .extras(Intent().putExtra(ScriptIntents.EXTRA_KEY_PATH, scriptFile.path)) + .send() } @@ -99,16 +98,16 @@ object Scripts { edit(context, ScriptFile(path)) } - fun run(file: ScriptFile): ScriptExecution? { - return try { - AutoJs.getInstance().scriptEngineService.execute(file.toSource(), - ExecutionConfig(workingDirectory = file.parent)) + fun run(file: ScriptFile) { + try { + val parent = file.parent + if (parent != null) { + AutoJs.getInstance().scriptEngineService.execute(file.toSource(), ExecutionConfig(workingDirectory = parent)) + } } catch (e: Exception) { e.printStackTrace() Toast.makeText(GlobalAppContext.get(), e.message, Toast.LENGTH_LONG).show() - null } - } @@ -123,17 +122,30 @@ object Scripts { } - fun runWithBroadcastSender(file: File): ScriptExecution { - return AutoJs.getInstance().scriptEngineService.execute(ScriptFile(file).toSource(), BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER, - ExecutionConfig(workingDirectory = file.parent)) + fun runWithBroadcastSender(file: File): ScriptExecution? { + val parent = file.parent + return if (parent == null) { + parent + } else { + AutoJs.getInstance().scriptEngineService.execute( + ScriptFile(file).toSource(), BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER, + ExecutionConfig(workingDirectory = parent) + ) + } } - fun runRepeatedly(scriptFile: ScriptFile, loopTimes: Int, delay: Long, interval: Long): ScriptExecution { + fun runRepeatedly(scriptFile: ScriptFile, loopTimes: Int, delay: Long, interval: Long) { val source = scriptFile.toSource() val directoryPath = scriptFile.parent - return AutoJs.getInstance().scriptEngineService.execute(source, ExecutionConfig(workingDirectory = directoryPath, - delay = delay, loopTimes = loopTimes, interval = interval)) + if (directoryPath != null) { + AutoJs.getInstance().scriptEngineService.execute( + source, ExecutionConfig( + workingDirectory = directoryPath, + delay = delay, loopTimes = loopTimes, interval = interval + ) + ) + } } @Nullable @@ -150,11 +162,14 @@ object Scripts { fun send(file: ScriptFile) { val context = GlobalAppContext.get() - context.startActivity(Intent.createChooser(Intent(Intent.ACTION_SEND) - .setType("text/plain") - .putExtra(Intent.EXTRA_STREAM, IntentUtil.getUriOfFile(context, file.path, AppFileProvider.AUTHORITY)), + context.startActivity( + Intent.createChooser( + Intent(Intent.ACTION_SEND) + .setType("text/plain") + .putExtra(Intent.EXTRA_STREAM, IntentUtil.getUriOfFile(context, file.path, AppFileProvider.AUTHORITY)), GlobalAppContext.getString(R.string.text_send) - ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) + ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + ) } } diff --git a/app/src/main/java/org/autojs/autojs/network/UserService.java b/app/src/main/java/org/autojs/autojs/network/UserService.java index 4886bd684..c2f8bebdc 100644 --- a/app/src/main/java/org/autojs/autojs/network/UserService.java +++ b/app/src/main/java/org/autojs/autojs/network/UserService.java @@ -126,7 +126,7 @@ public Observable me() { public Observable> getNotifications() { return NodeBB.getInstance().getRetrofit() .create(UserApi.class) - .getNotifitions() + .getNotifications() .map(NotificationResponse::getNotifications); } diff --git a/app/src/main/java/org/autojs/autojs/network/VersionService.java b/app/src/main/java/org/autojs/autojs/network/VersionService.java deleted file mode 100644 index b5da35da5..000000000 --- a/app/src/main/java/org/autojs/autojs/network/VersionService.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.autojs.autojs.network; - -import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import android.widget.Toast; - -import com.google.gson.GsonBuilder; -import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; -import org.autojs.autojs.App; -import org.autojs.autojs.BuildConfig; -import org.autojs.autojs.R; -import org.autojs.autojs.network.api.UpdateCheckApi; -import org.autojs.autojs.network.entity.VersionInfo; -import org.autojs.autojs.tool.SimpleObserver; -import org.autojs.autojs.ui.update.UpdateInfoDialogBuilder; -import com.stardust.util.NetworkUtils; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.annotations.NonNull; -import io.reactivex.schedulers.Schedulers; -import retrofit2.Retrofit; -import retrofit2.converter.gson.GsonConverterFactory; - -/** - * Created by Stardust on 2017/9/20. - */ - -public class VersionService { - - private static final String KEY_DEPRECATED = "KEY_DEPRECATED"; - private static final String KEY_DEPRECATED_VERSION_CODE = "KEY_DEPRECATED_VERSION_CODE"; - - private static VersionService sInstance = new VersionService(); - private boolean mDeprecated = false; - private VersionInfo mVersionInfo; - private SharedPreferences mSharedPreferences; - private Retrofit mRetrofit; - - public VersionService() { - mRetrofit = new Retrofit.Builder() - .baseUrl("https://www.autojs.org/") - .addConverterFactory(GsonConverterFactory.create(new GsonBuilder() - .setLenient() - .create())) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) - .build(); - } - - public static VersionService getInstance() { - return sInstance; - } - - public Observable checkForUpdates() { - return mRetrofit.create(UpdateCheckApi.class) - .checkForUpdates() - .subscribeOn(Schedulers.io()); - } - - - private void readDeprecatedFromPref(Context context) { - mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - if (mSharedPreferences.getInt(KEY_DEPRECATED_VERSION_CODE, 0) < BuildConfig.VERSION_CODE) { - mSharedPreferences.edit().remove(KEY_DEPRECATED_VERSION_CODE) - .putBoolean(KEY_DEPRECATED, false) - .apply(); - } - mDeprecated = mSharedPreferences.getBoolean(KEY_DEPRECATED, false); - } - - - public void readDeprecatedFromPrefIfNeeded(Context context) { - if (mSharedPreferences == null) { - readDeprecatedFromPref(context); - } - } - - public boolean isCurrentVersionDeprecated() { - return mDeprecated; - } - - public String getCurrentVersionIssues() { - if (mVersionInfo == null) - return null; - VersionInfo.OldVersion oldVersion = mVersionInfo.getOldVersion(BuildConfig.VERSION_CODE); - if (oldVersion == null) - return null; - return oldVersion.issues; - } - - public Observable checkForUpdatesIfNeededAndUsingWifi(Context context) { - if (mVersionInfo == null) { - return checkUpdateIfUsingWifi(context); - } - return Observable.just(mVersionInfo); - - } - - private Observable checkUpdateIfUsingWifi(Context context) { - if (!NetworkUtils.isWifiAvailable(context)) { - return Observable.empty(); - } - Observable observable = checkForUpdates(); - observable.subscribe(new SimpleObserver() { - @Override - public void onNext(@NonNull VersionInfo versionInfo) { - if (versionInfo.isValid()) { - setVersionInfo(versionInfo); - } - } - - @Override - public void onError(@NonNull Throwable e) { - e.printStackTrace(); - } - }); - return observable; - } - - private void setVersionInfo(VersionInfo result) { - mDeprecated = BuildConfig.VERSION_CODE <= result.deprecated; - mVersionInfo = result; - if (mDeprecated) { - mSharedPreferences.edit().putBoolean(KEY_DEPRECATED, mDeprecated) - .putInt(KEY_DEPRECATED_VERSION_CODE, BuildConfig.VERSION_CODE) - .apply(); - } - } -} diff --git a/app/src/main/java/org/autojs/autojs/network/api/UpdateCheckApi.java b/app/src/main/java/org/autojs/autojs/network/api/UpdateCheckApi.java deleted file mode 100644 index 8b40352c8..000000000 --- a/app/src/main/java/org/autojs/autojs/network/api/UpdateCheckApi.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.autojs.autojs.network.api; - -import org.autojs.autojs.network.entity.VersionInfo; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Headers; - -/** - * Created by Stardust on 2017/9/20. - */ - -public interface UpdateCheckApi { - - @GET("/assets/autojs/version.json") - @Headers("Cache-Control: no-cache") - Observable checkForUpdates(); - -} diff --git a/app/src/main/java/org/autojs/autojs/network/api/UserApi.java b/app/src/main/java/org/autojs/autojs/network/api/UserApi.java index 6589be967..01f09aa93 100644 --- a/app/src/main/java/org/autojs/autojs/network/api/UserApi.java +++ b/app/src/main/java/org/autojs/autojs/network/api/UserApi.java @@ -36,5 +36,5 @@ Observable register(@HeaderMap Map csrfToken, @Fie Observable logout(@HeaderMap Map csrfToken); @GET("/api/notifications") - Observable getNotifitions(); + Observable getNotifications(); } diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java b/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java index f81301da8..111074c8a 100644 --- a/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java +++ b/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java @@ -10,7 +10,7 @@ import java.io.StringReader; -import javax.annotation.Nullable; +import androidx.annotation.Nullable; import io.reactivex.Observable; import io.reactivex.subjects.PublishSubject; diff --git a/app/src/main/java/org/autojs/autojs/theme/ThemeColorManagerCompat.java b/app/src/main/java/org/autojs/autojs/theme/ThemeColorManagerCompat.java index ed75fab31..36dcc50ea 100644 --- a/app/src/main/java/org/autojs/autojs/theme/ThemeColorManagerCompat.java +++ b/app/src/main/java/org/autojs/autojs/theme/ThemeColorManagerCompat.java @@ -1,8 +1,10 @@ package org.autojs.autojs.theme; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; -import android.preference.PreferenceManager; + +import androidx.preference.PreferenceManager; import androidx.core.content.ContextCompat; import androidx.appcompat.app.AppCompatDelegate; @@ -20,9 +22,8 @@ public class ThemeColorManagerCompat { private static SharedPreferences sSharedPreferences; - private static Context sContext; - private static SharedPreferences.OnSharedPreferenceChangeListener sPreferenceChangeListener = (sharedPreferences, key) -> { - if (key.equals(sContext.getString(R.string.key_night_mode))) { + private static final SharedPreferences.OnSharedPreferenceChangeListener sPreferenceChangeListener = (sharedPreferences, key) -> { + if (key.equals(GlobalAppContext.get().getString(R.string.key_night_mode))) { setNightModeEnabled(sharedPreferences.getBoolean(key, false)); } }; @@ -30,7 +31,7 @@ public class ThemeColorManagerCompat { public static int getColorPrimary() { int color = ThemeColorManager.getColorPrimary(); if (color == 0) { - return GlobalAppContext.get().getResources().getColor(R.color.colorPrimary); + return ContextCompat.getColor(GlobalAppContext.get(), R.color.colorPrimary); } else { return color; } @@ -39,11 +40,11 @@ public static int getColorPrimary() { public static void setNightModeEnabled(boolean enabled) { if (enabled) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); - ThemeColor currentTheme = ThemeColor.fromPreferences(PreferenceManager.getDefaultSharedPreferences(sContext), null); + ThemeColor currentTheme = ThemeColor.fromPreferences(PreferenceManager.getDefaultSharedPreferences(GlobalAppContext.get()), null); if (currentTheme != null) { currentTheme.saveIn(sSharedPreferences); } - ThemeColorManager.setThemeColor(ContextCompat.getColor(sContext, R.color.theme_color_black)); + ThemeColorManager.setThemeColor(ContextCompat.getColor(GlobalAppContext.get(), R.color.theme_color_black)); } else { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); ThemeColor previousTheme = ThemeColor.fromPreferences(sSharedPreferences, null); @@ -53,11 +54,11 @@ public static void setNightModeEnabled(boolean enabled) { } } - public static void init(Context context, ThemeColor defaultThemeColor) { - sContext = context; - sSharedPreferences = context.getSharedPreferences("theme_color", Context.MODE_PRIVATE); + public static void init(ThemeColor defaultThemeColor) { + Context mContext = GlobalAppContext.get(); + sSharedPreferences = mContext.getSharedPreferences("theme_color", Context.MODE_PRIVATE); ThemeColorManager.setDefaultThemeColor(defaultThemeColor); - ThemeColorManager.init(context); - PreferenceManager.getDefaultSharedPreferences(context).registerOnSharedPreferenceChangeListener(sPreferenceChangeListener); + ThemeColorManager.init(mContext); + PreferenceManager.getDefaultSharedPreferences(mContext).registerOnSharedPreferenceChangeListener(sPreferenceChangeListener); } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/tool/CrashHandler.java b/app/src/main/java/org/autojs/autojs/tool/CrashHandler.java index f488b7e01..91d5f70bf 100644 --- a/app/src/main/java/org/autojs/autojs/tool/CrashHandler.java +++ b/app/src/main/java/org/autojs/autojs/tool/CrashHandler.java @@ -1,9 +1,6 @@ package org.autojs.autojs.tool; -/** - * Created by Stardust on 2017/2/2. - */ - +/* Created by Stardust on 2017/2/2 */ import android.content.Intent; import android.os.Build; diff --git a/app/src/main/java/org/autojs/autojs/tool/IntentTool.java b/app/src/main/java/org/autojs/autojs/tool/IntentTool.java index bd79622d0..41d40a12e 100644 --- a/app/src/main/java/org/autojs/autojs/tool/IntentTool.java +++ b/app/src/main/java/org/autojs/autojs/tool/IntentTool.java @@ -14,7 +14,7 @@ public class IntentTool { public static void browse(Context context, String url){ if (!IntentUtil.browse(context, url)) { - Toast.makeText(context, R.string.text_no_brower, Toast.LENGTH_SHORT).show(); + Toast.makeText(context, R.string.text_no_browser, Toast.LENGTH_SHORT).show(); } } } diff --git a/app/src/main/java/org/autojs/autojs/ui/BaseActivity.java b/app/src/main/java/org/autojs/autojs/ui/BaseActivity.java index 746f4aff9..a47e41445 100644 --- a/app/src/main/java/org/autojs/autojs/ui/BaseActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/BaseActivity.java @@ -22,11 +22,9 @@ import org.autojs.autojs.R; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import static android.content.pm.PackageManager.PERMISSION_DENIED; -import static android.content.pm.PackageManager.PERMISSION_GRANTED; /** * Created by Stardust on 2017/1/23. @@ -39,6 +37,8 @@ public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + // Dunno how to disable the splash screen. T-T + // com.android.server.policy.PhoneWindowManager.SHOW_SPLASH_SCREENS = false; super.onCreate(savedInstanceState); } @@ -75,19 +75,10 @@ protected void onStart() { return (T) findViewById(resId); } - protected boolean checkPermission(String... permissions) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - String[] requestPermissions = getRequestPermissions(permissions); - if (requestPermissions.length > 0) { - requestPermissions(requestPermissions, PERMISSION_REQUEST_CODE); - return false; - } - return true; - } else { - int[] grantResults = new int[permissions.length]; - Arrays.fill(grantResults, PERMISSION_GRANTED); - onRequestPermissionsResult(PERMISSION_REQUEST_CODE, permissions, grantResults); - return false; + protected void checkPermission(String... permissions) { + String[] requestPermissions = getRequestPermissions(permissions); + if (requestPermissions.length > 0) { + requestPermissions(requestPermissions, PERMISSION_REQUEST_CODE); } } diff --git a/app/src/main/java/org/autojs/autojs/ui/common/NotAskAgainDialog.java b/app/src/main/java/org/autojs/autojs/ui/common/NotAskAgainDialog.java index 5c6468583..e02b359c3 100644 --- a/app/src/main/java/org/autojs/autojs/ui/common/NotAskAgainDialog.java +++ b/app/src/main/java/org/autojs/autojs/ui/common/NotAskAgainDialog.java @@ -1,7 +1,7 @@ package org.autojs.autojs.ui.common; import android.content.Context; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import androidx.annotation.NonNull; import android.text.TextUtils; diff --git a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java index 91f44aed8..af98d86b2 100644 --- a/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java +++ b/app/src/main/java/org/autojs/autojs/ui/common/ScriptOperations.java @@ -5,17 +5,19 @@ import android.content.Intent; import android.os.Environment; import android.os.Looper; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.material.snackbar.Snackbar; import android.text.Editable; import android.text.InputType; +import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; +import com.google.android.material.snackbar.Snackbar; import com.stardust.app.DialogUtils; import com.stardust.app.GlobalAppContext; import com.stardust.pio.PFiles; @@ -30,21 +32,21 @@ import org.autojs.autojs.model.explorer.ExplorerFileItem; import org.autojs.autojs.model.explorer.ExplorerPage; import org.autojs.autojs.model.explorer.Explorers; -import org.autojs.autojs.storage.file.TmpScriptFiles; import org.autojs.autojs.model.sample.SampleFile; import org.autojs.autojs.model.script.ScriptFile; import org.autojs.autojs.model.script.Scripts; import org.autojs.autojs.network.download.DownloadManager; +import org.autojs.autojs.storage.file.TmpScriptFiles; +import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; import org.autojs.autojs.ui.filechooser.FileChooserDialogBuilder; import org.autojs.autojs.ui.shortcut.ShortcutCreateActivity; import org.autojs.autojs.ui.timing.TimedTaskSettingActivity_; -import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; - import org.reactivestreams.Publisher; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.Objects; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -62,10 +64,10 @@ public class ScriptOperations { private static final String LOG_TAG = "ScriptOperations"; private final ExplorerPage mExplorerPage; - private Context mContext; - private View mView; - private ScriptFile mCurrentDirectory; - private Explorer mExplorer; + private final Context mContext; + private final View mView; + private final ScriptFile mCurrentDirectory; + private final Explorer mExplorer; public ScriptOperations(Context context, View view, ScriptFile currentDirectory) { mContext = context; @@ -243,7 +245,7 @@ private Observable showNameInputDialog(String prefix, MaterialDialog.Inp .alwaysCallInputCallback() .input(getString(R.string.text_please_input_name), prefix, false, textWatcher) .onPositive((dialog, which) -> { - input.onNext(dialog.getInputEditText().getText().toString()); + input.onNext(Objects.requireNonNull(dialog.getInputEditText()).getText().toString()); input.onComplete(); }) .build()); @@ -291,11 +293,9 @@ public void createShortcut(ScriptFile file) { public void delete(final ScriptFile scriptFile) { DialogUtils.showDialog(new ThemeColorMaterialDialogBuilder(mContext) .title(mContext.getString(R.string.text_are_you_sure_to_delete, scriptFile.getName())) - .positiveText(R.string.cancel) - .negativeText(R.string.ok) - .onNegative((dialog, which) -> { - deleteWithoutConfirm(scriptFile); - }) + .negativeText(R.string.cancel) + .positiveText(R.string.ok) + .onPositive((dialog, which) -> deleteWithoutConfirm(scriptFile)) .build()); } @@ -307,9 +307,12 @@ public void deleteWithoutConfirm(final ScriptFile scriptFile) { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(deleted -> { - showMessage(deleted ? R.string.text_already_delete : R.string.text_delete_failed); - if (deleted) + if (deleted) { + showMessage(R.string.text_already_delete); notifyFileRemoved(isDir, scriptFile); + } else { + showMessage(R.string.text_delete_failed); + } }); } @@ -338,7 +341,9 @@ public Observable download(String url) { return RxDialogs.confirm(mContext, R.string.confirm_overwrite_file) .flatMap(yes -> { if (yes) { - new File(savePath).delete(); + if (!new File(savePath).delete()) { + Log.e(LOG_TAG, "download: delete failed"); + } return Observable.just(savePath); } else { return Observable.empty(); @@ -375,9 +380,9 @@ public void timedTask(ScriptFile scriptFile) { private class InputCallback implements MaterialDialog.InputCallback { - private String mExcluded; + private final String mExcluded; private boolean mIsFirstTextChanged = true; - private String mExtension; + private final String mExtension; InputCallback(@Nullable String ext, String excluded) { mExtension = ext == null ? null : "." + ext; diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditorMenu.java b/app/src/main/java/org/autojs/autojs/ui/edit/EditorMenu.java index cf7243525..7870e78eb 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/EditorMenu.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditorMenu.java @@ -2,7 +2,9 @@ import android.annotation.SuppressLint; import android.content.Context; + import com.google.android.material.snackbar.Snackbar; + import android.text.InputType; import android.text.TextUtils; import android.view.MenuItem; @@ -173,7 +175,7 @@ private void showClassSearchingItem(MaterialDialog dialog, ClassSearchingItem it .neutralText(R.string.text_view_docs) .onPositive((ignored, which) -> { ClipboardUtil.setClip(mContext, desc); - Toast.makeText(mContext, R.string.text_already_copy_to_clip, Toast.LENGTH_SHORT).show(); + Toast.makeText(mContext, R.string.text_already_copied_to_clip, Toast.LENGTH_SHORT).show(); dialog.dismiss(); }) .onNegative((ignored, which) -> { @@ -287,7 +289,7 @@ private void findOrReplace() { private void copyAll() { ClipboardUtil.setClip(mContext, mEditor.getText()); - Snackbar.make(mEditorView, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show(); + Snackbar.make(mEditorView, R.string.text_already_copied_to_clip, Snackbar.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java index 00ac8df38..6b4c9d780 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.java @@ -23,6 +23,7 @@ import android.text.TextUtils; import android.util.AttributeSet; +import android.util.Log; import android.util.SparseBooleanArray; import android.view.Gravity; import android.view.View; @@ -90,6 +91,8 @@ @EViewGroup(R.layout.editor_view) public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintClickListener, FunctionsKeyboardView.ClickCallback, ToolbarFragment.OnMenuItemClickListener { + private static final String TAG = EditorView.class.getSimpleName(); + public static final String EXTRA_PATH = "path"; public static final String EXTRA_NAME = "name"; public static final String EXTRA_CONTENT = "content"; @@ -408,6 +411,7 @@ public ScriptExecution run(boolean showMessage) { Snackbar.make(this, R.string.text_start_running, Snackbar.LENGTH_SHORT).show(); } // TODO: 2018/10/24 + @Nullable ScriptExecution execution = Scripts.INSTANCE.runWithBroadcastSender(new File(mUri.getPath())); if (execution == null) { return null; @@ -428,7 +432,8 @@ public void redo() { public Observable save() { String path = mUri.getPath(); - PFiles.move(path, path + ".bak"); + String backPath = path + ".bak"; + PFiles.move(path, backPath); return Observable.just(mEditor.getText()) .observeOn(Schedulers.io()) .doOnNext(s -> PFiles.write(getContext().getContentResolver().openOutputStream(mUri), s)) @@ -436,6 +441,11 @@ public Observable save() { .doOnNext(s -> { mEditor.markTextAsSaved(); setMenuItemStatus(R.id.save, false); + }) + .doOnNext(s -> { + if (!new File(backPath).delete()) { + Log.e(TAG, "save: failed"); + } }); } diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java b/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java index 632d0b6fb..e54b6b003 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/FindOrReplaceDialogBuilder.java @@ -1,7 +1,7 @@ package org.autojs.autojs.ui.edit; import android.content.Context; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import androidx.annotation.NonNull; import android.text.TextUtils; import android.view.View; diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/debug/CodeEvaluateDialogBuilder.java b/app/src/main/java/org/autojs/autojs/ui/edit/debug/CodeEvaluateDialogBuilder.java index 7da4da6b0..ced1b69e3 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/debug/CodeEvaluateDialogBuilder.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/debug/CodeEvaluateDialogBuilder.java @@ -2,7 +2,7 @@ import android.content.Context; import android.content.SharedPreferences; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import androidx.annotation.NonNull; import android.text.Editable; import android.text.TextUtils; diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java index 1d56fa3b3..c8a4b8bc2 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditor.java @@ -100,7 +100,7 @@ public void copyLine() { CharSequence lineText = mCodeEditText.getText().subSequence(mCodeEditText.getLayout().getLineStart(line), mCodeEditText.getLayout().getLineEnd(line)); ClipboardUtil.setClip(getContext(), lineText); - Snackbar.make(this, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show(); + Snackbar.make(this, R.string.text_already_copied_to_clip, Snackbar.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.java b/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.java index 829ec8008..df4917d15 100644 --- a/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.java @@ -4,20 +4,17 @@ import android.content.ClipboardManager; import android.os.Build; import android.os.Bundle; -import android.preference.PreferenceManager; -import androidx.annotation.NonNull; -import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.util.SparseIntArray; import android.widget.Toast; -import com.afollestad.materialdialogs.DialogAction; -import com.afollestad.materialdialogs.MaterialDialog; +import androidx.appcompat.widget.Toolbar; +import androidx.preference.PreferenceManager; import org.autojs.autojs.BuildConfig; -import org.autojs.autojs.ui.BaseActivity; -import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; import org.autojs.autojs.R; +import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; +import org.autojs.autojs.ui.BaseActivity; import java.util.Locale; import java.util.Timer; @@ -105,7 +102,7 @@ public void run() { private void copyToClip(String text) { ((ClipboardManager) getSystemService(CLIPBOARD_SERVICE)) .setPrimaryClip(ClipData.newPlainText("Debug", text)); - Toast.makeText(ErrorReportActivity.this, R.string.text_already_copy_to_clip, Toast.LENGTH_SHORT).show(); + Toast.makeText(ErrorReportActivity.this, R.string.text_already_copied_to_clip, Toast.LENGTH_SHORT).show(); } private void setUpUI() { diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenu.java b/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenu.java index e79e9e986..4139e9369 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenu.java +++ b/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenu.java @@ -301,7 +301,7 @@ void copyPackageName() { if (TextUtils.isEmpty(mRunningPackage)) return; ClipboardUtil.setClip(mContext, mRunningPackage); - Toast.makeText(mContext, R.string.text_already_copy_to_clip, Toast.LENGTH_SHORT).show(); + Toast.makeText(mContext, R.string.text_already_copied_to_clip, Toast.LENGTH_SHORT).show(); } @Optional @@ -311,7 +311,7 @@ void copyActivityName() { if (TextUtils.isEmpty(mRunningActivity)) return; ClipboardUtil.setClip(mContext, mRunningActivity); - Toast.makeText(mContext, R.string.text_already_copy_to_clip, Toast.LENGTH_SHORT).show(); + Toast.makeText(mContext, R.string.text_already_copied_to_clip, Toast.LENGTH_SHORT).show(); } @Optional diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java b/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java index 9dc426528..541584f0a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java +++ b/app/src/main/java/org/autojs/autojs/ui/floating/CircularMenuWindow.java @@ -2,7 +2,7 @@ import android.content.Context; import android.content.SharedPreferences; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import android.view.Gravity; import android.view.OrientationEventListener; import android.view.View; diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java index c0d36ee45..ac767c35e 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java +++ b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java @@ -97,7 +97,7 @@ private void ensureOperationPopMenu() { if (mBubblePopMenu != null) return; mBubblePopMenu = new BubblePopupMenu(mContext, Arrays.asList( - mContext.getString(R.string.text_show_widget_infomation), + mContext.getString(R.string.text_show_widget_information), mContext.getString(R.string.text_show_layout_hierarchy), mContext.getString(R.string.text_generate_code))); mBubblePopMenu.setOnItemClickListener((view, position) -> { diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java index 54fc4be27..6992fffa8 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java +++ b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java @@ -79,7 +79,7 @@ private void ensureOperationPopMenu() { if (mBubblePopMenu != null) return; mBubblePopMenu = new BubblePopupMenu(mContext, Arrays.asList( - mContext.getString(R.string.text_show_widget_infomation), + mContext.getString(R.string.text_show_widget_information), mContext.getString(R.string.text_show_layout_bounds), mContext.getString(R.string.text_generate_code))); mBubblePopMenu.setOnItemClickListener((view, position) -> { diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt index 54835071d..385beed5b 100644 --- a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt +++ b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt @@ -74,7 +74,6 @@ class NodeInfoView : RecyclerView { internal val VIEW_TYPE_HEADER = 0 internal val VIEW_TYPE_ITEM = 1 - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val layoutRes = if (viewType == VIEW_TYPE_HEADER) R.layout.node_info_view_header else R.layout.node_info_view_item return ViewHolder(LayoutInflater.from(parent.context).inflate(layoutRes, parent, false)) @@ -96,9 +95,7 @@ class NodeInfoView : RecyclerView { internal inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - @BindView(R.id.name) - val attrName: TextView = itemView.findViewById(R.id.name) - + val attrName: TextView = itemView.findViewById(R.id.name); val attrValue: TextView = itemView.findViewById(R.id.value) init { @@ -107,7 +104,7 @@ class NodeInfoView : RecyclerView { if (pos < 1 || pos >= mData.size) return@setOnClickListener ClipboardUtil.setClip(context, mData[pos][0] + " = " + mData[pos][1]) - Snackbar.make(this@NodeInfoView, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show() + Snackbar.make(this@NodeInfoView, R.string.text_already_copied_to_clip, Snackbar.LENGTH_SHORT).show() } } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java index f2e38e2c4..d3c786c78 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java @@ -1,26 +1,27 @@ package org.autojs.autojs.ui.main; import android.Manifest; +import android.annotation.SuppressLint; +import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; import androidx.annotation.NonNull; - -import com.google.android.material.floatingactionbutton.FloatingActionButton; - -import androidx.core.view.GravityCompat; -import androidx.fragment.app.Fragment; -import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.widget.Toolbar; +import androidx.core.content.ContextCompat; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.fragment.app.Fragment; +import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; -import android.view.Gravity; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; - +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.tabs.TabLayout; import com.stardust.app.FragmentPagerAdapterBuilder; import com.stardust.app.OnActivityResultDelegate; @@ -28,7 +29,7 @@ import com.stardust.autojs.core.permission.PermissionRequestProxyActivity; import com.stardust.autojs.core.permission.RequestPermissionCallbacks; import com.stardust.enhancedfloaty.FloatyService; -import com.stardust.pio.PFiles; +import com.stardust.theme.ThemeColor; import com.stardust.theme.ThemeColorManager; import com.stardust.util.BackPressedHandler; import com.stardust.util.DeveloperUtils; @@ -39,40 +40,31 @@ import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; import org.autojs.autojs.BuildConfig; -import org.autojs.autojs.Pref; import org.autojs.autojs.R; import org.autojs.autojs.autojs.AutoJs; import org.autojs.autojs.external.foreground.ForegroundService; import org.autojs.autojs.model.explorer.Explorers; -import org.autojs.autojs.tool.AccessibilityServiceTool; import org.autojs.autojs.ui.BaseActivity; -import org.autojs.autojs.ui.common.NotAskAgainDialog; import org.autojs.autojs.ui.doc.DocsFragment_; import org.autojs.autojs.ui.floating.FloatyWindowManger; import org.autojs.autojs.ui.log.LogActivity_; -import org.autojs.autojs.ui.main.community.CommunityFragment; -import org.autojs.autojs.ui.main.community.CommunityFragment_; -import org.autojs.autojs.ui.main.market.MarketFragment; import org.autojs.autojs.ui.main.scripts.MyScriptListFragment_; import org.autojs.autojs.ui.main.task.TaskManagerFragment_; import org.autojs.autojs.ui.settings.SettingsActivity_; -import org.autojs.autojs.ui.update.VersionGuard; -import org.autojs.autojs.ui.widget.CommonMarkdownView; import org.autojs.autojs.ui.widget.SearchViewItem; import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; import java.util.Arrays; +@SuppressLint("NonConstantResourceId") @EActivity(R.layout.activity_main) public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost, BackPressedHandler.HostActivity, PermissionRequestProxyActivity { public static class DrawerOpenEvent { + @SuppressWarnings("InstantiationOfUtilityClass") static DrawerOpenEvent SINGLETON = new DrawerOpenEvent(); } - private static final String LOG_TAG = "MainActivity"; - @ViewById(R.id.drawer_layout) DrawerLayout mDrawerLayout; @@ -83,10 +75,9 @@ public static class DrawerOpenEvent { FloatingActionButton mFab; private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter; - private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator(); - private RequestPermissionCallbacks mRequestPermissionCallbacks = new RequestPermissionCallbacks(); - private VersionGuard mVersionGuard; - private BackPressedHandler.Observer mBackPressObserver = new BackPressedHandler.Observer(); + private final OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator(); + private final RequestPermissionCallbacks mRequestPermissionCallbacks = new RequestPermissionCallbacks(); + private final BackPressedHandler.Observer mBackPressObserver = new BackPressedHandler.Observer(); private SearchViewItem mSearchViewItem; private MenuItem mLogMenuItem; private boolean mDocsSearchItemExpanded; @@ -96,19 +87,26 @@ public static class DrawerOpenEvent { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); checkPermissions(); - showAccessibilitySettingPromptIfDisabled(); - mVersionGuard = new VersionGuard(this); - showAnnunciationIfNeeded(); - EventBus.getDefault().register(this); + applyThemeColor(); applyDayNightMode(); } + void applyThemeColor() { + if (ThemeColor.fromPreferences(PreferenceManager.getDefaultSharedPreferences(this), null) == null) { + ThemeColor defaultThemeColor = new ThemeColor( + ContextCompat.getColor(this, R.color.colorPrimary), + ContextCompat.getColor(this, R.color.colorPrimaryDark), + ContextCompat.getColor(this, R.color.colorAccent) + ); + ThemeColorManager.setThemeColor(defaultThemeColor); + } + } + @AfterViews void setUpViews() { setUpToolbar(); setUpTabViewPager(); - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); registerBackPressHandlers(); ThemeColorManager.addViewBackground(findViewById(R.id.app_bar)); mDrawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() { @@ -119,20 +117,6 @@ public void onDrawerOpened(View drawerView) { }); } - private void showAnnunciationIfNeeded() { - if (!Pref.shouldShowAnnunciation()) { - return; - } - new CommonMarkdownView.DialogBuilder(this) - .padding(36, 0, 36, 0) - .markdown(PFiles.read(getResources().openRawResource(R.raw.annunciation))) - .title(R.string.text_annunciation) - .positiveText(R.string.ok) - .canceledOnTouchOutside(false) - .show(); - } - - private void registerBackPressHandlers() { mBackPressObserver.registerHandler(new DrawerAutoClose(mDrawerLayout, Gravity.START)); mBackPressObserver.registerHandler(new BackPressedHandler.DoublePressExit(this, R.string.text_press_again_to_exit)); @@ -142,20 +126,6 @@ private void checkPermissions() { checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE); } - private void showAccessibilitySettingPromptIfDisabled() { - if (AccessibilityServiceTool.isAccessibilityServiceEnabled(this)) { - return; - } - new NotAskAgainDialog.Builder(this, "MainActivity.accessibility") - .title(R.string.text_need_to_enable_accessibility_service) - .content(R.string.explain_accessibility_permission) - .positiveText(R.string.text_go_to_setting) - .negativeText(R.string.text_cancel) - .onPositive((dialog, which) -> - AccessibilityServiceTool.enableAccessibilityService() - ).show(); - } - private void setUpToolbar() { Toolbar toolbar = $(R.id.toolbar); setSupportActionBar(toolbar); @@ -170,10 +140,8 @@ private void setUpTabViewPager() { TabLayout tabLayout = $(R.id.tab); mPagerAdapter = new FragmentPagerAdapterBuilder(this) .add(new MyScriptListFragment_(), R.string.text_file) - .add(new DocsFragment_(), R.string.text_tutorial) - .add(new CommunityFragment_(), R.string.text_community) - .add(new MarketFragment(), R.string.text_market) - .add(new TaskManagerFragment_(), R.string.text_manage) + .add(new DocsFragment_(), R.string.text_documentation) + .add(new TaskManagerFragment_(), R.string.text_task) .build(); mViewPager.setAdapter(mPagerAdapter); tabLayout.setupWithViewPager(mViewPager); @@ -206,17 +174,32 @@ public void onPageSelected(int position) { @Click(R.id.setting) - void startSettingActivity() { - startActivity(new Intent(this, SettingsActivity_.class)); + public void startSettingActivity(View view) { + startActivity(new Intent(view.getContext(), SettingsActivity_.class)); } @Click(R.id.exit) - public void exitCompletely() { - finish(); + public void exitCompletely(View view) { FloatyWindowManger.hideCircularMenu(); ForegroundService.stop(this); - stopService(new Intent(this, FloatyService.class)); + stopService(new Intent(view.getContext(), FloatyService.class)); AutoJs.getInstance().getScriptEngineService().stopAll(); + finish(); + Runtime.getRuntime().exit(0); + } + + @Click(R.id.restart) + public void restartAfterPendingIntent(View view) { + Context context = view.getContext(); + PackageManager packageManager = context.getPackageManager(); + Intent intent = packageManager.getLaunchIntentForPackage(context.getPackageName()); + ComponentName componentName = null; + if (intent != null) { + componentName = intent.getComponent(); + } + Intent mainIntent = Intent.makeRestartActivityTask(componentName); + context.startActivity(mainIntent); + Runtime.getRuntime().exit(0); } @Override @@ -227,9 +210,9 @@ protected void onPause() { @Override protected void onResume() { super.onResume(); - mVersionGuard.checkForDeprecatesAndUpdates(); } + @SuppressLint("MissingSuperCall") @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { mActivityResultMediator.onActivityResult(requestCode, resultCode, data); @@ -241,13 +224,13 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis if (mRequestPermissionCallbacks.onRequestPermissionsResult(requestCode, permissions, grantResults)) { return; } - if (getGrantResult(Manifest.permission.READ_EXTERNAL_STORAGE, permissions, grantResults) == PackageManager.PERMISSION_GRANTED) { + if (getGrantResult(permissions, grantResults) == PackageManager.PERMISSION_GRANTED) { Explorers.workspace().refreshAll(); } } - private int getGrantResult(String permission, String[] permissions, int[] grantResults) { - int i = Arrays.asList(permissions).indexOf(permission); + private int getGrantResult(String[] permissions, int[] grantResults) { + int i = Arrays.asList(permissions).indexOf(Manifest.permission.READ_EXTERNAL_STORAGE); if (i < 0) { return 2; } @@ -258,7 +241,7 @@ private int getGrantResult(String permission, String[] permissions, int[] grantR protected void onStart() { super.onStart(); if (!BuildConfig.DEBUG) { - DeveloperUtils.verifyApk(this, R.string.dex_crcs); + DeveloperUtils.verifyApk(this); } } @@ -321,12 +304,6 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } - @Subscribe - public void onLoadUrl(CommunityFragment.LoadUrl loadUrl) { - mDrawerLayout.closeDrawer(GravityCompat.START); - } - - private void setUpSearchMenuItem(MenuItem searchMenuItem) { mSearchViewItem = new SearchViewItem(this, searchMenuItem) { @Override diff --git a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java deleted file mode 100644 index 9e9bbee48..000000000 --- a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java +++ /dev/null @@ -1,140 +0,0 @@ -package org.autojs.autojs.ui.main.community; - -import android.app.Activity; -import android.os.Bundle; -import androidx.annotation.Nullable; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import android.webkit.WebView; - -import org.autojs.autojs.R; -import org.autojs.autojs.network.NodeBB; -import org.autojs.autojs.ui.main.QueryEvent; -import org.autojs.autojs.ui.main.ViewPagerFragment; -import com.stardust.util.BackPressedHandler; - -import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.EFragment; -import org.androidannotations.annotations.ViewById; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; - -import java.net.URLEncoder; - -/** - * Created by Stardust on 2017/8/22. - */ -@EFragment(R.layout.fragment_community) -public class CommunityFragment extends ViewPagerFragment implements BackPressedHandler { - - public static class LoadUrl { - public final String url; - - public LoadUrl(String url) { - this.url = url; - } - - } - - public static class VisibilityChange { - public final boolean visible; - - public VisibilityChange(boolean visible) { - this.visible = visible; - } - } - - private static final String POSTS_PAGE_PATTERN = "[\\S\\s]+/topic/[0-9]+/[\\S\\s]+"; - - @ViewById(R.id.eweb_view) - CommunityWebView mEWebView; - WebView mWebView; - - public CommunityFragment() { - super(0); - setArguments(new Bundle()); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - EventBus.getDefault().register(this); - } - - @AfterViews - void setUpViews() { - mWebView = mEWebView.getWebView(); - String url = "https://www.autojs.org/"; - Bundle savedWebViewState = getArguments().getBundle("savedWebViewState"); - if (savedWebViewState != null) { - mWebView.restoreState(savedWebViewState); - } else { - mWebView.loadUrl(url); - } - } - - @Override - public void onPause() { - super.onPause(); - Bundle savedWebViewState = new Bundle(); - mWebView.saveState(savedWebViewState); - getArguments().putBundle("savedWebViewState", savedWebViewState); - } - - @Override - public boolean onBackPressed(Activity activity) { - if (mWebView.canGoBack()) { - mWebView.goBack(); - return true; - } - return false; - } - - - @Override - protected void onFabClick(FloatingActionButton fab) { - if (isInPostsPage()) { - mWebView.loadUrl("javascript:$('button[component=\"topic/reply\"]').click()"); - } else { - mWebView.loadUrl("javascript:$('#new_topic').click()"); - } - } - - @Subscribe - public void loadUrl(LoadUrl loadUrl) { - mWebView.loadUrl(NodeBB.url(loadUrl.url)); - } - - @Subscribe - public void submitQuery(QueryEvent event) { - if (!isShown() || event == QueryEvent.CLEAR) { - return; - } - String query = URLEncoder.encode(event.getQuery()); - String url = String.format("http://www.autojs.org/search?term=%s&in=titlesposts", query); - mWebView.loadUrl(url); - event.collapseSearchView(); - } - - private boolean isInPostsPage() { - String url = mWebView.getUrl(); - return url != null && url.matches(POSTS_PAGE_PATTERN); - } - - @Override - public void onDestroy() { - super.onDestroy(); - EventBus.getDefault().unregister(this); - } - - @Override - public void onPageShow() { - super.onPageShow(); - EventBus.getDefault().post(new VisibilityChange(true)); - } - - @Override - public void onPageHide() { - super.onPageHide(); - EventBus.getDefault().post(new VisibilityChange(false)); - } -} diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/CommunityDrawerMenu.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/CommunityDrawerMenu.java deleted file mode 100644 index 7abea7062..000000000 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/CommunityDrawerMenu.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.autojs.autojs.ui.main.drawer; - -import android.annotation.SuppressLint; - -import org.autojs.autojs.R; -import org.autojs.autojs.network.UserService; -import org.autojs.autojs.network.entity.notification.Notification; -import org.autojs.autojs.ui.main.community.CommunityFragment; - -import org.greenrobot.eventbus.EventBus; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import io.reactivex.Observable; -import io.reactivex.ObservableSource; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.functions.Function; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by Stardust on 2017/12/10. - */ -@SuppressLint("CheckResult") -public class CommunityDrawerMenu { - - private DrawerMenuItem mUnreadItem = new DrawerMenuItem(R.drawable.community_inbox, R.string.text_community_unread, this::showUnread); - private DrawerMenuItem mLogoutItem = new DrawerMenuItem(R.drawable.ic_exit_to_app_black_24dp, R.string.text_logout, this::logout); - private DrawerMenuItem mNotificationItem = new DrawerMenuItem(R.drawable.ic_ali_notification, R.string.text_notification, this::showNotifications); - - private List mDrawerMenuItems = new ArrayList<>(Arrays.asList( - new DrawerMenuGroup(R.string.text_community), - mNotificationItem, - new DrawerMenuItem(R.drawable.community_list, R.string.text_community_category, this::showCategories), - mUnreadItem, - new DrawerMenuItem(R.drawable.community_time, R.string.text_community_recent, this::showRecent), - new DrawerMenuItem(R.drawable.community_fire, R.string.text_community_popular, this::showPopular), - new DrawerMenuItem(R.drawable.community_tags, R.string.text_community_tags, this::showTags), - mLogoutItem - )); - - private boolean mShown = false; - private DrawerMenuAdapter mMenuAdapter; - - - public void showCommunityMenu(DrawerMenuAdapter adapter) { - mMenuAdapter = adapter; - mShown = true; - List items = adapter.getDrawerMenuItems(); - if (items.get(0) == mDrawerMenuItems.get(0)) { - refreshUserStatus(adapter); - return; - } - items.addAll(0, mDrawerMenuItems); - adapter.notifyItemRangeInserted(0, mDrawerMenuItems.size()); - adapter.notifyItemChanged(mDrawerMenuItems.size()); - refreshUserStatus(adapter); - } - - - private void refreshUserStatus(DrawerMenuAdapter adapter) { - UserService.getInstance().refreshOnlineStatus() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(online -> { - setUserOnlineStatus(adapter, online); - if (online) { - refreshNotificationCount(adapter); - } - }, Throwable::printStackTrace); - - } - - public void refreshNotificationCount(DrawerMenuAdapter adapter) { - UserService.getInstance().getNotifications() - .flatMap(Observable::fromIterable) - .filter(n -> !n.isRead()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .count() - .subscribe(count -> setNotificationCount(adapter, count), - Throwable::printStackTrace); - } - - private void setNotificationCount(DrawerMenuAdapter adapter, long count) { - mNotificationItem.setNotificationCount((int) count); - adapter.notifyItemChanged(mNotificationItem); - } - - public void setUserOnlineStatus(DrawerMenuAdapter adapter, boolean online) { - if (online) { - addItem(adapter, R.string.text_community, mNotificationItem); - addItem(adapter, R.string.text_community_category, mUnreadItem); - addItem(adapter, R.string.text_community_tags, mLogoutItem); - } else { - removeItem(adapter, R.string.text_community_unread); - removeItem(adapter, R.string.text_logout); - removeItem(adapter, R.string.text_notification); - } - - } - - private void addItem(DrawerMenuAdapter adapter, int title, DrawerMenuItem itemToAdd) { - List items = adapter.getDrawerMenuItems(); - for (int i = 0; i < items.size(); i++) { - DrawerMenuItem item = items.get(i); - if (item.getTitle() == title) { - if (i >= items.size() || items.get(i + 1) != itemToAdd) { - items.add(i + 1, itemToAdd); - adapter.notifyItemInserted(i + 1); - } - break; - } - } - - } - - private void removeItem(DrawerMenuAdapter adapter, int title) { - List items = adapter.getDrawerMenuItems(); - for (int i = 0; i < items.size(); i++) { - DrawerMenuItem item = items.get(i); - if (item.getTitle() == title) { - items.remove(i); - adapter.notifyItemRemoved(i); - break; - } - } - } - - - public void hideCommunityMenu(DrawerMenuAdapter adapter) { - List items = adapter.getDrawerMenuItems(); - mShown = false; - if (items.isEmpty() || items.get(0) != mDrawerMenuItems.get(0)) { - return; - } - for (int i = 1; i < items.size(); i++) { - DrawerMenuItem item = items.get(i); - if (item instanceof DrawerMenuGroup) { - items.subList(0, i).clear(); - adapter.notifyItemRangeRemoved(0, i); - adapter.notifyItemChanged(0); - break; - } - } - } - - private void showNotifications(DrawerMenuItemViewHolder holder) { - EventBus.getDefault().post(new CommunityFragment.LoadUrl("/notifications")); - setNotificationCount(mMenuAdapter, 0); - } - - private void showCategories(DrawerMenuItemViewHolder holder) { - EventBus.getDefault().post(new CommunityFragment.LoadUrl("/categories")); - } - - private void showUnread(DrawerMenuItemViewHolder holder) { - EventBus.getDefault().post(new CommunityFragment.LoadUrl("/unread")); - - } - - private void showRecent(DrawerMenuItemViewHolder holder) { - EventBus.getDefault().post(new CommunityFragment.LoadUrl("/recent")); - - } - - private void showPopular(DrawerMenuItemViewHolder holder) { - EventBus.getDefault().post(new CommunityFragment.LoadUrl("/popular")); - - } - - private void showTags(DrawerMenuItemViewHolder holder) { - EventBus.getDefault().post(new CommunityFragment.LoadUrl("/tags")); - - } - - - private void logout(DrawerMenuItemViewHolder holder) { - UserService.getInstance().logout() - .subscribeOn(Schedulers.io()) - .subscribe(); - EventBus.getDefault().post(new CommunityFragment.LoadUrl("/")); - } - - public boolean isShown() { - return mShown; - } -} diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java index b5947cc78..6c42b2d82 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java @@ -1,81 +1,57 @@ package org.autojs.autojs.ui.main.drawer; +import static android.content.Context.POWER_SERVICE; + import android.annotation.SuppressLint; -import android.app.AppOpsManager; -import android.content.DialogInterface; +import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.Intent; -import android.os.Build; +import android.content.pm.PackageManager; +import android.net.Uri; import android.os.Bundle; +import android.os.PowerManager; import android.provider.Settings; +import android.view.View; +import android.widget.Toast; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import android.text.TextUtils; -import android.view.View; -import android.widget.TextView; -import android.widget.Toast; - import com.afollestad.materialdialogs.MaterialDialog; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.request.RequestOptions; -import com.bumptech.glide.request.target.CustomViewTarget; -import com.bumptech.glide.request.target.SimpleTarget; -import com.bumptech.glide.request.transition.Transition; +import com.google.android.material.snackbar.Snackbar; import com.stardust.app.AppOpsKt; import com.stardust.app.GlobalAppContext; +import com.stardust.autojs.core.util.ProcessShell; +import com.stardust.autojs.util.FloatingPermission; import com.stardust.notification.NotificationListenerService; +import com.stardust.theme.ThemeColorManager; +import com.stardust.util.ClipboardUtil; +import com.stardust.util.IntentUtil; +import com.stardust.view.accessibility.AccessibilityService; +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.ViewById; import org.autojs.autojs.Pref; import org.autojs.autojs.R; import org.autojs.autojs.external.foreground.ForegroundService; -import org.autojs.autojs.network.UserService; +import org.autojs.autojs.pluginclient.DevPluginService; +import org.autojs.autojs.tool.AccessibilityServiceTool; import org.autojs.autojs.tool.Observers; +import org.autojs.autojs.tool.RootTool; +import org.autojs.autojs.tool.WifiTool; import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.ui.common.NotAskAgainDialog; import org.autojs.autojs.ui.floating.CircularMenu; import org.autojs.autojs.ui.floating.FloatyWindowManger; -import org.autojs.autojs.network.NodeBB; -import org.autojs.autojs.network.VersionService; -import org.autojs.autojs.network.api.UserApi; -import org.autojs.autojs.network.entity.user.User; -import org.autojs.autojs.network.entity.VersionInfo; -import org.autojs.autojs.tool.SimpleObserver; -import org.autojs.autojs.ui.main.MainActivity; -import org.autojs.autojs.ui.main.community.CommunityFragment; -import org.autojs.autojs.ui.user.LoginActivity_; import org.autojs.autojs.ui.settings.SettingsActivity; -import org.autojs.autojs.ui.update.UpdateInfoDialogBuilder; -import org.autojs.autojs.ui.user.WebActivity; -import org.autojs.autojs.ui.user.WebActivity_; -import org.autojs.autojs.ui.widget.AvatarView; - -import com.stardust.theme.ThemeColorManager; - -import org.autojs.autojs.theme.ThemeColorManagerCompat; - -import com.stardust.view.accessibility.AccessibilityService; - -import org.autojs.autojs.pluginclient.DevPluginService; -import org.autojs.autojs.tool.AccessibilityServiceTool; -import org.autojs.autojs.tool.WifiTool; - -import com.stardust.util.IntentUtil; - -import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.Click; -import org.androidannotations.annotations.EFragment; -import org.androidannotations.annotations.ViewById; -import org.autojs.autojs.ui.widget.BackgroundTarget; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.Arrays; +import java.util.Objects; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -84,50 +60,37 @@ /** - * Created by Stardust on 2017/1/30. - * TODO these codes are so ugly!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * Created by Stardust on Jan 30, 2017. + * Modified by SuperMonster003 on Nov 16, 2021. */ +@SuppressLint("NonConstantResourceId") +@SuppressWarnings("ResultOfMethodCallIgnored") @EFragment(R.layout.fragment_drawer) public class DrawerFragment extends androidx.fragment.app.Fragment { private static final String URL_DEV_PLUGIN = "https://www.autojs.org/topic/968/"; + private static final String WRITE_SECURE_SETTINGS_PERMISSION = "android.permission.WRITE_SECURE_SETTINGS"; @ViewById(R.id.header) View mHeaderView; - @ViewById(R.id.username) - TextView mUserName; - @ViewById(R.id.avatar) - AvatarView mAvatar; - @ViewById(R.id.shadow) - View mShadow; - @ViewById(R.id.default_cover) - View mDefaultCover; @ViewById(R.id.drawer_menu) RecyclerView mDrawerMenu; + private final DrawerMenuItem mAccessibilityServiceItem = new DrawerMenuItem(R.drawable.ic_accessibility_black_48dp, R.string.text_accessibility_service, 0, this::enableOrDisableAccessibilityService); + private final DrawerMenuItem mForegroundServiceItem = new DrawerMenuItem(R.drawable.ic_service_green, R.string.text_foreground_service, R.string.key_foreground_service, this::toggleForegroundService); - private DrawerMenuItem mConnectionItem = new DrawerMenuItem(R.drawable.ic_connect_to_pc, R.string.debug, 0, this::connectOrDisconnectToRemote); - private DrawerMenuItem mAccessibilityServiceItem = new DrawerMenuItem(R.drawable.ic_service_green, R.string.text_accessibility_service, 0, this::enableOrDisableAccessibilityService); - private DrawerMenuItem mStableModeItem = new DrawerMenuItem(R.drawable.ic_stable, R.string.text_stable_mode, R.string.key_stable_mode, null) { - @Override - public void setChecked(boolean checked) { - super.setChecked(checked); - if (checked) - showStableModePromptIfNeeded(); - } - }; - - private DrawerMenuItem mNotificationPermissionItem = new DrawerMenuItem(R.drawable.ic_ali_notification, R.string.text_notification_permission, 0, this::goToNotificationServiceSettings); - private DrawerMenuItem mUsageStatsPermissionItem = new DrawerMenuItem(R.drawable.ic_ali_notification, R.string.text_usage_stats_permission, 0, this::goToUsageStatsSettings); - private DrawerMenuItem mForegroundServiceItem = new DrawerMenuItem(R.drawable.ic_service_green, R.string.text_foreground_service, R.string.key_foreground_servie, this::toggleForegroundService); + private final DrawerMenuItem mNotificationPermissionItem = new DrawerMenuItem(R.drawable.ic_ali_notification, R.string.text_notification_permission, 0, this::goToNotificationServiceSettings); + private final DrawerMenuItem mUsageStatsPermissionItem = new DrawerMenuItem(R.drawable.ic_assessment_black_48dp, R.string.text_usage_stats_permission, 0, this::goToUsageStatsSettings); + private final DrawerMenuItem mIgnoreBatteryOptimizationsItem = new DrawerMenuItem(R.drawable.ic_battery_std_black_48dp, R.string.text_ignore_battery_optimizations, 0, this::toggleIgnoreBatteryOptimizations); + private final DrawerMenuItem mDisplayOverOtherAppsItem = new DrawerMenuItem(R.drawable.ic_layers_black_48dp, R.string.text_display_over_other_app, 0, this::goToDisplayOverOtherAppsSettings); + private final DrawerMenuItem mWriteSystemSettingsItem = new DrawerMenuItem(R.drawable.ic_settings_black_48dp, R.string.text_write_system_settings, 0, this::goToWriteSystemSettings); + private final DrawerMenuItem mWriteSecuritySettingsItem = new DrawerMenuItem(R.drawable.ic_security_black_48dp, R.string.text_write_secure_settings, 0, this::toggleWriteSecureSettings); - private DrawerMenuItem mFloatingWindowItem = new DrawerMenuItem(R.drawable.ic_robot_64, R.string.text_floating_window, 0, this::showOrDismissFloatingWindow); - private DrawerMenuItem mCheckForUpdatesItem = new DrawerMenuItem(R.drawable.ic_check_for_updates, R.string.text_check_for_updates, this::checkForUpdates); + private final DrawerMenuItem mFloatingWindowItem = new DrawerMenuItem(R.drawable.ic_robot_64, R.string.text_floating_window, 0, this::showOrDismissFloatingWindow); + private final DrawerMenuItem mConnectionItem = new DrawerMenuItem(R.drawable.ic_computer_black_48dp, R.string.debug, 0, this::connectOrDisconnectToRemote); private DrawerMenuAdapter mDrawerMenuAdapter; private Disposable mConnectionStateDisposable; - private CommunityDrawerMenu mCommunityDrawerMenu = new CommunityDrawerMenu(); - @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -135,16 +98,13 @@ public void onCreate(@Nullable Bundle savedInstanceState) { mConnectionStateDisposable = DevPluginService.getInstance().connectionState() .observeOn(AndroidSchedulers.mainThread()) .subscribe(state -> { - if (mConnectionItem != null) { - setChecked(mConnectionItem, state.getState() == DevPluginService.State.CONNECTED); - setProgress(mConnectionItem, state.getState() == DevPluginService.State.CONNECTING); - } + setChecked(mConnectionItem, state.getState() == DevPluginService.State.CONNECTED); + setProgress(mConnectionItem, state.getState() == DevPluginService.State.CONNECTING); if (state.getException() != null) { showMessage(state.getException().getMessage()); } }); EventBus.getDefault().register(this); - } @AfterViews @@ -166,50 +126,29 @@ private void initMenuItems() { mDrawerMenuAdapter = new DrawerMenuAdapter(new ArrayList<>(Arrays.asList( new DrawerMenuGroup(R.string.text_service), mAccessibilityServiceItem, - mStableModeItem, - mNotificationPermissionItem, mForegroundServiceItem, + + new DrawerMenuGroup(R.string.text_permission), + mNotificationPermissionItem, mUsageStatsPermissionItem, + mIgnoreBatteryOptimizationsItem, + mDisplayOverOtherAppsItem, + mWriteSystemSettingsItem, + mWriteSecuritySettingsItem, - new DrawerMenuGroup(R.string.text_script_record), + new DrawerMenuGroup(R.string.text_tools), mFloatingWindowItem, - new DrawerMenuItem(R.drawable.ic_volume, R.string.text_volume_down_control, R.string.key_use_volume_control_record, null), - - new DrawerMenuGroup(R.string.text_others), mConnectionItem, - new DrawerMenuItem(R.drawable.ic_personalize, R.string.text_theme_color, this::openThemeColorSettings), + + new DrawerMenuGroup(R.string.text_appearance), new DrawerMenuItem(R.drawable.ic_night_mode, R.string.text_night_mode, R.string.key_night_mode, this::toggleNightMode), - mCheckForUpdatesItem + new DrawerMenuItem(R.drawable.ic_personalize, R.string.text_theme_color, this::openThemeColorSettings) ))); mDrawerMenu.setAdapter(mDrawerMenuAdapter); mDrawerMenu.setLayoutManager(new LinearLayoutManager(getContext())); } - @SuppressLint("CheckResult") - @Click(R.id.avatar) - void loginOrShowUserInfo() { - UserService.getInstance() - .me() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(user -> { - if (getActivity() == null) - return; - WebActivity_.intent(this) - .extra(WebActivity.EXTRA_URL, NodeBB.url("user/" + user.getUserslug())) - .extra(Intent.EXTRA_TITLE, user.getUsername()) - .start(); - }, - error -> { - if (getActivity() == null) - return; - LoginActivity_.intent(getActivity()).start(); - } - ); - } - - void enableOrDisableAccessibilityService(DrawerMenuItemViewHolder holder) { boolean isAccessibilityServiceEnabled = isAccessibilityServiceEnabled(); boolean checked = holder.getSwitchCompat().isChecked(); @@ -223,9 +162,6 @@ void enableOrDisableAccessibilityService(DrawerMenuItemViewHolder holder) { } void goToNotificationServiceSettings(DrawerMenuItemViewHolder holder) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) { - return; - } boolean enabled = NotificationListenerService.Companion.getInstance() != null; boolean checked = holder.getSwitchCompat().isChecked(); if ((checked && !enabled) || (!checked && enabled)) { @@ -234,23 +170,30 @@ void goToNotificationServiceSettings(DrawerMenuItemViewHolder holder) { } void goToUsageStatsSettings(DrawerMenuItemViewHolder holder) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - return; + Context context = getContext(); + boolean enabled = false; + if (context != null) { + enabled = AppOpsKt.isUsageStatsPermissionGranted(context); } - boolean enabled = AppOpsKt.isOpPermissionGranted(getContext(), AppOpsManager.OPSTR_GET_USAGE_STATS); boolean checked = holder.getSwitchCompat().isChecked(); - if(checked && !enabled){ - if(new NotAskAgainDialog.Builder(getContext(), "DrawerFragment.usage_stats") + if (checked && !enabled) { + if (new NotAskAgainDialog.Builder(context, "DrawerFragment.usage_stats") .title(R.string.text_usage_stats_permission) .content(R.string.description_usage_stats_permission) .positiveText(R.string.ok) - .dismissListener(dialog -> IntentUtil.requestAppUsagePermission(getContext())) - .show() == null){ - IntentUtil.requestAppUsagePermission(getContext()); + .dismissListener(dialog -> { + if (context != null) { + IntentUtil.requestAppUsagePermission(context); + } + }) + .show() == null) { + if (context != null) { + IntentUtil.requestAppUsagePermission(context); + } } } if (!checked && enabled) { - IntentUtil.requestAppUsagePermission(getContext()); + IntentUtil.requestAppUsagePermission(context); } } @@ -268,12 +211,161 @@ void showOrDismissFloatingWindow(DrawerMenuItemViewHolder holder) { } } + @SuppressLint("BatteryLife") + void toggleIgnoreBatteryOptimizations(DrawerMenuItemViewHolder holder) { + Context context = getContext(); + try { + Intent intent = new Intent(); + boolean isIgnoring = false; + if (context != null) { + isIgnoring = ((PowerManager) context.getSystemService(POWER_SERVICE)) + .isIgnoringBatteryOptimizations(context.getPackageName()); + } + if (isIgnoring) { + intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); + } else { + if (context != null) { + intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) + .setData(Uri.parse("package:" + context.getPackageName())); + } + } + startActivity(intent); + } catch (ActivityNotFoundException e) { + e.printStackTrace(); + Toast.makeText(context, R.string.text_failed, Toast.LENGTH_LONG).show(); + } + } + void openThemeColorSettings(DrawerMenuItemViewHolder holder) { SettingsActivity.selectThemeColor(getActivity()); } void toggleNightMode(DrawerMenuItemViewHolder holder) { - ((BaseActivity) getActivity()).setNightModeEnabled(holder.getSwitchCompat().isChecked()); + ((BaseActivity) requireActivity()).setNightModeEnabled(holder.getSwitchCompat().isChecked()); + } + + void goToDisplayOverOtherAppsSettings(DrawerMenuItemViewHolder holder) { + boolean checked = holder.getSwitchCompat().isChecked(); + Context context = getContext(); + if (checked != FloatingPermission.canDrawOverlays(context)) { + FloatingPermission.manageDrawOverlays(context); + } + } + + void goToWriteSystemSettings(DrawerMenuItemViewHolder holder) { + boolean checked = holder.getSwitchCompat().isChecked(); + if (checked != Settings.System.canWrite(getContext())) { + Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS) + .setData(Uri.parse("package:" + requireContext().getPackageName())) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + } + + private void toggleWriteSecureSettings(DrawerMenuItemViewHolder holder) { + if (holder.getSwitchCompat().isChecked() && !hasWriteSecureSettingsAccess()) { + grantWriteSecureSettingsAccess(); + } else if (!holder.getSwitchCompat().isChecked() && hasWriteSecureSettingsAccess()) { + revokeWriteSecureSettingsAccess(); + } + } + + private boolean hasWriteSecureSettingsAccess() { + Context context = getContext(); + if (context != null) { + int checkVal = context.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS_PERMISSION); + return checkVal == PackageManager.PERMISSION_GRANTED; + } + return false; + } + + @SuppressLint("CheckResult") + private void grantWriteSecureSettingsAccess() { + Observable.fromCallable(RootTool::isRootAvailable) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(hasRoot -> { + if (hasRoot) { + setWriteSecureSettingsAccessByRoot(true); + } else { + setWriteSecureSettingsAccessByAdb(true); + } + }); + } + + @SuppressLint("CheckResult") + private void revokeWriteSecureSettingsAccess() { + Observable.fromCallable(RootTool::isRootAvailable) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(hasRoot -> { + if (hasRoot) { + setWriteSecureSettingsAccessByRoot(false); + } else { + setWriteSecureSettingsAccessByAdb(false); + } + }); + } + + private void setWriteSecureSettingsAccessByRoot(boolean state) { + Context context = getContext(); + if (context == null) { + return; + } + String cmdAction = state ? "grant" : "revoke"; + String cmd = "pm " + cmdAction + " " + context.getPackageName() + " " + WRITE_SECURE_SETTINGS_PERMISSION; + try { + ProcessShell.execCommand(cmd, true); + if (state == hasWriteSecureSettingsAccess()) { + int successRes = state ? R.string.text_permission_granted_by_root : R.string.text_permission_revoked_by_root; + Toast.makeText(context, successRes, Toast.LENGTH_SHORT).show(); + return; + } + } catch (Exception ignore) { + // nothing to do here + } + int successRes = state ? R.string.text_permission_granted_failed_by_root : R.string.text_permission_revoked_failed_by_root; + Toast.makeText(context, successRes, Toast.LENGTH_LONG).show(); + } + + private void setWriteSecureSettingsAccessByAdb(boolean state) { + Context context = getContext(); + if (context == null) { + return; + } + final int SNACKBAR_DURATION = 1000; + String scriptAction = state ? "grant" : "revoke"; + String script = "adb shell pm " + scriptAction + " " + context.getPackageName() + " " + WRITE_SECURE_SETTINGS_PERMISSION; + + new MaterialDialog.Builder(context) + .title(R.string.text_adb_tool_needed) + .content(script) + .neutralText(R.string.text_permission_test) + .onNeutral((dialog, which) -> { + View view = dialog.getView(); + int resultRes = hasWriteSecureSettingsAccess() ? R.string.text_granted : R.string.text_not_granted; + if (view != null) { + Snackbar.make(view, resultRes, SNACKBAR_DURATION).show(); + } else { + Toast.makeText(context, resultRes, Toast.LENGTH_SHORT).show(); + } + }) + .negativeText(R.string.text_back) + .onNegative((dialog, which) -> dialog.dismiss()) + .positiveText(R.string.text_copy_command) + .onPositive((dialog, which) -> { + ClipboardUtil.setClip(context, script); + View view = dialog.getView(); + int textRes = R.string.text_command_already_copied_to_clip; + if (view != null) { + Snackbar.make(view, textRes, SNACKBAR_DURATION).show(); + } else { + Toast.makeText(context, textRes, Toast.LENGTH_SHORT).show(); + } + }) + .cancelable(false) + .autoDismiss(false) + .dismissListener(dialog -> setChecked(mWriteSecuritySettingsItem, hasWriteSecureSettingsAccess())) + .show(); + } @SuppressLint("CheckResult") @@ -309,9 +401,11 @@ private void toggleForegroundService(DrawerMenuItemViewHolder holder) { } + @SuppressLint("CheckResult") private void inputRemoteHost() { - String host = Pref.getServerAddressOrDefault(WifiTool.getRouterIp(getActivity())); - new MaterialDialog.Builder(getActivity()) + Context activity = getActivity(); + String host = Pref.getServerAddressOrDefault(WifiTool.getRouterIp(Objects.requireNonNull(activity))); + new MaterialDialog.Builder(activity) .title(R.string.text_server_address) .input("", host, (dialog, input) -> { Pref.saveServerAddress(input.toString()); @@ -321,7 +415,7 @@ private void inputRemoteHost() { .neutralText(R.string.text_help) .onNeutral((dialog, which) -> { setChecked(mConnectionItem, false); - IntentUtil.browse(getActivity(), URL_DEV_PLUGIN); + IntentUtil.browse(activity, URL_DEV_PLUGIN); }) .cancelListener(dialog -> setChecked(mConnectionItem, false)) .show(); @@ -333,94 +427,33 @@ private void onConnectException(Throwable e) { Toast.LENGTH_LONG).show(); } - void checkForUpdates(DrawerMenuItemViewHolder holder) { - setProgress(mCheckForUpdatesItem, true); - VersionService.getInstance().checkForUpdates() - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SimpleObserver() { - - @Override - public void onNext(@io.reactivex.annotations.NonNull VersionInfo versionInfo) { - if (getActivity() == null) - return; - if (versionInfo.isNewer()) { - new UpdateInfoDialogBuilder(getActivity(), versionInfo) - .show(); - } else { - Toast.makeText(GlobalAppContext.get(), R.string.text_is_latest_version, Toast.LENGTH_SHORT).show(); - } - setProgress(mCheckForUpdatesItem, false); - } - - @Override - public void onError(@io.reactivex.annotations.NonNull Throwable e) { - e.printStackTrace(); - Toast.makeText(GlobalAppContext.get(), R.string.text_check_update_error, Toast.LENGTH_SHORT).show(); - setProgress(mCheckForUpdatesItem, false); - } - }); - } - - @Override public void onResume() { super.onResume(); syncSwitchState(); - syncUserInfo(); } - private void syncUserInfo() { - NodeBB.getInstance().getRetrofit() - .create(UserApi.class) - .me() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(this::setUpUserInfo, error -> { - error.printStackTrace(); - setUpUserInfo(null); - }); - } + private void syncSwitchState() { + Context context = getContext(); - private void setUpUserInfo(@Nullable User user) { - if (mUserName == null || mAvatar == null) - return; - if (user == null) { - mUserName.setText(R.string.not_login); - mAvatar.setIcon(R.drawable.profile_avatar_placeholder); - } else { - mUserName.setText(user.getUsername()); - mAvatar.setUser(user); + if (context != null) { + setChecked(mUsageStatsPermissionItem, AppOpsKt.isUsageStatsPermissionGranted(context)); } - setCoverImage(user); - } - private void setCoverImage(User user) { - if (mDefaultCover == null || mShadow == null || mHeaderView == null) - return; - if (user == null || TextUtils.isEmpty(user.getCoverUrl()) || user.getCoverUrl().equals("/assets/images/cover-default.png")) { - mDefaultCover.setVisibility(View.VISIBLE); - mShadow.setVisibility(View.GONE); - mHeaderView.setBackgroundColor(ThemeColorManagerCompat.getColorPrimary()); - } else { - mDefaultCover.setVisibility(View.GONE); - mShadow.setVisibility(View.VISIBLE); - Glide.with(this) - .load(NodeBB.BASE_URL + user.getCoverUrl()) - .apply(new RequestOptions() - .diskCacheStrategy(DiskCacheStrategy.NONE) - ) - .into(new BackgroundTarget(mHeaderView)); + if (mFloatingWindowItem.isChecked() && !FloatingPermission.canDrawOverlays(context)) { + setChecked(mFloatingWindowItem, false); } - } - private void syncSwitchState() { - setChecked(mAccessibilityServiceItem, AccessibilityServiceTool.isAccessibilityServiceEnabled(getActivity())); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - setChecked(mNotificationPermissionItem, NotificationListenerService.Companion.getInstance() != null); - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - setChecked(mUsageStatsPermissionItem, AppOpsKt.isOpPermissionGranted(getContext(), AppOpsManager.OPSTR_GET_USAGE_STATS)); + if (context != null) { + setChecked(mIgnoreBatteryOptimizationsItem, ((PowerManager) context.getSystemService(POWER_SERVICE)) + .isIgnoringBatteryOptimizations(context.getPackageName())); } + + setChecked(mAccessibilityServiceItem, AccessibilityServiceTool.isAccessibilityServiceEnabled(getActivity())); + setChecked(mNotificationPermissionItem, NotificationListenerService.Companion.getInstance() != null); + setChecked(mDisplayOverOtherAppsItem, FloatingPermission.canDrawOverlays(context)); + setChecked(mWriteSystemSettingsItem, Settings.System.canWrite(getContext())); + setChecked(mWriteSecuritySettingsItem, hasWriteSecureSettingsAccess()); } private void enableAccessibilityService() { @@ -431,6 +464,7 @@ private void enableAccessibilityService() { enableAccessibilityServiceByRoot(); } + @SuppressLint("CheckResult") private void enableAccessibilityServiceByRoot() { setProgress(mAccessibilityServiceItem, true); Observable.fromCallable(() -> AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(4000)) @@ -438,7 +472,7 @@ private void enableAccessibilityServiceByRoot() { .observeOn(AndroidSchedulers.mainThread()) .subscribe(succeed -> { if (!succeed) { - Toast.makeText(getContext(), R.string.text_enable_accessibitliy_service_by_root_failed, Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), R.string.text_enable_accessibility_service_by_root_failed, Toast.LENGTH_SHORT).show(); AccessibilityServiceTool.goToAccessibilitySetting(); } setProgress(mAccessibilityServiceItem, false); @@ -451,41 +485,6 @@ public void onCircularMenuStateChange(CircularMenu.StateChangeEvent event) { setChecked(mFloatingWindowItem, event.getCurrentState() != CircularMenu.STATE_CLOSED); } - @Subscribe - public void onCommunityPageVisibilityChange(CommunityFragment.VisibilityChange change) { - if (change.visible) { - mCommunityDrawerMenu.showCommunityMenu(mDrawerMenuAdapter); - } else { - mCommunityDrawerMenu.hideCommunityMenu(mDrawerMenuAdapter); - } - mDrawerMenu.scrollToPosition(0); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onLoginStateChange(UserService.LoginStateChange change) { - syncUserInfo(); - if (mCommunityDrawerMenu.isShown()) { - mCommunityDrawerMenu.setUserOnlineStatus(mDrawerMenuAdapter, change.isOnline()); - } - } - - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onDrawerOpen(MainActivity.DrawerOpenEvent event) { - if (mCommunityDrawerMenu.isShown()) { - mCommunityDrawerMenu.refreshNotificationCount(mDrawerMenuAdapter); - } - } - - private void showStableModePromptIfNeeded() { - new NotAskAgainDialog.Builder(getContext(), "DrawerFragment.stable_mode") - .title(R.string.text_stable_mode) - .content(R.string.description_stable_mode) - .positiveText(R.string.ok) - .show(); - } - - @Override public void onDestroy() { super.onDestroy(); @@ -514,5 +513,4 @@ private void setChecked(DrawerMenuItem item, boolean checked) { private boolean isAccessibilityServiceEnabled() { return AccessibilityServiceTool.isAccessibilityServiceEnabled(getActivity()); } - } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuGroupViewHolder.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuGroupViewHolder.java index 2a0c4df9b..5cd73fd1a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuGroupViewHolder.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuGroupViewHolder.java @@ -23,7 +23,7 @@ public DrawerMenuGroupViewHolder(View itemView) { @Override public void bind(DrawerMenuItem data, int position) { mTextView.setText(data.getTitle()); - int padding = itemView.getResources().getDimensionPixelOffset(R.dimen.divider_drawer_menu_group); + int padding = (int) (itemView.getResources().getDimensionPixelOffset(R.dimen.divider_drawer_menu_group) / 3); itemView.setPadding(0, position == 0 ? 0 : padding, 0, 0); } } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java index 05fc5b641..4b91932bf 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java @@ -69,7 +69,6 @@ public boolean isChecked() { return mSwitchChecked; } - public boolean isProgress() { return mOnProgress; } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java index 3c0146552..eae6c1d80 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java @@ -25,7 +25,7 @@ public class DrawerMenuItemViewHolder extends BindableViewHolder { - private static final long CLICK_TIMEOUT = 1000; + private static final long CLICK_TIMEOUT = 540; @BindView(R.id.sw) PrefSwitch mSwitchCompat; @@ -96,7 +96,7 @@ private void setSwitch(DrawerMenuItem item) { private void onClick() { mDrawerMenuItem.setChecked(mSwitchCompat.isChecked()); if (mAntiShake && (System.currentTimeMillis() - mLastClickMillis < CLICK_TIMEOUT)) { - Toast.makeText(itemView.getContext(), R.string.text_click_too_frequently, Toast.LENGTH_SHORT).show(); + // Toast.makeText(itemView.getContext(), R.string.text_click_too_frequently, Toast.LENGTH_SHORT).show(); mSwitchCompat.setChecked(!mSwitchCompat.isChecked(), false); return; } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/market/ImageText.kt b/app/src/main/java/org/autojs/autojs/ui/main/market/ImageText.kt deleted file mode 100644 index 62ee83fe5..000000000 --- a/app/src/main/java/org/autojs/autojs/ui/main/market/ImageText.kt +++ /dev/null @@ -1,58 +0,0 @@ -package org.autojs.autojs.ui.main.market - -import android.content.Context -import android.util.AttributeSet -import android.view.Gravity -import android.view.View -import android.widget.LinearLayout -import kotlinx.android.synthetic.main.image_text.view.* -import org.autojs.autojs.R - -class ImageText : LinearLayout { - - var text: CharSequence? - get() = textView.text - set(value) { - textView.text = value - } - - constructor(context: Context?) : super(context) { - init(null) - } - - constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { - init(attrs) - } - - constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { - init(attrs) - } - - private fun init(attrs: AttributeSet?) { - View.inflate(context, R.layout.image_text, this) - gravity = Gravity.CENTER - orientation = HORIZONTAL - if (attrs == null) { - return - } - val a = context.obtainStyledAttributes(attrs, R.styleable.ImageText) - a.getString(R.styleable.ImageText_text)?.let { - textView.text = it - } - val iconResId = a.getResourceId(R.styleable.ImageText_src, 0) - if (iconResId != 0) { - imageView.setImageResource(iconResId) - } - val imageWidth = a.getDimensionPixelSize(R.styleable.ImageText_image_width, 0) - if (imageWidth != 0) { - imageView.layoutParams.width = imageWidth - } - a.recycle() - } - - fun setColor(color: Int) { - textView.setTextColor(color) - imageView.setColorFilter(color) - } - -} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/main/market/MarketFragment.kt b/app/src/main/java/org/autojs/autojs/ui/main/market/MarketFragment.kt deleted file mode 100644 index 7a5c820de..000000000 --- a/app/src/main/java/org/autojs/autojs/ui/main/market/MarketFragment.kt +++ /dev/null @@ -1,170 +0,0 @@ -package org.autojs.autojs.ui.main.market - -import android.app.Activity -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.core.content.ContextCompat -import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.stardust.autojs.workground.WrapContentLinearLayoutManager -import kotlinx.android.synthetic.main.fragment_market.* -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import org.autojs.autojs.R -import org.autojs.autojs.network.TopicService -import org.autojs.autojs.network.entity.topic.AppInfo -import org.autojs.autojs.network.entity.topic.Post -import org.autojs.autojs.network.entity.topic.Topic -import org.autojs.autojs.ui.main.ViewPagerFragment -import org.autojs.autojs.ui.widget.AvatarView -import org.joda.time.format.DateTimeFormat - -class MarketFragment : ViewPagerFragment(0) { - - private val mTopics = ArrayList() - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_market, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - topicsView.layoutManager = WrapContentLinearLayoutManager(context) - topicsView.adapter = Adapter() - swipeRefreshLayout.setOnRefreshListener { - refresh() - } - refresh() - } - - private fun refresh() { - GlobalScope.launch(Dispatchers.Main) { - swipeRefreshLayout.isRefreshing = true - try { - val topics = TopicService.getScriptsTopics() - mTopics.clear() - mTopics.addAll(topics) - topicsView.adapter!!.notifyDataSetChanged() - swipeRefreshLayout.isRefreshing = false - } catch (e: Exception) { - e.printStackTrace() - } - } - } - - override fun onBackPressed(activity: Activity): Boolean { - return false - } - - override fun onFabClick(fab: FloatingActionButton) { - - } - - inner class TopicViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - - private lateinit var topic: Topic - - private val rootView: TextView = itemView.findViewById(R.id.root) - private val titleView: TextView = itemView.findViewById(R.id.title) - private val avatarView: AvatarView = itemView.findViewById(R.id.avatar) - private val usernameView: TextView = itemView.findViewById(R.id.username) - private val dateView: TextView = itemView.findViewById(R.id.date) - private val upvoteView: ImageText = itemView.findViewById(R.id.upvote) - private val downvoteView: ImageText = itemView.findViewById(R.id.downvote) - private val downloadView: ImageText = itemView.findViewById(R.id.download) - private val starView: ImageText = itemView.findViewById(R.id.star) - - init { - upvoteView.setOnClickListener { - - } - downvoteView.setOnClickListener { - - } - starView.setOnClickListener { - - } - downloadView.setOnClickListener { - - } - } - - fun bind(topic: Topic) { - this.topic = topic - rootView.setText(if (topic.appInfo.permissions.contains(AppInfo.PERMISSION_ROOT)) { - R.string.text_root - } else { - R.string.text_no_root - }) - titleView.text = topic.title - avatarView.setUser(topic.user) - usernameView.text = topic.user.username - dateView.text = DateTimeFormat.mediumDateTime().print(topic.timestamp.toLong()) - if (topic.mainPost != null) { - bindMainPost(topic.mainPost) - } else { - fetchMainPost(topic) - } - } - - private fun fetchMainPost(topic: Topic) { - GlobalScope.launch(Dispatchers.Main) { - try { - val mainPost = TopicService.getMainPost(topic) - if (topic === this@TopicViewHolder.topic) { - bindMainPost(mainPost) - } - } catch (e: Exception) { - e.printStackTrace() - } - } - } - - private fun bindMainPost(mainPost: Post) { - context?.let { context -> - upvoteView.text = if (mainPost.upvotes == 0L) { - context.getString(R.string.text_upvote) - } else { - mainPost.upvotes.toString() - } - upvoteView.setColor(if (mainPost.upvoted) { - ContextCompat.getColor(context, R.color.market_button_selected) - } else { - ContextCompat.getColor(context, R.color.market_button_unselected) - }) - downvoteView.text = if (mainPost.downvotes == 0L) { - context.getString(R.string.text_downvote) - } else { - mainPost.downvotes.toString() - } - downvoteView.setColor(if (mainPost.downvoted) { - ContextCompat.getColor(context, R.color.market_button_selected) - } else { - ContextCompat.getColor(context, R.color.market_button_unselected) - }) - } - - } - - } - - inner class Adapter : RecyclerView.Adapter() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TopicViewHolder { - return TopicViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_topic, parent, false)) - } - - override fun getItemCount(): Int { - return mTopics.size - } - - override fun onBindViewHolder(holder: TopicViewHolder, position: Int) { - val topic = mTopics[position] - holder.bind(topic) - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java index 3ec2a9dc2..7d3de1e0b 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java @@ -2,7 +2,7 @@ import android.app.Activity; import android.os.Bundle; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import androidx.annotation.Nullable; import com.google.android.material.floatingactionbutton.FloatingActionButton; diff --git a/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java b/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java index 928583d37..002a6ebed 100644 --- a/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java @@ -43,7 +43,6 @@ import java.util.concurrent.Callable; import java.util.regex.Pattern; -import androidx.cardview.widget.CardView; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -109,41 +108,34 @@ void setupViews() { } private void checkApkBuilderPlugin() { - if (!ApkBuilderPluginHelper.isPluginAvailable(this)) { - showPluginDownloadDialog(R.string.no_apk_builder_plugin, true); - return; - } - int version = ApkBuilderPluginHelper.getPluginVersion(this); - if (version < 0) { - showPluginDownloadDialog(R.string.no_apk_builder_plugin, true); - return; - } - if (version < ApkBuilderPluginHelper.getSuitablePluginVersion()) { - showPluginDownloadDialog(R.string.apk_builder_plugin_version_too_low, false); + if (!ApkBuilderPluginHelper.isPluginAvailable(this) || ApkBuilderPluginHelper.getPluginVersion(this) < 0) { + showPluginDownloadDialog(R.string.no_apk_builder_plugin); } } - private void showPluginDownloadDialog(int msgRes, boolean finishIfCanceled) { + private void showPluginDownloadDialog(int msgRes) { new ThemeColorMaterialDialogBuilder(this) .content(msgRes) .positiveText(R.string.ok) .negativeText(R.string.cancel) .onPositive((dialog, which) -> downloadPlugin()) - .onNegative((dialog, which) -> { - if (finishIfCanceled) finish(); - }) + .onNegative((dialog, which) -> finish()) .show(); } private void downloadPlugin() { - IntentUtil.browse(this, String.format(Locale.getDefault(), - "https://i.autojs.org/autojs/plugin/%d.apk", ApkBuilderPluginHelper.getSuitablePluginVersion())); + IntentUtil.browse(this, "https://github.com/" + + "SuperMonster002/Hello-Sockpuppet/raw/master/" + + "%5B" + "auto.js" + "%5D" + + "%5B" + "apk_builder_plugin_4.1.1_alpha2" + "%5D" + + "%5B" + "arm-v7a" + "%5D" + + "%5B" + "9b150ec3" + "%5D" + ".apk"); } private void setupWithSourceFile(ScriptFile file) { String dir = file.getParent(); - if (dir.startsWith(getFilesDir().getPath())) { + if (dir != null && dir.startsWith(getFilesDir().getPath())) { dir = Pref.getScriptDirPath(); } mOutputPath.setText(dir); @@ -348,20 +340,19 @@ public void onClean(ApkBuilder builder) { mProgressDialog.setContent(R.string.apk_builder_clean); } - @SuppressLint("CheckResult") + @SuppressLint({"CheckResult", "MissingSuperCall"}) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode != RESULT_OK) { - return; + if (resultCode == RESULT_OK) { + //noinspection ResultOfMethodCallIgnored + ShortcutIconSelectActivity.getBitmapFromIntent(getApplicationContext(), data) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(bitmap -> { + mIcon.setImageBitmap(bitmap); + mIsDefaultIcon = false; + }, Throwable::printStackTrace); } - ShortcutIconSelectActivity.getBitmapFromIntent(getApplicationContext(), data) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(bitmap -> { - mIcon.setImageBitmap(bitmap); - mIsDefaultIcon = false; - }, Throwable::printStackTrace); - } } diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/AboutActivity.java b/app/src/main/java/org/autojs/autojs/ui/settings/AboutActivity.java index b2ec5307d..0e94bd3f1 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/AboutActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/settings/AboutActivity.java @@ -4,50 +4,52 @@ import android.widget.TextView; import android.widget.Toast; -import com.afollestad.materialdialogs.MaterialDialog; -import org.autojs.autojs.tool.IntentTool; -import org.autojs.autojs.ui.BaseActivity; -import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder; import com.stardust.util.IntentUtil; -import com.tencent.bugly.crashreport.CrashReport; - -import org.autojs.autojs.BuildConfig; -import org.autojs.autojs.R; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; +import org.autojs.autojs.BuildConfig; +import org.autojs.autojs.R; +import org.autojs.autojs.tool.IntentTool; +import org.autojs.autojs.ui.BaseActivity; /** * Created by Stardust on 2017/2/2. */ @EActivity(R.layout.activity_about) public class AboutActivity extends BaseActivity { - - private static final String TAG = "AboutActivity"; @ViewById(R.id.version) TextView mVersion; - private int mLolClickCount = 0; - + @ViewById(R.id.since) + TextView mSince; @AfterViews void setUpViews() { setVersionName(); + setSinceDate(); setToolbarAsBack(getString(R.string.text_about)); } @SuppressLint("SetTextI18n") private void setVersionName() { - mVersion.setText("Version " + BuildConfig.VERSION_NAME); + mVersion.setText(BuildConfig.VERSION_NAME); } + @SuppressLint("SetTextI18n") + private void setSinceDate() { + mSince.setText(BuildConfig.APP_SINCE_DATE); + } + + @SuppressLint("NonConstantResourceId") @Click(R.id.github) void openGitHub() { IntentTool.browse(this, getString(R.string.my_github)); } + @SuppressLint("NonConstantResourceId") @Click(R.id.qq) void openQQToChatWithMe() { String qq = getString(R.string.qq); @@ -56,6 +58,7 @@ void openQQToChatWithMe() { } } + @SuppressLint("NonConstantResourceId") @Click(R.id.email) void openEmailToSendMe() { String email = getString(R.string.email); @@ -63,40 +66,15 @@ void openEmailToSendMe() { } + @SuppressLint("NonConstantResourceId") @Click(R.id.share) void share() { IntentUtil.shareText(this, getString(R.string.share_app)); } - @Click(R.id.icon) - void lol() { - mLolClickCount++; - //Toast.makeText(this, R.string.text_lll, Toast.LENGTH_LONG).show(); - if (mLolClickCount >= 5) { - crashTest(); - //showEasterEgg(); - } - } - - private void showEasterEgg() { - new MaterialDialog.Builder(this) - .customView(R.layout.paint_layout, false) - .show(); - } - - private void crashTest() { - new ThemeColorMaterialDialogBuilder(this) - .title("Crash Test") - .positiveText("Crash") - .onPositive((dialog, which) -> { - CrashReport.testJavaCrash(); - }).show(); - } - + @SuppressLint("NonConstantResourceId") @Click(R.id.developer) void hhh() { Toast.makeText(this, R.string.text_it_is_the_developer_of_app, Toast.LENGTH_LONG).show(); } - - } diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java b/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java index 177805def..fab7d2309 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/settings/SettingsActivity.java @@ -1,13 +1,15 @@ package org.autojs.autojs.ui.settings; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceScreen; -import androidx.core.util.Pair; + import androidx.appcompat.widget.Toolbar; -import android.view.View; +import androidx.core.content.ContextCompat; +import androidx.core.util.Pair; import com.stardust.theme.app.ColorSelectActivity; import com.stardust.theme.preference.ThemeColorPreferenceFragment; @@ -19,11 +21,11 @@ import org.autojs.autojs.R; import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.ui.error.IssueReporterActivity; -import org.autojs.autojs.ui.update.UpdateCheckDialog; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import de.psdev.licensesdialog.LicenseResolver; import de.psdev.licensesdialog.LicensesDialog; @@ -32,6 +34,7 @@ /** * Created by Stardust on 2017/2/2. */ +@SuppressLint("NonConstantResourceId") @EActivity(R.layout.activity_settings) public class SettingsActivity extends BaseActivity { @@ -55,13 +58,13 @@ public class SettingsActivity extends BaseActivity { .add(new Pair<>(R.color.theme_color_brown, R.string.theme_color_brown)) .add(new Pair<>(R.color.theme_color_gray, R.string.theme_color_gray)) .add(new Pair<>(R.color.theme_color_blue_gray, R.string.theme_color_blue_gray)) + .add(new Pair<>(R.color.theme_color_default, R.string.theme_color_default)) .list(); public static void selectThemeColor(Context context) { List colorItems = new ArrayList<>(COLOR_ITEMS.size()); for (Pair item : COLOR_ITEMS) { - colorItems.add(new ColorSelectActivity.ColorItem(context.getString(item.second), - context.getResources().getColor(item.first))); + colorItems.add(new ColorSelectActivity.ColorItem(context.getString(item.second), ContextCompat.getColor(context, item.first))); } ColorSelectActivity.startColorSelect(context, context.getString(R.string.mt_color_picker_title), colorItems); } @@ -76,21 +79,14 @@ private void setUpToolbar() { Toolbar toolbar = $(R.id.toolbar); toolbar.setTitle(R.string.text_setting); setSupportActionBar(toolbar); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - toolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); + Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); + toolbar.setNavigationOnClickListener(v -> finish()); } public static class PreferenceFragment extends ThemeColorPreferenceFragment { - private Map ACTION_MAP; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -102,15 +98,12 @@ public void onStart() { super.onStart(); ACTION_MAP = new MapBuilder() .put(getString(R.string.text_theme_color), () -> selectThemeColor(getActivity())) - .put(getString(R.string.text_check_for_updates), () -> new UpdateCheckDialog(getActivity()) - .show()) .put(getString(R.string.text_issue_report), () -> startActivity(new Intent(getActivity(), IssueReporterActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))) .put(getString(R.string.text_about_me_and_repo), () -> startActivity(new Intent(getActivity(), AboutActivity_.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))) - .put(getString(R.string.text_licenses), () -> showLicenseDialog()) + .put(getString(R.string.text_licenses), this::showLicenseDialog) .build(); } - @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { Runnable action = ACTION_MAP.get(preference.getTitle().toString()); if (action != null) { @@ -127,7 +120,7 @@ private void showLicenseDialog() { .setNotices(R.raw.licenses) .setIncludeOwnLicense(true) .build() - .showAppCompat(); + .show(); } public static class MozillaPublicLicense20 extends License { diff --git a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java index 35bdb4ae8..2e5e01e6a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java @@ -72,12 +72,11 @@ public class TimedTaskSettingActivity extends BaseActivity { public static final String EXTRA_TASK_ID = TaskReceiver.EXTRA_TASK_ID; private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormat.forPattern("HH:mm"); - private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yy-MM-dd"); + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd"); private static final int REQUEST_CODE_IGNORE_BATTERY = 27101; private static final String LOG_TAG = "TimedTaskSettings"; - public static final Map ACTION_DESC_MAP = new MapBuilder() .put(DynamicBroadcastReceivers.ACTION_STARTUP, R.string.text_run_on_startup) .put(Intent.ACTION_BOOT_COMPLETED, R.string.text_run_on_boot) @@ -296,10 +295,13 @@ void showDisposableTaskTimePicker() { @Click(R.id.disposable_task_date_container) void showDisposableTaskDatePicker() { LocalDate date = DATE_FORMATTER.parseLocalDate(mDisposableTaskDate.getText().toString()); - new DatePickerDialog(this, (view, year, month, dayOfMonth) -> - mDisposableTaskDate.setText(DATE_FORMATTER.print(new LocalDate(year, month, dayOfMonth))) - , date.getYear(), date.getMonthOfYear() - 1, date.getDayOfMonth()) - .show(); + new DatePickerDialog( + this, + (view, year, month, dayOfMonth) -> mDisposableTaskDate.setText(DATE_FORMATTER.print(new LocalDate(year, month + 1, dayOfMonth))), + date.getYear(), + date.getMonthOfYear() - 1, + date.getDayOfMonth() + ).show(); } TimedTask createTimedTask() { diff --git a/app/src/main/java/org/autojs/autojs/ui/update/UpdateCheckDialog.java b/app/src/main/java/org/autojs/autojs/ui/update/UpdateCheckDialog.java deleted file mode 100644 index 85951aef3..000000000 --- a/app/src/main/java/org/autojs/autojs/ui/update/UpdateCheckDialog.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.autojs.autojs.ui.update; - -import android.content.Context; -import android.widget.Toast; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.stardust.app.GlobalAppContext; -import org.autojs.autojs.App; -import org.autojs.autojs.R; -import org.autojs.autojs.network.VersionService; -import org.autojs.autojs.network.entity.VersionInfo; -import org.autojs.autojs.tool.SimpleObserver; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.annotations.NonNull; - -/** - * Created by Stardust on 2017/9/20. - */ - -public class UpdateCheckDialog { - - private MaterialDialog mProgress; - private Context mContext; - - public UpdateCheckDialog(Context context) { - mProgress = new MaterialDialog.Builder(context) - .progress(true, 0) - .content(R.string.text_checking_update) - .build(); - } - - public void show() { - mProgress.show(); - VersionService.getInstance() - .checkForUpdates() - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SimpleObserver() { - @Override - public void onNext(@NonNull VersionInfo versionInfo) { - mProgress.dismiss(); - if (versionInfo.isNewer()) { - new UpdateInfoDialogBuilder(mContext, versionInfo) - .show(); - } else { - Toast.makeText(GlobalAppContext.get(), R.string.text_is_latest_version, Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onError(@NonNull Throwable e) { - e.printStackTrace(); - mProgress.dismiss(); - Toast.makeText(GlobalAppContext.get(), R.string.text_check_update_error, Toast.LENGTH_SHORT).show(); - } - }); - } -} diff --git a/app/src/main/java/org/autojs/autojs/ui/update/UpdateInfoDialogBuilder.java b/app/src/main/java/org/autojs/autojs/ui/update/UpdateInfoDialogBuilder.java deleted file mode 100644 index 8fa166fe8..000000000 --- a/app/src/main/java/org/autojs/autojs/ui/update/UpdateInfoDialogBuilder.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.autojs.autojs.ui.update; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import androidx.annotation.NonNull; -import android.text.TextUtils; -import android.view.View; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.stardust.util.IntentUtil; - -import org.autojs.autojs.BuildConfig; -import org.autojs.autojs.Pref; -import org.autojs.autojs.R; -import org.autojs.autojs.external.fileprovider.AppFileProvider; -import org.autojs.autojs.network.download.DownloadManager; -import org.autojs.autojs.network.entity.VersionInfo; -import org.autojs.autojs.tool.IntentTool; -import org.autojs.autojs.ui.widget.CommonMarkdownView; - -import java.io.File; - -import io.reactivex.android.schedulers.AndroidSchedulers; - -/** - * Created by Stardust on 2017/4/9. - */ - -public class UpdateInfoDialogBuilder extends MaterialDialog.Builder { - - private static final String KEY_DO_NOT_ASK_AGAIN_FOR_VERSION = "I cannot forget you...cannot help missing you..."; - private View mView; - private SharedPreferences mSharedPreferences; - private VersionInfo mVersionInfo; - - public UpdateInfoDialogBuilder(@NonNull Context context, VersionInfo info) { - super(context); - mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - updateInfo(info); - } - - public UpdateInfoDialogBuilder updateInfo(VersionInfo info) { - mVersionInfo = info; - mView = View.inflate(context, R.layout.dialog_update_info, null); - setReleaseNotes(mView, info); - setCurrentVersionIssues(mView, info); - setUpdateDownloadButtons(mView, info); - title(context.getString(R.string.text_new_version) + " " + info.versionName); - customView(mView, false); - return this; - } - - public UpdateInfoDialogBuilder showDoNotAskAgain() { - mView.findViewById(R.id.do_not_ask_again_container).setVisibility(View.VISIBLE); - CheckBox checkBox = (CheckBox) mView.findViewById(R.id.do_not_ask_again); - checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mSharedPreferences.edit().putBoolean(KEY_DO_NOT_ASK_AGAIN_FOR_VERSION + mVersionInfo.versionCode, isChecked).apply(); - } - }); - return this; - } - - @Override - public MaterialDialog show() { - if (mSharedPreferences.getBoolean(KEY_DO_NOT_ASK_AGAIN_FOR_VERSION + mVersionInfo.versionCode, false)) { - return null; - } - return super.show(); - } - - private void setCurrentVersionIssues(View view, VersionInfo info) { - TextView issues = (TextView) view.findViewById(R.id.issues); - VersionInfo.OldVersion currentVersion = info.getOldVersion(BuildConfig.VERSION_CODE); - if (currentVersion == null) { - issues.setVisibility(View.GONE); - } else { - issues.setText(currentVersion.issues); - } - } - - private void setUpdateDownloadButtons(View view, VersionInfo info) { - LinearLayout downloads = (LinearLayout) view.findViewById(R.id.downloads); - setDirectlyDownloadButton(downloads, info); - for (final VersionInfo.Download download : info.downloads) { - Button button = (Button) View.inflate(getContext(), R.layout.dialog_update_info_btn, null); - button.setText(download.name); - downloads.addView(button); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - IntentTool.browse(v.getContext(), download.url); - } - }); - } - } - - private void setDirectlyDownloadButton(LinearLayout container, final VersionInfo info) { - if (TextUtils.isEmpty(info.downloadUrl)) { - return; - } - Button button = (Button) View.inflate(getContext(), R.layout.dialog_update_info_btn, null); - button.setText(R.string.text_directly_download); - button.setOnClickListener(v -> directlyDownload(info.downloadUrl)); - container.addView(button); - } - - @SuppressLint("CheckResult") - private void directlyDownload(String downloadUrl) { - final String path = new File(Pref.getScriptDirPath(), "AutoJs.apk").getPath(); - DownloadManager.getInstance().downloadWithProgress(getContext(), downloadUrl, path) - .subscribeOn(AndroidSchedulers.mainThread()) - .subscribe(file -> IntentUtil.installApkOrToast(getContext(), file.getPath(), AppFileProvider.AUTHORITY), - error -> { - error.printStackTrace(); - Toast.makeText(getContext(), R.string.text_download_failed, Toast.LENGTH_SHORT).show(); - }); - - } - - - private void setReleaseNotes(View view, VersionInfo info) { - CommonMarkdownView markdownView = view.findViewById(R.id.release_notes); - markdownView.loadMarkdown(info.releaseNotes); - } -} diff --git a/app/src/main/java/org/autojs/autojs/ui/update/VersionGuard.java b/app/src/main/java/org/autojs/autojs/ui/update/VersionGuard.java deleted file mode 100644 index 57796b4a8..000000000 --- a/app/src/main/java/org/autojs/autojs/ui/update/VersionGuard.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.autojs.autojs.ui.update; - -import android.app.Activity; - -import androidx.annotation.NonNull; - -import com.afollestad.materialdialogs.DialogAction; -import com.afollestad.materialdialogs.MaterialDialog; -import org.autojs.autojs.BuildConfig; -import org.autojs.autojs.R; -import org.autojs.autojs.network.VersionService; -import org.autojs.autojs.network.entity.VersionInfo; -import org.autojs.autojs.tool.SimpleObserver; - -import io.reactivex.android.schedulers.AndroidSchedulers; - -/** - * Created by Stardust on 2017/4/12. - */ - -public class VersionGuard { - - private Activity mActivity; - private MaterialDialog mDeprecatedDialog; - private VersionService mVersionService = VersionService.getInstance(); - - public VersionGuard(Activity activity) { - mActivity = activity; - } - - public void checkForDeprecatesAndUpdates() { - mVersionService.readDeprecatedFromPrefIfNeeded(mActivity); - if (mVersionService.isCurrentVersionDeprecated()) { - showDeprecatedDialogIfNeeded(); - } else { - checkForUpdatesIfNeeded(); - } - } - - private void checkForUpdatesIfNeeded() { - mVersionService.checkForUpdatesIfNeededAndUsingWifi(mActivity) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SimpleObserver() { - - @Override - public void onNext(@io.reactivex.annotations.NonNull VersionInfo versionInfo) { - if (mVersionService.isCurrentVersionDeprecated()) { - showDeprecatedDialogIfNeeded(); - } else { - showUpdateInfoIfNeeded(versionInfo); - } - } - - }); - } - - private void showUpdateInfoIfNeeded(org.autojs.autojs.network.entity.VersionInfo info) { - if (BuildConfig.VERSION_CODE < info.versionCode) { - new UpdateInfoDialogBuilder(mActivity, info) - .showDoNotAskAgain() - .show(); - } - } - - private void showDeprecatedDialogIfNeeded() { - if (mDeprecatedDialog != null && mDeprecatedDialog.isShowing()) - return; - String content = mActivity.getString(R.string.warning_version_too_old); - String issues = mVersionService.getCurrentVersionIssues(); - if (issues != null) { - content += "\n" + issues; - } - mDeprecatedDialog = new MaterialDialog.Builder(mActivity) - .title(R.string.text_version_too_old) - .content(content) - .positiveText(R.string.text_update) - .negativeText(R.string.text_exit) - .cancelable(false) - .autoDismiss(false) - .onAny((dialog, which) -> { - if (which == DialogAction.POSITIVE) { - new UpdateCheckDialog(mActivity) - .show(); - } else { - mActivity.finish(); - } - }) - .dismissListener(dialog -> mDeprecatedDialog = null) - .show(); - } -} diff --git a/app/src/main/java/org/autojs/autojs/ui/user/LoginActivity.java b/app/src/main/java/org/autojs/autojs/ui/user/LoginActivity.java index d811567e0..9ae4d447e 100644 --- a/app/src/main/java/org/autojs/autojs/ui/user/LoginActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/user/LoginActivity.java @@ -18,7 +18,6 @@ import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; -import org.w3c.dom.Node; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -53,7 +52,7 @@ void login() { } MaterialDialog dialog = new MaterialDialog.Builder(this) .progress(true, 0) - .content(R.string.text_logining) + .content(R.string.text_logging_in) .cancelable(false) .show(); UserService.getInstance().login(userName, password) diff --git a/app/src/main/java/org/autojs/autojs/ui/widget/PrefSwitch.java b/app/src/main/java/org/autojs/autojs/ui/widget/PrefSwitch.java index bb85fa56c..f1fa6ee8c 100644 --- a/app/src/main/java/org/autojs/autojs/ui/widget/PrefSwitch.java +++ b/app/src/main/java/org/autojs/autojs/ui/widget/PrefSwitch.java @@ -3,7 +3,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.res.TypedArray; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import android.util.AttributeSet; import com.stardust.theme.ThemeColor; @@ -43,7 +43,7 @@ private void init(AttributeSet attrs) { return; TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.PrefSwitch); mPrefKey = a.getString(R.styleable.PrefSwitch_key); - mDefaultChecked = a.getBoolean(R.styleable.PrefSwitch_defaultValue, false); + mDefaultChecked = a.getBoolean(R.styleable.PrefSwitch_defaultVal, false); if (mPrefKey != null) { mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext()); mSharedPreferences.registerOnSharedPreferenceChangeListener(this); diff --git a/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java b/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java index 7a2c10885..901eea0f0 100644 --- a/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java +++ b/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java @@ -22,6 +22,10 @@ public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { private boolean mHidden = false; public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ScrollAwareFABBehavior() { super(); } diff --git a/app/src/main/res/drawable/mt_circle.xml b/app/src/main/res/drawable/mt_circle.xml new file mode 100644 index 000000000..994ffe25b --- /dev/null +++ b/app/src/main/res/drawable/mt_circle.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/mt_ic_check_white_36dp.png b/app/src/main/res/drawable/mt_ic_check_white_36dp.png new file mode 100644 index 000000000..9b91350bc Binary files /dev/null and b/app/src/main/res/drawable/mt_ic_check_white_36dp.png differ diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index e5fb4498b..bee843f0e 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -1,95 +1,110 @@ - + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="#f9f9f9" + android:fitsSystemWindows="true" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:theme="@style/AppTheme.AppBarOverlay"> + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + android:background="?attr/colorPrimary" + android:theme="@style/ToolBarStyle" + app:popupTheme="@style/AppTheme.PopupOverlay" + app:title="@string/text_about" /> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="16dp" + android:orientation="vertical"> + android:id="@+id/icon_container" + android:layout_width="match_parent" + android:layout_height="220dp" + android:background="@android:color/white" + android:clickable="true" + android:foreground="?selectableItemBackgroundBorderless" + android:focusable="true"> + android:id="@+id/icon" + android:layout_width="91dp" + android:layout_height="91dp" + android:src="@drawable/autojs_material" + tools:ignore="ContentDescription" + android:layout_centerInParent="true" /> + + + android:id="@+id/since" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/icon" + android:layout_centerHorizontal="true" + android:layout_marginTop="36dp" + android:gravity="center" + android:textColor="#616161" + android:textSize="12sp" /> + android:layout_width="match_parent" + android:layout_height="match_parent"> - + + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:gravity="center" + android:text="@string/copyright" + android:textColor="#616161" + android:textSize="13sp" /> + android:id="@+id/share" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="16dp" + android:clickable="true" + android:src="@drawable/ic_share_white_48dp" + app:layout_anchor="@id/icon_container" + app:layout_anchorGravity="bottom|right|end" + android:alpha="0.9" + android:focusable="true" /> diff --git a/app/src/main/res/layout/activity_about_items.xml b/app/src/main/res/layout/activity_about_items.xml index e52c0ae42..a4acf8b24 100644 --- a/app/src/main/res/layout/activity_about_items.xml +++ b/app/src/main/res/layout/activity_about_items.xml @@ -1,112 +1,122 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:background="@android:color/white" + android:orientation="vertical"> + android:id="@+id/developer" + android:layout_width="match_parent" + android:layout_height="52dp" + android:background="?selectableItemBackground" + android:clickable="true" + android:gravity="center_vertical" + android:orientation="horizontal" + android:focusable="true"> + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_margin="16dp" + android:src="@drawable/ic_developer" + tools:ignore="ContentDescription" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/developer" + android:textColor="@android:color/secondary_text_light" + android:textSize="16sp" /> - + + android:id="@+id/github" + android:layout_width="match_parent" + android:layout_height="52dp" + android:clickable="true" + android:foreground="?selectableItemBackground" + android:gravity="center_vertical" + android:orientation="horizontal" + tools:ignore="UseCompoundDrawables" + android:focusable="true"> + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_margin="16dp" + android:src="@drawable/ic_github_mark" + tools:ignore="ContentDescription" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/github" + android:textColor="@android:color/secondary_text_light" + android:textSize="16sp" /> - + + android:id="@+id/email" + android:layout_width="match_parent" + android:layout_height="52dp" + android:background="?selectableItemBackground" + android:clickable="true" + android:gravity="center_vertical" + android:orientation="horizontal" + android:focusable="true"> + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_margin="16dp" + android:src="@drawable/ic_email_black_48dp" + tools:ignore="ContentDescription" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/email" + android:textColor="@android:color/secondary_text_light" + android:textIsSelectable="true" + android:textSize="16sp" /> - + + android:id="@+id/qq" + android:layout_width="match_parent" + android:layout_height="52dp" + android:background="?selectableItemBackground" + android:clickable="true" + android:gravity="center_vertical" + android:orientation="horizontal" + android:focusable="true"> + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_margin="16dp" + android:src="@drawable/ic_qq_black" + tools:ignore="ContentDescription" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/qq" + android:textColor="@android:color/secondary_text_light" + android:textIsSelectable="true" + android:textSize="16sp" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8ada97c47..2edac342c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,85 +1,85 @@ - - - + tools:context="org.autojs.autojs.ui.main.MainActivity"> - + android:layout_height="match_parent" + android:clipChildren="false" + android:clipToPadding="false"> - + android:layout_height="wrap_content" + android:paddingTop="16dp" + android:theme="@style/AppTheme.AppBarOverlay"> + + + android:id="@+id/tab" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:tabGravity="fill" + app:tabIndicatorColor="@color/tab_indicator" + app:tabMode="fixed" + app:tabSelectedTextColor="@color/tab_indicator" + app:tabTextColor="@color/tab_text" /> + android:id="@+id/viewpager" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + android:id="@+id/fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|bottom" + android:layout_margin="16dp" + android:src="@drawable/ic_add_white_48dp" + app:backgroundTint="@color/colorPrimary" + app:layout_anchor="@id/viewpager" + app:layout_anchorGravity="bottom|right|end" + app:layout_behavior="org.autojs.autojs.ui.widget.ScrollAwareFABBehavior" + android:alpha="0.9" /> + android:id="@+id/floating_action_menu" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|bottom" + android:layout_margin="16dp" + android:clipChildren="false" + android:clipToPadding="false" + android:visibility="invisible" + app:layout_anchor="@id/viewpager" + app:layout_anchorGravity="bottom|right|end" /> - + diff --git a/app/src/main/res/layout/activity_timed_task_setting.xml b/app/src/main/res/layout/activity_timed_task_setting.xml index 9708aa8a1..97ae4d391 100644 --- a/app/src/main/res/layout/activity_timed_task_setting.xml +++ b/app/src/main/res/layout/activity_timed_task_setting.xml @@ -1,249 +1,254 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:theme="@style/AppTheme.AppBarOverlay"> + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + android:background="?attr/colorPrimary" + android:theme="@style/ToolBarStyle" + app:popupTheme="@style/AppTheme.PopupOverlay" /> - - - + android:layout_height="match_parent"> - + android:orientation="vertical"> - + android:layout_marginLeft="6dp" + android:layout_marginTop="12dp" + android:layout_marginRight="6dp" + app:cardCornerRadius="2dp" + app:cardElevation="1dp" + app:cardUseCompatPadding="true"> - + android:orientation="vertical" + android:padding="16dp"> + + + android:id="@+id/timing_group" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + android:id="@+id/daily_task_radio" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="16dp" + android:text="@string/text_daily_task" + tools:ignore="RtlSymmetry" /> - - + app:ael_expanded="false" + app:ael_interpolator="fastOutSlowIn" + app:ael_orientation="vertical"> + + + android:id="@+id/disposable_task_radio" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="16dp" + android:text="@string/text_disposable_task" + tools:ignore="RtlSymmetry" /> - - + android:layout_marginStart="36dp" + app:ael_expanded="false" + app:ael_interpolator="fastOutSlowIn" + app:ael_orientation="vertical"> + + + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_gravity="center_vertical" + android:gravity="center" + android:src="@drawable/ic_schedule_black_48dp" /> + android:id="@+id/disposable_task_time" + android:layout_width="match_parent" + android:layout_height="36dp" + android:layout_marginStart="12dp" + android:gravity="center_vertical" + android:textColor="?android:textColorPrimary" + android:textSize="16sp" /> + android:id="@+id/disposable_task_date_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@+id/disposable_task_time_container" + android:layout_alignParentBottom="true" + android:background="?selectableItemBackground" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="6dp"> + android:id="@+id/disposable_task_date_icon" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_gravity="center_vertical" + android:gravity="center" + android:src="@drawable/ic_date_range_black_48dp" /> + android:id="@+id/disposable_task_date" + android:layout_width="match_parent" + android:layout_height="36dp" + android:layout_marginStart="12dp" + android:gravity="center_vertical" + android:textColor="?android:textColorPrimary" + android:textSize="16sp" /> + android:id="@+id/weekly_task_radio" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="16dp" + android:text="@string/text_weekly_task" + tools:ignore="RtlSymmetry" /> - - + app:ael_expanded="false" + app:ael_interpolator="fastOutSlowIn" + app:ael_orientation="vertical"> - + android:orientation="vertical"> + + + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="25dp" + android:orientation="horizontal" + android:weightSum="4"> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day1" + tools:ignore="TooDeepLayout" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day2" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day3" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day4" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="25dp" + android:orientation="horizontal" + android:weightSum="4"> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day5" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day6" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day7" /> @@ -253,176 +258,193 @@ + android:id="@+id/run_on_broadcast" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="16dp" + android:text="@string/text_run_on_broadcast" + tools:ignore="RtlSymmetry" /> - - + app:ael_expanded="false" + app:ael_interpolator="fastOutSlowIn" + app:ael_orientation="vertical"> - - + android:orientation="vertical"> + android:id="@+id/run_on_startup" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_startup" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_boot" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_boot" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_screen_on" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_screen_on" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_screen_off" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_screen_off" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_screen_unlock" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_screen_unlock" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_battery_change" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_battery_change" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_power_connect" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_power_connect" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_power_disconnect" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_power_disconnect" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_conn_change" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_conn_change" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_package_install" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_package_install" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_package_uninstall" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_package_uninstall" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_package_update" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_package_update" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_headset_plug" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_headset_plug" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_config_change" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_config_change" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_time_tick" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_time_tick" + tools:ignore="RtlSymmetry" /> + + + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="36dp" + android:layout_marginTop="2dp" + android:hint="@string/text_broadcast_action"> + android:id="@+id/action" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:maxLines="2" + android:text="@string/text_broadcast_action_prefix" /> diff --git a/app/src/main/res/layout/fragment_drawer.xml b/app/src/main/res/layout/fragment_drawer.xml index 98d0f1861..b270edbf4 100644 --- a/app/src/main/res/layout/fragment_drawer.xml +++ b/app/src/main/res/layout/fragment_drawer.xml @@ -1,137 +1,140 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="304dp" + android:layout_height="match_parent" + android:background="?android:windowBackground" + android:clickable="true" + android:fitsSystemWindows="false" + android:importantForAccessibility="no" + android:orientation="vertical" + android:focusable="true"> + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="25dp" + android:layout_marginBottom="5dp"> - - - - - - + android:id="@+id/shadow" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/drawer_header_shadow" + android:visibility="gone" /> - - + android:layout_height="match_parent" + android:orientation="vertical"> + + android:layout_width="match_parent" + android:layout_height="1dp" + android:background="?android:divider" /> + android:layout_width="match_parent" + android:layout_height="44dp" + android:layout_gravity="bottom" + android:baselineAligned="false"> + android:id="@+id/setting" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:background="?selectableItemBackground" + android:gravity="center" + android:orientation="horizontal" + android:onClick="startSettingActivity"> + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_gravity="center_vertical" + android:layout_marginEnd="12dp" + android:src="@drawable/ic_ali_settings" + app:tint="#666666" + tools:ignore="ContentDescription" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:gravity="center" + android:text="@string/text_setting" + android:textColor="?android:textColorPrimary" + android:textSize="15sp" /> + android:id="@+id/restart" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:background="?selectableItemBackground" + android:gravity="center" + android:orientation="horizontal" + android:onClick="restartAfterPendingIntent"> + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_gravity="center_vertical" + android:layout_marginEnd="12dp" + android:src="@drawable/ic_refresh_white_24dp" + app:tint="#666666" + tools:ignore="ContentDescription" /> + + + + android:orientation="horizontal" + android:onClick="exitCompletely"> + + + + diff --git a/app/src/main/res/layout/item_topic.xml b/app/src/main/res/layout/item_topic.xml deleted file mode 100644 index 104da64ab..000000000 --- a/app/src/main/res/layout/item_topic.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/mt_activity_color_select.xml b/app/src/main/res/layout/mt_activity_color_select.xml new file mode 100644 index 000000000..dec4555c7 --- /dev/null +++ b/app/src/main/res/layout/mt_activity_color_select.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mt_color_setting_recycler_view_item.xml b/app/src/main/res/layout/mt_color_setting_recycler_view_item.xml new file mode 100644 index 000000000..d8ec52af6 --- /dev/null +++ b/app/src/main/res/layout/mt_color_setting_recycler_view_item.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mt_theme_color_check_box_preference.xml b/app/src/main/res/layout/mt_theme_color_check_box_preference.xml new file mode 100644 index 000000000..2d974caf1 --- /dev/null +++ b/app/src/main/res/layout/mt_theme_color_check_box_preference.xml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/preference_category_custom.xml b/app/src/main/res/layout/preference_category_custom.xml index 9f10b0afb..291aa5cd1 100644 --- a/app/src/main/res/layout/preference_category_custom.xml +++ b/app/src/main/res/layout/preference_category_custom.xml @@ -6,13 +6,14 @@ android:orientation="vertical"> diff --git a/app/src/main/res/menu/menu_script_options.xml b/app/src/main/res/menu/menu_script_options.xml index 2e31fe8f0..97beaf9e7 100644 --- a/app/src/main/res/menu/menu_script_options.xml +++ b/app/src/main/res/menu/menu_script_options.xml @@ -1,10 +1,6 @@ - - @@ -18,8 +14,14 @@ android:title="@string/text_send"/> + android:id="@+id/timed_task" + android:title="@string/text_timed_task" /> + + @@ -27,20 +29,14 @@ - - - + android:id="@+id/reset" + android:title="@string/text_reset_to_initial_content" /> - + android:id="@+id/action_build_apk" + android:title="@string/text_build_apk" /> + android:id="@+id/run_repeatedly" + android:title="@string/text_run_repeatedly" /> diff --git a/app/src/main/res/raw/annunciation.md b/app/src/main/res/raw/annunciation.md deleted file mode 100644 index 460c18f9c..000000000 --- a/app/src/main/res/raw/annunciation.md +++ /dev/null @@ -1,5 +0,0 @@ -**本软件为免费软件!** - -如果你是从任何地方购买的~那么您很可能已经上当了Σ(っ°Д°;)っ并且这些非官方渠道的软件的安全性无法保证。 - -另外本软件是开源的,在一定程度上保证了软件本身的安全性,您可以在关于页面查看GitHub上的[项目](https://github.com/hyb1996/NoRootScriptDroid)(欢迎Star~) \ No newline at end of file diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 42284aa26..8efcbc36a 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1,4 +1,4 @@ - + Auto.js Required by the script automatic operation (click, long press, slide, etc.). New File @@ -6,7 +6,6 @@ Input name Name Go to setting - Need to enable the Accessibility service.\nYou can also enable it later in the side menu. Cancel Path is empty File dost not exist @@ -19,21 +18,36 @@ Save Run Prompt + Done The content has not been saved, are you sure you want to exit? Save & Exit Exit Settings + Restart Exit - Accessibility Service + Back + Accessibility service About Open Sources Licenses Don\'t show again - Copyright©2016 All right reserves. + Copyright © 2021 All Rights Reserved Stardust Source Code - Copied + Copied + Copy cmd + Command copied + Granted + Not granted + Perm test + Permission granted + ADB tool is needed + Permission granted (by root) + Permission granted failed (by root) + Permission revoked + Permission revoked (by root) + Permission revoked failed (by root) https://github.com/hyb1996/NoRootScriptDroid - [UiAutomator]Download:http://www.coolapk.com/apk/org.autojs.autojs + AutoJs6:\nhttps://github.com/SuperMonster003/AutoJs6 Floating Window Bug Report Press again to exit @@ -49,7 +63,7 @@ Copy debugging log This is a software developer(。・・)ノ Please choose - Crash~ o(≧口≦)o + Crash~ o(≧□≦)o (ಥ _ ಥ)Exit or submit a bug report or copy debugging log to the developer(≧∇≦)ノ Clear Console @@ -57,6 +71,7 @@ Submitted successfully Cannot process file Feedback + Tools Record touches Start Recording stopped @@ -70,14 +85,15 @@ key_max_length_for_code_completion Maximum file length of code complements The file exists - Accessibility Service + Accessibility service Enable service automatically with root - Accessibility service is enabled but not running. This may be Android\'s BUG. You may need to restart your phone + Accessibility service is enabled but not running key_enable_accessibility_service_by_root Start the accessibility service timeout Enable accessibility service automatically when needed + More stable layout analysis but worse code compatibility (a11y service restarting needed) Appearance - Theme Color + Theme color Choose a picture Help No floating window permission @@ -95,7 +111,7 @@ Script key_use_volume_control_running Stop all scripts when volume changes - Need to enable Accessibility Service + Need to enable accessibility service Refresh ω<*)]]> Checking for updates @@ -104,12 +120,14 @@ Version too old This version is deprecated Release Notes - + At least one day must be selected + on Auto.js started up Update Processing Pre-execute script Check for updates - Red + Red + Pink Purple Orange Amber @@ -127,6 +145,7 @@ Brown Gray Blue gray + Default color Uploading to github E-mail Invalid access token @@ -135,7 +154,7 @@ Unknown error Send by email Import failed - No brower installed. + No browser installed. Choose a script Edit pre-execute script Clear pre-execute script @@ -149,14 +168,89 @@ Beautify code Protection mode Prevent automation of scripts when Auto.js in the front - Inspecting layout... + Inspecting layout... Force stop - \\n------------\\n[%s]Finished,spent %f seconds. + \\n------------\\n[%s]Finished,spent %f seconds. About app and developer Attribute Value - View info + View info View in layout bounds\' view /Scripts/ - + Connect to PC + Dark mode + Stable mode + Foreground service + Usage stats access + Volume down control + Task + Next + Disposable task + Daily task + Weekly task + Timing + Time should be later than now + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Broadcast task + foreground service + Auto.js is running + Click to launch Auto.js + custom broadcast + Action + android.intent.action. + on booted + on screen turned on + on screen turned off + At least one broadcast must be selected + on battery changed + on screen unlocked + on power connected + on power disconnected + on internet connection changed + on package installed + on package uninstalled + on package updated + on headset plugged + on every one minute + on config changed + Run repeatedly + More + Build APK + Tutorial + Docs + File + Timed task + Running task + Directory + Reset initially + Send + Samples + Log + Search + Project + Import + Time + Size + Type + *.js file + Notification access + Permission + Service + Others + Documentation source + Change main directory + Root recorded out file type + Ignore battery optimizations + Display over other apps + Write system settings + Write security settings + Failed + Color picker + Custom diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 513f7a639..6cf21c28d 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,44 +1,38 @@ - - - - - + + + + + - - - + + + - - + + + - - - - - + + + + + - + - - + + - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5c16ed8fd..f11d08cfc 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,7 +1,10 @@ - #009688 - #009688 + + + + #37474F + #37474F #03a9f4 #99444444 #eef2f3f9 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 477d22666..62af13f5e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,11 +1,10 @@ - + Auto.js 新建文件 创建失败 请输入名称 名称 去设置 - 软件需要打开\"无障碍服务\"才能运行,请在随后的设置中选择\"Auto.js\"并开启服务。\n您也可以稍后在侧拉菜单中设置。 取消 路径为空 文件不存在 @@ -22,19 +21,33 @@ 保存并退出 直接退出 设置 + 重启 退出 + 返回 无障碍服务 关于 开放源代码许可 不再提示 - Copyright©2018-2019 All right reserves. + Copyright © 2021 All Rights Reserved 星尘幻影 2732014414 hybbbb1996@gmail.com 软件源代码 - 已复制到剪贴板 + 复制指令 + 已复制到剪贴板 + 指令已复制到剪贴板 + 需要 ADB 命令行工具 + 已授予 + 未授予 + 权限测试 + 已授予权限 + 已授予权限 (by root) + 权限授予失败 (by root) + 已撤消授权 + 已撤消授权 (by root) + 权限撤消失败 (by root) https://github.com/hyb1996/NoRootScriptDroid - [Auto.js]下载地址:http://www.coolapk.com/apk/org.autojs.autojs + AutoJs6:\nhttps://github.com/SuperMonster003/AutoJs6 悬浮窗 错误报告 再按一次退出程序 @@ -50,7 +63,7 @@ 复制调试信息 这是软件开发者(。・・)ノ 请选择 - 崩溃了o(≧口≦)o + 崩溃了o(≧□≦)o 将会自动提交错误信息。您也可以手动复制调试信息提交给开发者(*^▽^*)或者点击\"退出\"退出程序o(╥﹏╥)o 清空 控制台 @@ -59,6 +72,7 @@ 提交成功 无法处理文件 问题反馈 + 工具 录制脚本 开始录制 录制结束 @@ -73,11 +87,11 @@ 代码补全最大文件长度 文件已存在 无障碍服务 - 通过Root权限自动启用服务 - 无障碍服务已启用但并未运行,这可能是安卓的BUG,您可能需要重启手机或重启无障碍服务 + 通过 Root 权限自动启用服务 + 无障碍服务已启用但并未运行 key_enable_accessibility_service_by_root - 使用Root权限启动无障碍服务超时 - 开启后运行脚本会使用Root权限自动开启无障碍服务 + 使用 Root 权限启动无障碍服务超时 + 开启后运行脚本会使用 Root 权限自动开启无障碍服务 外观 主题色 选择图片 @@ -99,7 +113,7 @@ 音量上键停止所有脚本 需要启用无障碍服务 导入失败 - 没有浏览器耶o(╯□╰)o快去安装一个吧 + 没有浏览器耶o(╯□╰)o快去安装一个吧 刷新 ω<*)]]> 请选择脚本 @@ -135,11 +149,10 @@ 又双叒叕 连接电脑 服务器地址 - 声明 关于项目与开发者 属性 - 查看控件信息 + 查看控件信息 在布局层次中查看 在布局范围中查看 更多 @@ -152,7 +165,7 @@ 延迟多少秒后开始循环 格式错误 打开无障碍服务 - 使用root权限开启失败 + 使用root权限开启失败 处理中 删除失败 编辑脚本 @@ -163,15 +176,15 @@ Root录制生成文件类型 binary key_stable_mode - 开启后布局分析更稳定,但小部分脚本可能无法正常运行。重启无障碍服务生效 + 增强布局分析稳定性但降低代码兼容性 (需重启无障碍服务) 稳定模式 key_enable_observe_key 文件夹 文件 教程 - 社区 + 文档 管理 - 未登录 + 任务 音量下键控制 其他 导入 @@ -236,7 +249,7 @@ 登录成功 登录失败 重置密码 - 登录中 + 登录中 注册 邮箱 邮箱不能为空 @@ -249,9 +262,8 @@ 重置成功 无法读取文件 服务 + 权限 通知读取权限 - - 打开主界面 生成代码 动作 @@ -274,12 +286,12 @@ 文档源 发送 定时任务 - 运行中脚本 + 运行中任务 完成 - 只运行一次 - 每天运行 - 按星期运行 - 定时 + 一次性任务 + 每天任务 + 每周任务 + 定时 任务时间小于当前时间 下次运行 @@ -302,11 +314,6 @@ 设备没有root 监测到您的设备没有root, 录制脚本需要root权限, 是否继续? 仍要录制 - 版块 - 未读 - 最新 - 热门 - 话题 无效的登录凭证 密码太短 邮箱已被占用 @@ -314,7 +321,6 @@ 退出登录 操作失败,请稍后重试 稳定模式通过省略布局细节使脚本抓取布局时更稳定,但同时获取到的屏幕上的控件可能会减少。\n\n重新启动无障碍服务才能生效。 - 2184044085\n3566596539\npJTCkHuhypD9i3UBQ55XQw==RtXsgCTVFA7VYhLeF1TSkg== 8 56 字体大小 @@ -352,32 +358,31 @@ 执行 连接失败: %s 确定要删除%s吗 - 特定事件(广播)触发运行 + 广播触发任务 搜索Java包/类 类/包名 查看文档 import - 市场 运行配置 主脚本名称 main.js 项目 项目位置 新建项目 - js文件 + *.js 文件 无效项目 前台服务 - key_foreground_service + key_foreground_service 前台服务通知 Auto.js保持运行中 点击进入主界面 - 其他事件(广播) - 广播Action + 自定义广播 + Action android.intent.action. 开机时 亮屏时 息屏时 - 请选择一个广播事件选项 + 需至少选择一个广播事件 电量变化时 屏幕解锁时 电源连接时 @@ -397,8 +402,8 @@ 夜间模式 key_night_mode Auto.js启动时 - 查看使用统计权限 - 通过\"查看使用统计\"权限可以获取本设备过去使用应用的情况,从而使获取当前应用(currentPackage)时更准确。 + 查看使用情况权限 + 通过\"查看使用情况\"权限可以获取本设备过去使用应用的情况,从而使获取当前应用(currentPackage)时更准确。 打开方式 Root 免Root @@ -409,4 +414,11 @@ 描述至少要 %d 个字. 描述至少要 %d 个字. + 忽略电池优化 + 显示在其他应用上层 + 修改系统设置 + 修改安全设置 + 失败 + 选择颜色 + 自定义 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index c7d18c253..dd5e66359 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,6 +1,5 @@ - - + + + diff --git a/app/src/main/res/values/theme_colors.xml b/app/src/main/res/values/theme_colors.xml index c7f9a9d4b..159b610f5 100644 --- a/app/src/main/res/values/theme_colors.xml +++ b/app/src/main/res/values/theme_colors.xml @@ -19,6 +19,7 @@ 棕色 灰色 蓝灰 + 默认颜色 #F44336 @@ -40,4 +41,5 @@ #795548 #9E9E9E #607D8B + #37474F \ No newline at end of file diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index de479f978..fb109f9d2 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -1,5 +1,5 @@ - @@ -35,7 +35,7 @@ android:title="@string/text_script_running"> @@ -65,7 +65,7 @@ android:title="@string/text_accessibility_service"> - + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/strings.xml b/app/src/main/strings.xml index 6fd357476..b7fd364d5 100644 --- a/app/src/main/strings.xml +++ b/app/src/main/strings.xml @@ -12,7 +12,6 @@ Please input name Name Go to setting - 软件需要打开\"自动操作服务\"才能运行,请在随后的设置中选择\"免Root脚本精灵\"并开启服务。\n您也可以稍后在侧拉菜单中设置。 取消 Path is empty File not exists @@ -38,25 +37,24 @@ License 不再提示 Alipay QR Scan - Sample: Show runnings services (Android 6.0+) + Sample: Show running services (Android 6.0+) Sample: Simple Calculator - Copyright©2016 All right reserves. + Copyright © 2021 All Rights Reserved Aring (星尘幻影) 946994919 hybbbb1996@gmail.com - Srouce Codes - 已复制到剪贴板 + Source Codes + 已复制到剪贴板 Donate 邮箱 https://github.com/hyb1996/NoRootScriptDroid - [免Root脚本精灵]下载地址:https://github.com/hyb1996/NoRootScriptDroid/releases + AutoJs6:\nhttps://github.com/SuperMonster003/AutoJs6 点击区域辅助服务 通知栏点击区域辅助开关 Others 点击区域辅助服务已开启(点击关闭) 点击区域辅助服务已关闭(点击开启) Bug Report - Sample: QQ Auto 抢红包 Press again to exit 常用函数 很抱歉(ಥ _ ಥ)程序遇到未知错误,即将停止运行\n错误代码: @@ -70,7 +68,7 @@ Send to shortcut 已创建 删除 - 彻底删除 + 彻底删除 已删除 文件删除失败 选择一个文件 @@ -85,7 +83,7 @@ Script stopped (不会翻译)\"点击区域辅助服务\"是在要点击的区域不是文本时使用的,参见\"语法与API\"。\"点击区域辅助服务\"只有在\"自动操作服务\"开启时才有效。 Please choose - 崩溃了o(≧口≦)o + 崩溃了o(≧□≦)o (不会翻译)点击\"退出\"退出程序(ಥ _ ಥ)或者提交错误报告或者复制调试信息反馈给开发者(≧∇≦)ノ 无法在后台显示弹框,脚本已停止运行 Sample: QQ forcing chat @@ -99,5 +97,4 @@ Bug Report Report fail Report succeed - diff --git a/autojs/build.gradle b/autojs/build.gradle index 7269c9258..2491f810f 100644 --- a/autojs/build.gradle +++ b/autojs/build.gradle @@ -1,19 +1,23 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_16 + } +} + +tasks.withType(JavaCompile) { + options.compilerArgs << '-Xlint:deprecation' << '-Xlint:unchecked' +} android { compileSdkVersion versions.compile - buildToolsVersion versions.buildTool - defaultConfig { minSdkVersion versions.mini targetSdkVersion versions.target - versionCode 1 - versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } buildTypes { release { @@ -21,11 +25,9 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_16 + targetCompatibility JavaVersion.VERSION_16 } lintOptions { abortOnError false @@ -33,45 +35,51 @@ android { } repositories { - flatDir { - dirs 'libs' - } google() } dependencies { - androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1-alpha01', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - testImplementation 'junit:junit:4.12' - api fileTree(dir: 'libs', include: ['*.jar']) - api 'org.greenrobot:eventbus:3.0.0' - api 'net.lingala.zip4j:zip4j:1.3.2' - api('com.afollestad.material-dialogs:core:0.9.2.3', { - exclude group: 'com.android.support' - }) - api 'com.google.android.material:material:1.1.0-alpha01' + testImplementation 'junit:junit:4.13.2' + + api 'org.greenrobot:eventbus:3.2.0' + + api 'net.lingala.zip4j:zip4j:2.9.1' + + api('com.afollestad.material-dialogs:core:0.9.6.0') + api 'com.google.android.material:material:1.5.0-beta01' + api 'com.github.hyb1996:EnhancedFloaty:0.31' + api 'com.makeramen:roundedimageview:2.3.0' - // OpenCv - api(name: 'opencv-3.4.3', ext: 'aar') + // OkHttp - api 'com.squareup.okhttp3:okhttp:3.10.0' + api 'com.squareup.okhttp3:okhttp:5.0.0-alpha.3' + // JDeferred api 'org.jdeferred:jdeferred-android-aar:1.2.6' - //RootShell + + // RootShell api 'com.github.Stericson:RootShell:1.6' + // Gson - api 'com.google.code.gson:gson:2.8.2' - // log4j + api 'com.google.code.gson:gson:2.8.9' + + // Log4j api group: 'de.mindpipe.android', name: 'android-logging-log4j', version: '1.0.3' api group: 'log4j', name: 'log4j', version: '1.2.17' + + // Preference + api 'androidx.preference:preference-ktx:1.1.1' + // Terminal emulator - api(name: 'libtermexec-release', ext: 'aar') - api(name: 'emulatorview-release', ext: 'aar') - api(name: 'term-debug', ext: 'aar') - api files('libs/rhino-1.7.7.2.jar') - api project(path: ':common') - api project(path: ':automator') -} + api project(":libs:jackpal.androidterm.libtermexec-1.0") + api project(":libs:jackpal.androidterm.emulatorview-1.0.42") + api project(":libs:jackpal.androidterm-1.0.70") + + api project(":libs:com.android.dx-1.7.0") + api project(":libs:org.mozilla.rhino-1.7.14") + api project(':libs:org.opencv-4.5.4') + api project(':common') + api project(':automator') +} \ No newline at end of file diff --git a/autojs/libs/emulatorview-release.aar b/autojs/libs/emulatorview-release.aar deleted file mode 100644 index 84e3e3343..000000000 Binary files a/autojs/libs/emulatorview-release.aar and /dev/null differ diff --git a/autojs/libs/libtermexec-release.aar b/autojs/libs/libtermexec-release.aar deleted file mode 100644 index f49ae3493..000000000 Binary files a/autojs/libs/libtermexec-release.aar and /dev/null differ diff --git a/autojs/libs/opencv-3.4.3.aar b/autojs/libs/opencv-3.4.3.aar deleted file mode 100644 index c0ffeb818..000000000 Binary files a/autojs/libs/opencv-3.4.3.aar and /dev/null differ diff --git a/autojs/libs/rhino-1.7.7.2.jar b/autojs/libs/rhino-1.7.7.2.jar deleted file mode 100644 index 4a18d3360..000000000 Binary files a/autojs/libs/rhino-1.7.7.2.jar and /dev/null differ diff --git a/autojs/libs/term-debug.aar b/autojs/libs/term-debug.aar deleted file mode 100644 index b32ad4322..000000000 Binary files a/autojs/libs/term-debug.aar and /dev/null differ diff --git a/autojs/src/main/AndroidManifest.xml b/autojs/src/main/AndroidManifest.xml index 54f43b7d5..e04805390 100644 --- a/autojs/src/main/AndroidManifest.xml +++ b/autojs/src/main/AndroidManifest.xml @@ -1,46 +1,49 @@ - - - - - - - - - - + xmlns:tools="http://schemas.android.com/tools" + package="com.stardust.autojs"> + + + + + + + + + + + android:name=".execution.ScriptExecuteActivity" + android:configChanges="keyboardHidden|orientation|screenSize" + android:theme="@style/ScriptTheme" /> + android:name="com.stardust.autojs.core.permission.PermissionRequestActivity" + android:excludeFromRecents="true" + android:taskAffinity="com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity" + android:theme="@style/ScriptTheme.Transparent" /> + android:name="com.stardust.autojs.core.image.capture.ScreenCaptureRequestActivity" + android:excludeFromRecents="true" + android:taskAffinity="com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity" + android:theme="@style/ScriptTheme.Transparent" /> + android:name="com.stardust.autojs.core.accessibility.AccessibilityService" + android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" + android:exported="true"> - + + android:name="android.accessibilityservice" + android:resource="@xml/accessibility_service_config" /> diff --git a/autojs/src/main/assets/init.js b/autojs/src/main/assets/init.js index 788838056..693ae0fc6 100644 --- a/autojs/src/main/assets/init.js +++ b/autojs/src/main/assets/init.js @@ -52,7 +52,7 @@ runtime.init(); global.timers = require('__timers__.js')(runtime, global); //初始化不依赖环境的模块 - global.JSON = require('__json2__.js'); + global.JSON = require('json2.js'); global.util = require('__util__.js'); global.device = runtime.device; global.Promise = require('promise.js'); diff --git a/autojs/src/main/assets/modules/__json2__.js b/autojs/src/main/assets/modules/__json2__.js deleted file mode 100644 index 318673737..000000000 --- a/autojs/src/main/assets/modules/__json2__.js +++ /dev/null @@ -1,510 +0,0 @@ -// json2.js -// 2016-10-28 -// Public Domain. -// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. -// See http://www.JSON.org/js.html -// This code should be minified before deployment. -// See http://javascript.crockford.com/jsmin.html - -// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO -// NOT CONTROL. - -// This file creates a global JSON object containing two methods: stringify -// and parse. This file provides the ES5 JSON capability to ES3 systems. -// If a project might run on IE8 or earlier, then this file should be included. -// This file does nothing on ES5 systems. - -// JSON.stringify(value, replacer, space) -// value any JavaScript value, usually an object or array. -// replacer an optional parameter that determines how object -// values are stringified for objects. It can be a -// function or an array of strings. -// space an optional parameter that specifies the indentation -// of nested structures. If it is omitted, the text will -// be packed without extra whitespace. If it is a number, -// it will specify the number of spaces to indent at each -// level. If it is a string (such as "\t" or " "), -// it contains the characters used to indent at each level. -// This method produces a JSON text from a JavaScript value. -// When an object value is found, if the object contains a toJSON -// method, its toJSON method will be called and the result will be -// stringified. A toJSON method does not serialize: it returns the -// value represented by the name/value pair that should be serialized, -// or undefined if nothing should be serialized. The toJSON method -// will be passed the key associated with the value, and this will be -// bound to the value. - -// For example, this would serialize Dates as ISO strings. - -// Date.prototype.toJSON = function (key) { -// function f(n) { -// // Format integers to have at least two digits. -// return (n < 10) -// ? "0" + n -// : n; -// } -// return this.getUTCFullYear() + "-" + -// f(this.getUTCMonth() + 1) + "-" + -// f(this.getUTCDate()) + "T" + -// f(this.getUTCHours()) + ":" + -// f(this.getUTCMinutes()) + ":" + -// f(this.getUTCSeconds()) + "Z"; -// }; - -// You can provide an optional replacer method. It will be passed the -// key and value of each member, with this bound to the containing -// object. The value that is returned from your method will be -// serialized. If your method returns undefined, then the member will -// be excluded from the serialization. - -// If the replacer parameter is an array of strings, then it will be -// used to select the members to be serialized. It filters the results -// such that only members with keys listed in the replacer array are -// stringified. - -// Values that do not have JSON representations, such as undefined or -// functions, will not be serialized. Such values in objects will be -// dropped; in arrays they will be replaced with null. You can use -// a replacer function to replace those with JSON values. - -// JSON.stringify(undefined) returns undefined. - -// The optional space parameter produces a stringification of the -// value that is filled with line breaks and indentation to make it -// easier to read. - -// If the space parameter is a non-empty string, then that string will -// be used for indentation. If the space parameter is a number, then -// the indentation will be that many spaces. - -// Example: - -// text = JSON.stringify(["e", {pluribus: "unum"}]); -// // text is '["e",{"pluribus":"unum"}]' - -// text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t"); -// // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - -// text = JSON.stringify([new Date()], function (key, value) { -// return this[key] instanceof Date -// ? "Date(" + this[key] + ")" -// : value; -// }); -// // text is '["Date(---current time---)"]' - -// JSON.parse(text, reviver) -// This method parses a JSON text to produce an object or array. -// It can throw a SyntaxError exception. - -// The optional reviver parameter is a function that can filter and -// transform the results. It receives each of the keys and values, -// and its return value is used instead of the original value. -// If it returns what it received, then the structure is not modified. -// If it returns undefined then the member is deleted. - -// Example: - -// // Parse the text. Values that look like ISO date strings will -// // be converted to Date objects. - -// myData = JSON.parse(text, function (key, value) { -// var a; -// if (typeof value === "string") { -// a = -// /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); -// if (a) { -// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], -// +a[5], +a[6])); -// } -// } -// return value; -// }); - -// myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { -// var d; -// if (typeof value === "string" && -// value.slice(0, 5) === "Date(" && -// value.slice(-1) === ")") { -// d = new Date(value.slice(5, -1)); -// if (d) { -// return d; -// } -// } -// return value; -// }); - -// This is a reference implementation. You are free to copy, modify, or -// redistribute. - -/*jslint - eval, for, this -*/ - -/*property - JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. -var gson = new com.google.gson.Gson(); -JSON = {}; - -(function () { - "use strict"; - - var rx_one = /^[\],:{}\s]*$/; - var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g; - var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; - var rx_four = /(?:^|:|,)(?:\s*\[)+/g; - var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; - var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 - ? "0" + n - : n; - } - - function this_value() { - return this.valueOf(); - } - - if (typeof Date.prototype.toJSON !== "function") { - - Date.prototype.toJSON = function () { - - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + "-" + - f(this.getUTCMonth() + 1) + "-" + - f(this.getUTCDate()) + "T" + - f(this.getUTCHours()) + ":" + - f(this.getUTCMinutes()) + ":" + - f(this.getUTCSeconds()) + "Z" - : null; - }; - - Boolean.prototype.toJSON = this_value; - Number.prototype.toJSON = this_value; - String.prototype.toJSON = this_value; - } - - var gap; - var indent; - var meta; - var rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - rx_escapable.lastIndex = 0; - return rx_escapable.test(string) - ? "\"" + string.replace(rx_escapable, function (a) { - var c = meta[a]; - return typeof c === "string" - ? c - : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); - }) + "\"" - : "\"" + string + "\""; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i; // The loop counter. - var k; // The member key. - var v; // The member value. - var length; - var mind = gap; - var partial; - var value = holder[key]; - - if(value && value.getClass){ - return gson.toJson(value); - } - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === "object" && - typeof value.toJSON === "function") { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === "function") { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case "string": - return quote(value); - - case "number": - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) - ? String(value) - : "null"; - - case "boolean": - case "null": - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce "null". The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is "object", we might be dealing with an object or an array or -// null. - - case "object": - -// Due to a specification blunder in ECMAScript, typeof null is "object", -// so watch out for that case. - - if (!value) { - return "null"; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === "[object Array]") { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || "null"; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 - ? "[]" - : gap - ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" - : "[" + partial.join(",") + "]"; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === "object") { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === "string") { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + ( - gap - ? ": " - : ":" - ) + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + ( - gap - ? ": " - : ":" - ) + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 - ? "{}" - : gap - ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}" - : "{" + partial.join(",") + "}"; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== "function") { - meta = { // table of character substitutions - "\b": "\\b", - "\t": "\\t", - "\n": "\\n", - "\f": "\\f", - "\r": "\\r", - "\"": "\\\"", - "\\": "\\\\" - }; - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ""; - indent = ""; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === "number") { - for (i = 0; i < space; i += 1) { - indent += " "; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === "string") { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== "function" && - (typeof replacer !== "object" || - typeof replacer.length !== "number")) { - throw new Error("JSON.stringify"); - } - -// Make a fake root object containing our value under the key of "". -// Return the result of stringifying the value. - - return str("", {"": value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== "function") { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k; - var v; - var value = holder[key]; - if (value && typeof value === "object") { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - rx_dangerous.lastIndex = 0; - if (rx_dangerous.test(text)) { - text = text.replace(rx_dangerous, function (a) { - return "\\u" + - ("0000" + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with "()" and "new" -// because they can cause invocation, and "=" because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with "@" (a non-JSON character). Second, we -// replace all simple value tokens with "]" characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or "]" or -// "," or ":" or "{" or "}". If that is so, then the text is safe for eval. - - if ( - rx_one.test( - text - .replace(rx_two, "@") - .replace(rx_three, "]") - .replace(rx_four, "") - ) - ) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The "{" operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval("(" + text + ")"); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return (typeof reviver === "function") - ? walk({"": j}, "") - : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError("JSON.parse"); - }; - } -}()); - -module.exports = JSON; \ No newline at end of file diff --git a/autojs/src/main/assets/modules/json2.js b/autojs/src/main/assets/modules/json2.js new file mode 100644 index 000000000..1a7dff5fb --- /dev/null +++ b/autojs/src/main/assets/modules/json2.js @@ -0,0 +1,765 @@ +// noinspection ES6ConvertVarToLetConst + +// json2.js +// 2017-06-12 +// Public Domain. +// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + +// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO +// NOT CONTROL. + +// This file creates a global JSON object containing two methods: stringify +// and parse. This file provides the ES5 JSON capability to ES3 systems. +// If a project might run on IE8 or earlier, then this file should be included. +// This file does nothing on ES5 systems. + +// JSON.stringify(value, replacer, space) +// value any JavaScript value, usually an object or array. +// replacer an optional parameter that determines how object +// values are stringified for objects. It can be a +// function or an array of strings. +// space an optional parameter that specifies the indentation +// of nested structures. If it is omitted, the text will +// be packed without extra whitespace. If it is a number, +// it will specify the number of spaces to indent at each +// level. If it is a string (such as "\t" or " "), +// it contains the characters used to indent at each level. +// This method produces a JSON text from a JavaScript value. +// When an object value is found, if the object contains a toJSON +// method, its toJSON method will be called and the result will be +// stringified. A toJSON method does not serialize: it returns the +// value represented by the name/value pair that should be serialized, +// or undefined if nothing should be serialized. The toJSON method +// will be passed the key associated with the value, and this will be +// bound to the value. + +// For example, this would serialize Dates as ISO strings. + +// Date.prototype.toJSON = function (key) { +// function f(n) { +// // Format integers to have at least two digits. +// return (n < 10) +// ? "0" + n +// : n; +// } +// return this.getUTCFullYear() + "-" + +// f(this.getUTCMonth() + 1) + "-" + +// f(this.getUTCDate()) + "T" + +// f(this.getUTCHours()) + ":" + +// f(this.getUTCMinutes()) + ":" + +// f(this.getUTCSeconds()) + "Z"; +// }; + +// You can provide an optional replacer method. It will be passed the +// key and value of each member, with this bound to the containing +// object. The value that is returned from your method will be +// serialized. If your method returns undefined, then the member will +// be excluded from the serialization. + +// If the replacer parameter is an array of strings, then it will be +// used to select the members to be serialized. It filters the results +// such that only members with keys listed in the replacer array are +// stringified. + +// Values that do not have JSON representations, such as undefined or +// functions, will not be serialized. Such values in objects will be +// dropped; in arrays they will be replaced with null. You can use +// a replacer function to replace those with JSON values. + +// JSON.stringify(undefined) returns undefined. + +// The optional space parameter produces a stringification of the +// value that is filled with line breaks and indentation to make it +// easier to read. + +// If the space parameter is a non-empty string, then that string will +// be used for indentation. If the space parameter is a number, then +// the indentation will be that many spaces. + +// Example: + +// text = JSON.stringify(["e", {pluribus: "unum"}]); +// // text is '["e",{"pluribus":"unum"}]' + +// text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t"); +// // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + +// text = JSON.stringify([new Date()], function (key, value) { +// return this[key] instanceof Date +// ? "Date(" + this[key] + ")" +// : value; +// }); +// // text is '["Date(---current time---)"]' + +// JSON.parse(text, reviver) +// This method parses a JSON text to produce an object or array. +// It can throw a SyntaxError exception. + +// The optional reviver parameter is a function that can filter and +// transform the results. It receives each of the keys and values, +// and its return value is used instead of the original value. +// If it returns what it received, then the structure is not modified. +// If it returns undefined then the member is deleted. + +// Example: + +// // Parse the text. Values that look like ISO date strings will +// // be converted to Date objects. + +// myData = JSON.parse(text, function (key, value) { +// var a; +// if (typeof value === "string") { +// a = +// /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); +// if (a) { +// return new Date(Date.UTC( +// +a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6] +// )); +// } +// return value; +// } +// }); + +// myData = JSON.parse( +// "[\"Date(09/09/2001)\"]", +// function (key, value) { +// var d; +// if ( +// typeof value === "string" +// && value.slice(0, 5) === "Date(" +// && value.slice(-1) === ")" +// ) { +// d = new Date(value.slice(5, -1)); +// if (d) { +// return d; +// } +// } +// return value; +// } +// ); + +// This is a reference implementation. You are free to copy, modify, or +// redistribute. + +/*jslint + eval, for, this +*/ + +/*property + JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + + +// Create a JSON object only if one does not already exist. We create the +// methods in a closure to avoid creating global variables. + +if (typeof JSON !== 'object') { + // noinspection JSValidateTypes + JSON = {}; +} + +(function basic() { + 'use strict'; + + var rx_one = /^[\],:{}\s]*$/; + var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g; + var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; + var rx_four = /(?:^|:|,)(?:\s*\[)+/g; + var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + + function f(n) { + // Format integers to have at least two digits. + return (n < 10) + ? '0' + n + : n; + } + + function this_value() { + return this.valueOf(); + } + + if (typeof Date.prototype.toJSON !== 'function') { + + Date.prototype.toJSON = function () { + + return isFinite(this.valueOf()) + ? ( + this.getUTCFullYear() + + '-' + + f(this.getUTCMonth() + 1) + + '-' + + f(this.getUTCDate()) + + 'T' + + f(this.getUTCHours()) + + ':' + + f(this.getUTCMinutes()) + + ':' + + f(this.getUTCSeconds()) + + 'Z' + ) + : null; + }; + + Boolean.prototype.toJSON = this_value; + Number.prototype.toJSON = this_value; + String.prototype.toJSON = this_value; + } + + var gap; + var indent; + var meta; + var rep; + + function quote(string) { + + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + + rx_escapable.lastIndex = 0; + return rx_escapable.test(string) + ? '"' + string.replace(rx_escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' + ? c + : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' + : '"' + string + '"'; + } + + function str(key, holder) { + + // Produce a string from holder[key]. + + var i; // The loop counter. + var k; // The member key. + var v; // The member value. + var length; + var mind = gap; + var partial; + var value = holder[key]; + + // If the value has a toJSON method, call it to obtain a replacement value. + + if ( + value + && typeof value === 'object' + && typeof value.toJSON === 'function' + ) { + value = value.toJSON(key); + } + + // If we were called with a replacer function, then call the replacer to + // obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + + // What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + + // JSON numbers must be finite. Encode non-finite numbers as null. + + return (isFinite(value)) + ? String(value) + : 'null'; + + case 'boolean': + + // If the value is a boolean or null, convert it to a string. Note: + // typeof null does not produce "null". The case is included here in + // the remote chance that this gets fixed someday. + + return String(value); + + // If the type is "object", we might be dealing with an object or an array or + // null. + + case 'object': + + // Due to a specification blunder in ECMAScript, typeof null is "object", + // so watch out for that case. + + if (!value) { + return 'null'; + } + + // Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + + // Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + + // The value is an array. Stringify every element. Use null as a placeholder + // for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + + // Join all of the elements together, separated with commas, and wrap them in + // brackets. + + v = partial.length === 0 + ? '[]' + : gap + ? ( + '[\n' + + gap + + partial.join(',\n' + gap) + + '\n' + + mind + + ']' + ) + : '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + + // If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + ( + (gap) + ? ': ' + : ':' + ) + v); + } + } + } + } else { + + // Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + ( + (gap) + ? ': ' + : ':' + ) + v); + } + } + } + } + + // Join all of the member texts together, separated with commas, + // and wrap them in braces. + + v = partial.length === 0 + ? '{}' + : gap + ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' + : '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + + // If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\\': '\\\\', + }; + + /** + * The JSON.stringify() method converts a JavaScript object or value to a JSON string, + * optionally replacing values if a replacer function is specified or optionally + * including only the specified properties if a replacer array is specified. + * @param {any} value - + * The value to convert to a JSON string. + * @param {(this: any, key: string, value: any) => any} [replacer] - + * A function that alters the behavior of the stringification process, + * or an array of String and Number that serve as an allowlist + * for selecting/filtering the properties of the value object to be included in the JSON string. + * If this value is null or not provided, + * all properties of the object are included in the resulting JSON string. + * @param {string | number} [space] - + * A String or Number object that's used to insert white space + * into the output JSON string for readability purposes. + * If this is a Number, it indicates the number of space characters + * to use as white space for indenting purposes; this number is capped + * at 10 (if it is greater, the value is just 10). + * Values less than 1 indicate that no space should be used. + * If this is a String, the string (or the first 10 characters of the string, + * if it's longer than that) is used as white space. + * If this parameter is not provided (or is null), no white space is used. + * @return {string} - + * A JSON string representing the given value, or undefined. + */ + JSON.stringify = function (value, replacer, space) { + + // The stringify method takes a value and an optional replacer, and an optional + // space parameter, and returns a JSON text. The replacer can be a function + // that can replace values, or an array of strings that will select the keys. + // A default replacer method can be provided. Use of the space parameter can + // produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + + // If the space parameter is a number, make an indent string containing that + // many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + + // If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + + // If there is a replacer, it must be a function or an array. + // Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && ( + typeof replacer !== 'object' + || typeof replacer.length !== 'number' + )) { + throw new Error('JSON.stringify'); + } + + // Make a fake root object containing our value under the key of "". + // Return the result of stringifying the value. + + return str('', {'': value}); + }; + } + + // If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + /** + * The JSON.parse() method parses a JSON string, + * constructing the JavaScript value or object described by the string. + * An optional reviver function can be provided to perform + * a transformation on the resulting object before it is returned. + * @param {string} text - + * The string to parse as JSON. See the JSON object for a description of JSON syntax. + * @param {(this: any, key: string, value: any) => any} reviver - + * If a function, this prescribes how the value + * originally produced by parsing is transformed, before being returned. + * @return {any} - + * The Object, Array, string, number, boolean, or null value corresponding to the given JSON text. + */ + JSON.parse = function (text, reviver) { + + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k; + var v; + var value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + rx_dangerous.lastIndex = 0; + if (rx_dangerous.test(text)) { + text = text.replace(rx_dangerous, function (a) { + return ( + '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4) + ); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with "()" and "new" + // because they can cause invocation, and "=" because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we + // replace all simple value tokens with "]" characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or "]" or + // "," or ":" or "{" or "}". If that is so, then the text is safe for eval. + + if ( + rx_one.test( + text + .replace(rx_two, '@') + .replace(rx_three, ']') + .replace(rx_four, ''), + ) + ) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The "{" operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return (typeof reviver === 'function') + ? walk({'': j}, '') + : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } +}()); + +(function cycle() { + /* + cycle.js + 2021-05-31 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + This code should be minified before deployment. + See https://www.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. + */ + + // The file uses the WeakMap feature of ES6. + + /*jslint eval */ + + /*property + $ref, decycle, forEach, get, indexOf, isArray, keys, length, push, + retrocycle, set, stringify, test + */ + + if (typeof JSON.decycle !== 'function') { + /** + * Make a deep copy of an object or array, assuring that there is at most one instance + * of each object or array in the resulting structure. + * The duplicate references (which might be forming cycles) are replaced + * with an object of the form {"$ref": PATH} where the PATH is + * a JSONPath string that locates the first occurance. + * + * If a replacer function is provided, then it will be called for each value. + * A replacer function receives a value and returns a replacement value. + * + * JSONPath is used to locate the unique object. + * $ indicates the top level of the object or array. + * [NUMBER] or [STRING] indicates a child element or property. + * @example + * var a = []; + * a[0] = a; + * // produces the string '[{"$ref":"$"}]'. + * return JSON.stringify(JSON.decycle(a)); + * @example + * let o = {}; + * o.a = o; + * + * let p = (JSON.retrocycle(JSON.parse(JSON.stringify(JSON.decycle(o))))); + * console.log(p.a.a.a === p.a); // true + */ + JSON.decycle = function decycle(object, replacer) { + 'use strict'; + + var objects = new WeakMap(); // object to path mappings + + return (function derez(value, path) { + + // The derez function recurses through the object, producing the deep copy. + + var old_path; // The path of an earlier occurance of value + var nu; // The new object or array + + // If a replacer function was provided, then call it to get a replacement value. + + if (replacer !== undefined) { + value = replacer(value); + } + + // typeof null === "object", so go on if this value is really an object but not + // one of the weird builtin objects. + + if ( + typeof value === 'object' + && value !== null + && !(value instanceof Boolean) + && !(value instanceof Date) + && !(value instanceof Number) + && !(value instanceof RegExp) + && !(value instanceof String) + ) { + + // If the value is an object or array, look to see if we have already + // encountered it. If so, return a {"$ref":PATH} object. This uses an + // ES6 WeakMap. + + old_path = objects.get(value); + if (old_path !== undefined) { + return {$ref: old_path}; + } + + // Otherwise, accumulate the unique value and its path. + + objects.set(value, path); + + // If it is an array, replicate the array. + + if (Array.isArray(value)) { + nu = []; + value.forEach(function (element, i) { + nu[i] = derez(element, path + '[' + i + ']'); + }); + } else { + + // If it is an object, replicate the object. + + nu = {}; + Object.keys(value).forEach(function (name) { + nu[name] = derez( + value[name], + path + '[' + JSON.stringify(name) + ']', + ); + }); + } + return nu; + } + return value; + }(object, '$')); + }; + } + + if (typeof JSON.retrocycle !== 'function') { + /** + * Restore an object that was reduced by decycle. + * Members whose values are objects of the form {$ref: PATH} are replaced with references to the value found by the PATH. + * This will restore cycles. + * The object will be mutated. + * + * The eval function is used to locate the values described by a PATH. + * The root object is kept in a $ variable. + * A regular expression is used to assure that the PATH is extremely well formed. + * The regexp contains nested quantifiers. + * That has been known to have extremely bad performance problems on some browsers for very long strings. + * A PATH is expected to be reasonably short. + * A PATH is allowed to belong to a very restricted subset of Goessner's JSONPath. + * @example + * var s = '[{"$ref":"$"}]'; + * // produces an array containing a single element which is the array itself. + * return JSON.retrocycle(JSON.parse(s)); + * @example + * let o = {}; + * o.a = o; + * + * let p = (JSON.retrocycle(JSON.parse(JSON.stringify(JSON.decycle(o))))); + * console.log(p.a.a.a === p.a); // true + */ + JSON.retrocycle = function retrocycle($) { + 'use strict'; + + var px = /^\$(?:\[(?:\d+|"(?:[^\\"\u0000-\u001f]|\\(?:[\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*")])*$/; + + (function rez(value) { + + // The rez function walks recursively through the object looking for $ref + // properties. When it finds one that has a value that is a path, then it + // replaces the $ref object with a reference to the value that is found by + // the path. + + if (value && typeof value === 'object') { + if (Array.isArray(value)) { + value.forEach(function (element, i) { + if (typeof element === 'object' && element !== null) { + var path = element['$ref']; + if (typeof path === 'string' && px.test(path)) { + value[i] = eval(path); + } else { + rez(element); + } + } + }); + } else { + Object.keys(value).forEach(function (name) { + var item = value[name]; + if (typeof item === 'object' && item !== null) { + var path = item['$ref']; + if (typeof path === 'string' && px.test(path)) { + value[name] = eval(path); + } else { + rez(item); + } + } + }); + } + } + }($)); + + return $; + }; + } +})(); + +module.exports = { + stringify: JSON.stringify, + parse: JSON.parse, + decycle: JSON.decycle, + retrocycle: JSON.retrocycle, +}; \ No newline at end of file diff --git a/autojs/src/main/assets/modules/lodash.js b/autojs/src/main/assets/modules/lodash.js index 76640dda2..bb543ff54 100644 --- a/autojs/src/main/assets/modules/lodash.js +++ b/autojs/src/main/assets/modules/lodash.js @@ -25,5 +25,5 @@ return G(2,n)},o.pick=$n,o.slice=function(n,t,r){var e=null==n?0:n.length;return return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return M(n)?n.length?A(n):[]:W(n)},o.values=W,o.extend=Bn,Y(o,o),o.clone=function(n){return V(n)?Nn(n)?A(n):k(n,_n(n)):n},o.escape=function(n){return(n=Q(n))&&rn.test(n)?n.replace(tn,fn):n},o.every=function(n,t,r){return t=r?Z:t,f(n,g(t))},o.find=An,o.forEach=z,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=q,o.identity=X,o.indexOf=P,o.isArguments=n,o.isArray=Nn,o.isBoolean=function(n){return true===n||false===n||H(n)&&"[object Boolean]"==hn.call(n); },o.isDate=function(n){return H(n)&&"[object Date]"==hn.call(n)},o.isEmpty=function(t){return M(t)&&(Nn(t)||L(t)||U(t.splice)||n(t))?!t.length:!_n(t).length},o.isEqual=function(n,t){return b(n,t)},o.isFinite=function(n){return typeof n=="number"&&gn(n)},o.isFunction=U,o.isNaN=function(n){return K(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=K,o.isObject=V,o.isRegExp=function(n){return H(n)&&"[object RegExp]"==hn.call(n)},o.isString=L,o.isUndefined=function(n){return n===Z},o.last=function(n){ var t=null==n?0:n.length;return t?n[t-1]:Z},o.max=function(n){return n&&n.length?a(n,X,v):Z},o.min=function(n){return n&&n.length?a(n,X,_):Z},o.noConflict=function(){return on._===this&&(on._=vn),this},o.noop=function(){},o.reduce=C,o.result=function(n,t,r){return t=null==n?Z:n[t],t===Z&&(t=r),U(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=M(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?Z:t,E(n,g(t))},o.uniqueId=function(n){var t=++sn;return Q(n)+t},o.each=z,o.first=q,Y(o,function(){ -var n={};return s(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.17.5",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n); +var n={};return s(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.17.15",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n); })}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return w(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(on._=o, define(function(){return o})):cn?((cn.exports=o)._=o,un._=o):on._=o}).call(this); \ No newline at end of file diff --git a/autojs/src/main/java/com/stardust/autojs/AutoJs.java b/autojs/src/main/java/com/stardust/autojs/AutoJs.java index d65b77808..c02469161 100644 --- a/autojs/src/main/java/com/stardust/autojs/AutoJs.java +++ b/autojs/src/main/java/com/stardust/autojs/AutoJs.java @@ -6,6 +6,7 @@ import android.os.Build; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -233,6 +234,7 @@ public ActivityInfoProvider getInfoProvider() { return mActivityInfoProvider; } + @NonNull @Override public AccessibilityNotificationObserver getNotificationObserver() { return mNotificationObserver; diff --git a/autojs/src/main/java/com/stardust/autojs/Config.java b/autojs/src/main/java/com/stardust/autojs/Config.java index d55a78fc8..9a1ec70b7 100644 --- a/autojs/src/main/java/com/stardust/autojs/Config.java +++ b/autojs/src/main/java/com/stardust/autojs/Config.java @@ -2,7 +2,7 @@ import android.content.Context; import android.content.SharedPreferences; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; /** * Created by Stardust on 2017/12/8. @@ -11,7 +11,7 @@ public class Config { private static Config sInstance; - private SharedPreferences mSharedPreferences; + private final SharedPreferences mSharedPreferences; private final Context mContext; public Config(Context context) { diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java index a42ee0a34..aeece1e24 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java @@ -133,8 +133,8 @@ public int getFlags() { public void setFlags(int flags) { mFlags = flags; - if ((mFlags & FLAG_USE_USAGE_STATS) != 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (!AppOpsKt.isOpPermissionGranted(mContext, AppOpsManager.OPSTR_GET_USAGE_STATS)) { + if ((mFlags & FLAG_USE_USAGE_STATS) != 0) { + if (!AppOpsKt.isUsageStatsPermissionGranted(mContext)) { IntentUtil.requestAppUsagePermission(mContext); throw new SecurityException("没有\"查看使用情况\"权限"); } diff --git a/autojs/src/main/java/com/stardust/autojs/core/activity/ActivityInfoProvider.kt b/autojs/src/main/java/com/stardust/autojs/core/activity/ActivityInfoProvider.kt index 331cae1ee..fa9af9c1e 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/activity/ActivityInfoProvider.kt +++ b/autojs/src/main/java/com/stardust/autojs/core/activity/ActivityInfoProvider.kt @@ -1,18 +1,16 @@ package com.stardust.autojs.core.activity import android.accessibilityservice.AccessibilityService -import android.app.AppOpsManager import android.app.usage.UsageStatsManager import android.content.ComponentName import android.content.Context import android.content.pm.PackageManager import android.os.Build -import android.os.SystemClock import android.util.Log import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityWindowInfo import androidx.annotation.RequiresApi -import com.stardust.app.isOpPermissionGranted +import com.stardust.app.isUsageStatsPermissionGranted import com.stardust.autojs.core.util.Shell import com.stardust.view.accessibility.AccessibilityDelegate import java.util.regex.Pattern @@ -27,6 +25,7 @@ class ActivityInfoProvider(private val context: Context) : AccessibilityDelegate @Volatile private var mLatestPackage: String = "" + @Volatile private var mLatestActivity: String = "" private var mLatestComponentFromShell: ComponentName? = null @@ -40,7 +39,7 @@ class ActivityInfoProvider(private val context: Context) : AccessibilityDelegate if (useShell && compFromShell != null) { return compFromShell.packageName } - if (useUsageStats && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + if (useUsageStats) { mLatestPackage = getLatestPackageByUsageStats() } return mLatestPackage @@ -78,19 +77,17 @@ class ActivityInfoProvider(private val context: Context) : AccessibilityDelegate override fun onAccessibilityEvent(service: AccessibilityService, event: AccessibilityEvent): Boolean { if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - val window = service.getWindow(event.windowId) - if (window?.isFocused != false) { - setLatestComponent(event.packageName, event.className) - return false - } + val window = service.getWindow(event.windowId) + if (window?.isFocused != false) { + setLatestComponent(event.packageName, event.className) + return false } } return false } fun getLatestPackageByUsageStatsIfGranted(): String { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1 && context.isOpPermissionGranted(AppOpsManager.OPSTR_GET_USAGE_STATS)) { + if (context.isUsageStatsPermissionGranted()) { return getLatestPackageByUsageStats() } return mLatestPackage @@ -103,7 +100,7 @@ class ActivityInfoProvider(private val context: Context) : AccessibilityDelegate return } val latestPackage = matcher.group(1) - if (latestPackage.contains(":")) { + if (latestPackage != null && latestPackage.contains(":")) { return } val latestActivity = if (matcher.groupCount() >= 2) { @@ -112,10 +109,12 @@ class ActivityInfoProvider(private val context: Context) : AccessibilityDelegate "" } Log.d(LOG_TAG, "setLatestComponent: output = $output, comp = $latestPackage/$latestActivity") - mLatestComponentFromShell = ComponentName(latestPackage, latestActivity) + if (latestPackage != null) { + mLatestComponentFromShell = ComponentName(latestPackage, latestActivity) + } } - private fun createShell(dumpInterval: Int): Shell { + private fun createShell(@Suppress("SameParameterValue") dumpInterval: Int): Shell { val shell = Shell(true) shell.setCallback(object : Shell.Callback { override fun onOutput(str: String) { diff --git a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt index afbb721ba..177d178b0 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt +++ b/autojs/src/main/java/com/stardust/autojs/core/graphics/ScriptCanvasView.kt @@ -57,8 +57,10 @@ class ScriptCanvasView(context: Context, private val mScriptRuntime: ScriptRunti canvas = lockCanvas() scriptCanvas.setCanvas(canvas) emit("draw", scriptCanvas, this@ScriptCanvasView) - unlockCanvasAndPost(canvas) - canvas = null + if (canvas != null) { + unlockCanvasAndPost(canvas) + canvas = null + } val dt = mTimePerDraw - (SystemClock.uptimeMillis() - time) if (dt > 0) { sleep(dt) diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java b/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java index 9eb1ae6cc..7b0ea3b47 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java @@ -37,12 +37,10 @@ public Match(Point point, double similarity) { this.similarity = similarity; } + @SuppressWarnings("NullableProblems") @Override public String toString() { - return "Match{" + - "point=" + point + - ", similarity=" + similarity + - '}'; + return String.format("Match{point=%s, similarity=%s}", point, similarity); } } @@ -68,7 +66,6 @@ public static Point fastTemplateMatching(Mat img, Mat template, int matchMethod, * @param weakThreshold 弱阈值。该值用于在每一轮模板匹配中检验是否继续匹配。如果相似度小于该值,则不再继续匹配。 * @param strictThreshold 强阈值。该值用于检验最终匹配结果,以及在每一轮匹配中如果相似度大于该值则直接返回匹配结果。 * @param maxLevel 图像金字塔的层数 - * @return */ public static List fastTemplateMatching(Mat img, Mat template, int matchMethod, float weakThreshold, float strictThreshold, int maxLevel, int limit) { TimingLogger logger = new TimingLogger(LOG_TAG, "fast_tm"); @@ -90,6 +87,8 @@ public static List fastTemplateMatching(Mat img, Mat template, int matchM if (previousMatchResult.isEmpty()) { // 如果不是第一次匹配,并且不满足shouldContinueMatching的条件,则直接退出匹配 if (!isFirstMatching && !shouldContinueMatching(level, maxLevel)) { + releaseIfNeeded(src, img); + releaseIfNeeded(currentTemplate, template); break; } Mat matchResult = matchTemplate(src, currentTemplate, matchMethod); @@ -107,10 +106,8 @@ public static List fastTemplateMatching(Mat img, Mat template, int matchM } } - if (src != img) - OpenCVHelper.release(src); - if (currentTemplate != template) - OpenCVHelper.release(currentTemplate); + releaseIfNeeded(src, img); + releaseIfNeeded(currentTemplate, template); logger.addSplit("level:" + level + ", result:" + previousMatchResult); @@ -138,6 +135,11 @@ public static List fastTemplateMatching(Mat img, Mat template, int matchM return finalMatchResult; } + private static void releaseIfNeeded(Mat src, Mat ref) { + if (src != ref) { + OpenCVHelper.release(src); + } + } private static Mat getPyramidDownAtLevel(Mat m, int level) { if (level == 0) { @@ -190,7 +192,7 @@ private static Rect getROI(Point p, Mat src, Mat currentTemplate) { private static int selectPyramidLevel(Mat img, Mat template) { int minDim = Nath.min(img.rows(), img.cols(), template.rows(), template.cols()); //这里选取16为图像缩小后的最小宽高,从而用log(2, minDim / 16)得到最多可以经过几次缩小。 - int maxLevel = (int) (Math.log(minDim / 16) / Math.log(2)); + int maxLevel = (int) (Math.log(minDim >> 4) / Math.log(2)); if (maxLevel < 0) { return 0; } diff --git a/autojs/src/main/java/com/stardust/autojs/core/opencv/OpenCVHelper.java b/autojs/src/main/java/com/stardust/autojs/core/opencv/OpenCVHelper.java index 531091b3d..1c927059b 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/opencv/OpenCVHelper.java +++ b/autojs/src/main/java/com/stardust/autojs/core/opencv/OpenCVHelper.java @@ -7,11 +7,6 @@ import android.os.Looper; import android.util.Log; -import com.afollestad.materialdialogs.MaterialDialog; -import com.stardust.app.DialogUtils; - -import org.opencv.android.InstallCallbackInterface; -import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; @@ -25,7 +20,7 @@ public interface InitializeCallback { void onInitFinish(); } - private static final String LOG_TAG = "OpenCVHelper"; + private static final String TAG = "OpenCVHelper"; private static boolean sInitialized = false; public static MatOfPoint newMatOfPoint(Mat mat) { @@ -49,19 +44,20 @@ public synchronized static boolean isInitialized() { } public synchronized static void initIfNeeded(Context context, InitializeCallback callback) { - if (sInitialized) { - callback.onInitFinish(); - return; - } - sInitialized = true; - if (Looper.getMainLooper() == Looper.myLooper()) { - new Thread(() -> { - OpenCVLoader.initDebug(); - callback.onInitFinish(); - }).start(); + if (!sInitialized) { + sInitialized = true; + if (Looper.getMainLooper() == Looper.myLooper()) { + new Thread(() -> init(callback)).start(); + } else { + init(callback); + } } else { - OpenCVLoader.initDebug(); callback.onInitFinish(); } } -} + + private static void init(InitializeCallback callback) { + OpenCVLoader.initDebug(); + callback.onInitFinish(); + } +} \ No newline at end of file diff --git a/autojs/src/main/java/com/stardust/autojs/core/pref/Pref.kt b/autojs/src/main/java/com/stardust/autojs/core/pref/Pref.kt index 846b2bc8d..8f4f5c3df 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/pref/Pref.kt +++ b/autojs/src/main/java/com/stardust/autojs/core/pref/Pref.kt @@ -1,6 +1,6 @@ package com.stardust.autojs.core.pref -import android.preference.PreferenceManager +import androidx.preference.PreferenceManager import com.stardust.app.GlobalAppContext object Pref { diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java index cbbcf64ab..cdc7d94ea 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java @@ -284,11 +284,6 @@ public void setContent(int newContentRes, @Nullable Object... formatArgs) { } } - @Deprecated - public void setMessage(CharSequence message) { - mDialog.setMessage(message); - } - @Nullable public ArrayList getItems() { return mDialog.getItems(); diff --git a/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java b/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java index c1a44a2b1..993721f71 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java +++ b/autojs/src/main/java/com/stardust/autojs/core/util/Shell.java @@ -2,7 +2,7 @@ import android.content.Context; import android.os.Handler; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import android.util.Log; import com.stardust.autojs.runtime.ScriptRuntime; diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java index b4d5f02d1..71832dbc6 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java @@ -1,7 +1,7 @@ package com.stardust.autojs.engine; import android.content.Context; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import android.util.Log; import com.stardust.autojs.core.util.ProcessShell; diff --git a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java index 46312834b..8dd8bb06b 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java @@ -13,17 +13,16 @@ /** * Created by Stardust on 2017/4/2. *

- *

* A ScriptEngine is created by {@link ScriptEngineManager#createEngine(String, int)} ()}, and then can be - * used to execute script with {@link ScriptEngine#execute(ScriptSource)} in the **same** thread. + * used to execute script with {@link ScriptEngine#execute(ScriptSource)} in the same thread. * When the execution finish successfully, the engine should be destroy in the thread that created it. - *

+ *
* If you want to stop the engine in other threads, you should call {@link ScriptEngine#forceStop()}. + *

*/ public interface ScriptEngine { - String TAG_ENV_PATH = "env_path"; String TAG_SOURCE = "source"; String TAG_WORKING_DIRECTORY = "execute_path"; diff --git a/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.kt b/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.kt index 3044be3bb..d6d3168d5 100644 --- a/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.kt +++ b/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.kt @@ -8,13 +8,15 @@ import java.util.* /** * Created by Stardust on 2017/2/1. */ -data class ExecutionConfig(var workingDirectory: String = "", - var path: Array = emptyArray(), - var intentFlags: Int = 0, - var delay: Long = 0, - var interval: Long = 0, - var loopTimes: Int = 1, - var scriptConfig: ScriptConfig = ScriptConfig()) : Parcelable { +data class ExecutionConfig( + var workingDirectory: String = "", + var path: Array = emptyArray(), + var intentFlags: Int = 0, + var delay: Long = 0, + var interval: Long = 0, + var loopTimes: Int = 1, + var scriptConfig: ScriptConfig = ScriptConfig() +) : Parcelable { private val mArguments = HashMap() @@ -23,12 +25,13 @@ data class ExecutionConfig(var workingDirectory: String = "", get() = mArguments constructor(parcel: Parcel) : this( - parcel.readString().orEmpty(), - parcel.createStringArray().orEmpty(), - parcel.readInt(), - parcel.readLong(), - parcel.readLong(), - parcel.readInt()) + parcel.readString().orEmpty(), + parcel.createStringArray().orEmpty(), + parcel.readInt(), + parcel.readLong(), + parcel.readLong(), + parcel.readInt() + ) fun setArgument(key: String, `object`: Any) { mArguments[key] = `object` @@ -38,6 +41,10 @@ data class ExecutionConfig(var workingDirectory: String = "", return mArguments[key] } + fun getArguments(): Any { + return mArguments + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java b/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java index f1124e631..e189f645e 100644 --- a/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java +++ b/autojs/src/main/java/com/stardust/autojs/rhino/AndroidClassLoader.java @@ -6,7 +6,7 @@ import com.stardust.pio.PFiles; import com.stardust.util.MD5; -import net.lingala.zip4j.core.ZipFile; +import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters; @@ -17,7 +17,6 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; @@ -29,14 +28,13 @@ public class AndroidClassLoader extends ClassLoader implements GeneratedClassLoader { - private static final String LOG_TAG = "AndroidClassLoader"; private final ClassLoader parent; private final List mDexClassLoaders = new ArrayList<>(); private final File mCacheDir; /** - * Create a new instance with the given parent classloader and cache dierctory + * Create a new instance with the given parent classloader and cache directory * * @param parent the parent * @param dir the cache directory @@ -47,7 +45,9 @@ public AndroidClassLoader(ClassLoader parent, File dir) { if (dir.exists()) { PFiles.deleteFilesOfDir(dir); } else { - dir.mkdirs(); + if (!dir.mkdirs()) { + Log.e(LOG_TAG, "dir.mkdirs() failed"); + } } } @@ -63,14 +63,15 @@ public Class defineClass(String name, byte[] data) { final ZipFile zipFile = new ZipFile(classFile); final ZipParameters parameters = new ZipParameters(); parameters.setFileNameInZip(name.replace('.', '/') + ".class"); - parameters.setSourceExternalStream(true); zipFile.addStream(new ByteArrayInputStream(data), parameters); return dexJar(classFile, null).loadClass(name); - } catch (IOException | ZipException | ClassNotFoundException e) { + } catch (IOException | ClassNotFoundException e) { throw new FatalLoadingException(e); } finally { if (classFile != null) { - classFile.delete(); + if (!classFile.delete()) { + Log.e(LOG_TAG, "classFile.delete() failed"); + } } } } @@ -79,10 +80,14 @@ private File generateTempFile(String name, boolean create) throws IOException { File file = new File(mCacheDir, name.hashCode() + System.currentTimeMillis() + ".jar"); if (create) { if (!file.exists()) { - file.createNewFile(); + if (!file.createNewFile()) { + Log.e(LOG_TAG, "file.createNewFile() failed"); + } } } else { - file.delete(); + if (!file.delete()) { + Log.e(LOG_TAG, "file.delete() failed"); + } } return file; } @@ -101,17 +106,17 @@ public void loadJar(File jar) throws IOException { final File classFile = generateTempFile(jar.getPath(), false); final ZipFile zipFile = new ZipFile(classFile); final ZipFile jarFile = new ZipFile(jar); - //noinspection unchecked - for (FileHeader header : (List) jarFile.getFileHeaders()) { + for (FileHeader header : jarFile.getFileHeaders()) { if (!header.isDirectory()) { final ZipParameters parameters = new ZipParameters(); parameters.setFileNameInZip(header.getFileName()); - parameters.setSourceExternalStream(true); zipFile.addStream(jarFile.getInputStream(header), parameters); } } dexJar(classFile, dexFile); - classFile.delete(); + if (!classFile.delete()) { + Log.e(LOG_TAG, "classFile.delete() failed"); + } } catch (ZipException e) { throw new IOException(e); } @@ -144,7 +149,9 @@ private DexClassLoader dexJar(File classFile, File dexFile) throws IOException { Main.run(arguments); DexClassLoader loader = loadDex(dexFile); if (isTmpDex) { - dexFile.delete(); + if (!dexFile.delete()) { + Log.e(LOG_TAG, "dexFile.delete() failed"); + } } return loader; } diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java index 302b34bf4..8acda87d5 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java @@ -215,9 +215,7 @@ protected ScriptRuntime(Builder builder) { this.automator = new SimpleActionAutomator(accessibilityBridge, this); automator.setScreenMetrics(mScreenMetrics); this.info = accessibilityBridge.getInfoProvider(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - images = new Images(context, this, builder.mScreenCaptureRequester); - } + images = new Images(context, this, builder.mScreenCaptureRequester); engines = new Engines(builder.mEngineService, this); dialogs = new Dialogs(this); device = new Device(context); diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java index 75d0ce72a..82ab36d3d 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java @@ -4,7 +4,6 @@ import android.content.Context; import android.text.TextUtils; import android.view.ContextThemeWrapper; -import android.widget.CompoundButton; import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.Theme; @@ -13,10 +12,8 @@ import com.stardust.autojs.annotation.ScriptVariable; import com.stardust.autojs.core.ui.dialog.BlockedMaterialDialog; import com.stardust.autojs.core.ui.dialog.JsDialogBuilder; -import com.stardust.autojs.runtime.ScriptBridges; import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.util.ArrayUtils; -import com.stardust.util.UiHandler; /** * Created by Stardust on 2017/5/8. diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java index 8c5a4e968..0baede944 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java @@ -15,6 +15,7 @@ import androidx.annotation.RequiresApi; import android.util.Base64; +import android.util.Log; import android.view.Gravity; import com.stardust.autojs.annotation.ScriptVariable; @@ -44,8 +45,6 @@ import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; import java.util.List; /** @@ -54,6 +53,8 @@ @RequiresApi(api = Build.VERSION_CODES.KITKAT) public class Images { + private static final String TAG = Images.class.getSimpleName(); + private ScriptRuntime mScriptRuntime; private ScreenCaptureRequester mScreenCaptureRequester; private ScreenCapturer mScreenCapturer; @@ -348,21 +349,22 @@ public void initOpenCvIfNeeded() { } Activity currentActivity = mScriptRuntime.app.getCurrentActivity(); Context context = currentActivity == null ? mContext : currentActivity; - mScriptRuntime.console.info("opencv initializing"); + Log.i(TAG, "opencv: initializing"); if (Looper.myLooper() == Looper.getMainLooper()) { - OpenCVHelper.initIfNeeded(context, () -> { - mOpenCvInitialized = true; - mScriptRuntime.console.info("opencv initialized"); - }); + OpenCVHelper.initIfNeeded(context, this::initSuccessfully); } else { VolatileDispose result = new VolatileDispose<>(); OpenCVHelper.initIfNeeded(context, () -> { - mOpenCvInitialized = true; + initSuccessfully(); result.setAndNotify(true); - mScriptRuntime.console.info("opencv initialized"); }); result.blockedGet(); } } + + private void initSuccessfully() { + mOpenCvInitialized = true; + Log.i(TAG, "opencv: initialized"); + } } diff --git a/autojs/src/main/java/org/mozilla/javascript/VMBridge_custom.java b/autojs/src/main/java/org/mozilla/javascript/VMBridge_custom.java index bcb675413..a3aeedada 100644 --- a/autojs/src/main/java/org/mozilla/javascript/VMBridge_custom.java +++ b/autojs/src/main/java/org/mozilla/javascript/VMBridge_custom.java @@ -5,14 +5,14 @@ import com.stardust.autojs.engine.RhinoJavaScriptEngine; -import org.mozilla.javascript.jdk15.VMBridge_jdk15; +import org.mozilla.javascript.jdk18.VMBridge_jdk18; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -public class VMBridge_custom extends VMBridge_jdk15 { +public class VMBridge_custom extends VMBridge_jdk18 { private static final String LOG_TAG = "VMBridge_custom"; @@ -73,9 +73,9 @@ protected Object newInterfaceProxy(Object proxyHelper, ContextFactory cf, Interf } catch (InvocationTargetException var10) { throw Context.throwAsScriptRuntimeEx(var10); } catch (IllegalAccessException var11) { - throw Kit.initCause(new IllegalStateException(), var11); + throw new IllegalStateException(var11); } catch (InstantiationException var12) { - throw Kit.initCause(new IllegalStateException(), var12); + throw new IllegalStateException(var12); } } diff --git a/automator/build.gradle b/automator/build.gradle index 89a009f68..d166c37d6 100644 --- a/automator/build.gradle +++ b/automator/build.gradle @@ -1,23 +1,25 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_16 + } +} android { compileSdkVersion versions.compile - buildToolsVersion versions.buildTool defaultConfig { minSdkVersion versions.mini targetSdkVersion versions.target - versionCode 1 - versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_16 + targetCompatibility JavaVersion.VERSION_16 } lintOptions { abortOnError false @@ -31,17 +33,11 @@ android { } repositories { - flatDir { - dirs 'libs' - } google() } dependencies { - androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1-alpha01', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - testImplementation 'junit:junit:4.12' - api 'androidx.appcompat:appcompat:1.0.2' - api project(path: ':common') + testImplementation 'junit:junit:4.13.2' + api 'androidx.appcompat:appcompat:1.4.0' + api project(':common') } diff --git a/automator/src/main/java/com/stardust/automator/GlobalActionAutomator.kt b/automator/src/main/java/com/stardust/automator/GlobalActionAutomator.kt index 0d6fa4161..1ec6c91fb 100644 --- a/automator/src/main/java/com/stardust/automator/GlobalActionAutomator.kt +++ b/automator/src/main/java/com/stardust/automator/GlobalActionAutomator.kt @@ -117,18 +117,21 @@ class GlobalActionAutomator(private val mHandler: Handler?, private val serviceP private fun gesturesWithoutHandler(description: GestureDescription): Boolean { prepareLooperIfNeeded() val result = VolatileBox(false) - val handler = Handler(Looper.myLooper()) - service.dispatchGesture(description, object : AccessibilityService.GestureResultCallback() { - override fun onCompleted(gestureDescription: GestureDescription) { - result.set(true) - quitLoop() - } - - override fun onCancelled(gestureDescription: GestureDescription) { - result.set(false) - quitLoop() - } - }, handler) + val myLooper = Looper.myLooper() + if (myLooper != null) { + val handler = Handler(myLooper) + service.dispatchGesture(description, object : AccessibilityService.GestureResultCallback() { + override fun onCompleted(gestureDescription: GestureDescription) { + result.set(true) + quitLoop() + } + + override fun onCancelled(gestureDescription: GestureDescription) { + result.set(false) + quitLoop() + } + }, handler) + } Looper.loop() return result.get() } diff --git a/automator/src/main/java/com/stardust/automator/search/BFS.kt b/automator/src/main/java/com/stardust/automator/search/BFS.kt index 9f002b1f1..fed2b5edf 100644 --- a/automator/src/main/java/com/stardust/automator/search/BFS.kt +++ b/automator/src/main/java/com/stardust/automator/search/BFS.kt @@ -12,7 +12,7 @@ object BFS : SearchAlgorithm { val queue = ArrayDeque() queue.add(root) while (!queue.isEmpty()) { - val top = queue.poll() + val top = queue.poll()!! val isTarget = filter.filter(top) if (isTarget) { result.add(top) diff --git a/automator/src/main/java/com/stardust/automator/simple_action/Able.kt b/automator/src/main/java/com/stardust/automator/simple_action/Able.kt index 345a4523e..6303ed09e 100644 --- a/automator/src/main/java/com/stardust/automator/simple_action/Able.kt +++ b/automator/src/main/java/com/stardust/automator/simple_action/Able.kt @@ -16,28 +16,28 @@ interface Able { val ABLE_MAP = SparseArrayEntries() .entry(AccessibilityNodeInfo.ACTION_CLICK, object : Able { - override fun isAble(nodeInfo: UiObject): Boolean { - return nodeInfo.isClickable + override fun isAble(node: UiObject): Boolean { + return node.isClickable } }) .entry(AccessibilityNodeInfo.ACTION_LONG_CLICK, object : Able { - override fun isAble(nodeInfo: UiObject): Boolean { - return nodeInfo.isLongClickable + override fun isAble(node: UiObject): Boolean { + return node.isLongClickable } }) .entry(AccessibilityNodeInfo.ACTION_FOCUS, object : Able { - override fun isAble(nodeInfo: UiObject): Boolean { - return nodeInfo.isFocusable + override fun isAble(node: UiObject): Boolean { + return node.isFocusable } }) .entry(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, object : Able { - override fun isAble(nodeInfo: UiObject): Boolean { - return nodeInfo.isScrollable + override fun isAble(node: UiObject): Boolean { + return node.isScrollable } }) .entry(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD, object : Able { - override fun isAble(nodeInfo: UiObject): Boolean { - return nodeInfo.isScrollable + override fun isAble(node: UiObject): Boolean { + return node.isScrollable } }) .sparseArray() diff --git a/automator/src/main/java/com/stardust/automator/simple_action/SearchUpTargetAction.kt b/automator/src/main/java/com/stardust/automator/simple_action/SearchUpTargetAction.kt index b02f091e5..a54002477 100644 --- a/automator/src/main/java/com/stardust/automator/simple_action/SearchUpTargetAction.kt +++ b/automator/src/main/java/com/stardust/automator/simple_action/SearchUpTargetAction.kt @@ -7,20 +7,20 @@ import com.stardust.automator.UiObject * Created by Stardust on 2017/1/27. */ -class SearchUpTargetAction(action: Int, filter: FilterAction.Filter) : SearchTargetAction(action, filter) { +class SearchUpTargetAction(action: Int, filter: Filter) : SearchTargetAction(action, filter) { private val mAble: Able = Able.ABLE_MAP.get(action) - override fun searchTarget(n: UiObject?): UiObject? { - var node = n + override fun searchTarget(node: UiObject?): UiObject? { + var o = node var i = 0 - while (node != null && !mAble.isAble(node)) { + while (o != null && !mAble.isAble(o)) { i++ if (i > LOOP_MAX) { return null } - node = node.parent() + o = o.parent() } - return node + return o } override fun toString(): String { @@ -31,8 +31,6 @@ class SearchUpTargetAction(action: Int, filter: FilterAction.Filter) : SearchTar } companion object { - - private val TAG = SearchUpTargetAction::class.java!!.getSimpleName() - private val LOOP_MAX = 20 + private const val LOOP_MAX = 20 } } diff --git a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoAllocator.kt b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoAllocator.kt index fa3ede4f2..59c2876a0 100644 --- a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoAllocator.kt +++ b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoAllocator.kt @@ -83,8 +83,9 @@ open class AccessibilityNodeInfoAllocator { try { key.recycle() notRecycledCount++ - if (DEBUG) + if (DEBUG && value !== null) { Log.w(TAG, value) + } } catch (ignored: IllegalStateException) { } diff --git a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoHelper.kt b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoHelper.kt index f1a05900a..0f2822446 100644 --- a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoHelper.kt +++ b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNodeInfoHelper.kt @@ -1,10 +1,8 @@ package com.stardust.view.accessibility import android.graphics.Rect -import androidx.core.view.accessibility.AccessibilityNodeInfoCompat import android.view.accessibility.AccessibilityNodeInfo - -import com.stardust.automator.UiObject +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat /** * Created by Stardust on 2017/3/6. @@ -20,6 +18,7 @@ object AccessibilityNodeInfoHelper { * @param height pixel height of the display * @return null if node is null, else a Rect containing visible bounds */ + @Suppress("unused") fun getVisibleBoundsInScreen(node: AccessibilityNodeInfo?, width: Int, height: Int): Rect? { if (node == null) { return null @@ -33,7 +32,6 @@ object AccessibilityNodeInfoHelper { displayRect.left = 0 displayRect.right = width displayRect.bottom = height - val intersect = nodeRect.intersect(displayRect) return nodeRect } diff --git a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNotificationObserver.kt b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNotificationObserver.kt index 820cdf528..bf9dfb27a 100644 --- a/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNotificationObserver.kt +++ b/automator/src/main/java/com/stardust/view/accessibility/AccessibilityNotificationObserver.kt @@ -1,6 +1,5 @@ package com.stardust.view.accessibility -import android.accessibilityservice.* import android.content.Context import android.util.Log import android.view.accessibility.AccessibilityEvent @@ -8,7 +7,6 @@ import android.view.accessibility.AccessibilityEvent import com.stardust.notification.Notification import java.util.ArrayList -import java.util.Collections import java.util.concurrent.CopyOnWriteArrayList /** @@ -81,14 +79,14 @@ class AccessibilityNotificationObserver(private val mContext: Context) : Notific return false } if (list != null) { - onToast(event, Toast(event.packageName.toString(), list)) + onToast(Toast(event.packageName.toString(), list)) } } return false } - private fun onToast(event: AccessibilityEvent, toast: Toast) { + private fun onToast(toast: Toast) { for (listener in mToastListeners) { try { listener.onToast(toast) diff --git a/build.gradle b/build.gradle index a50fb89ef..365e3af6c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,29 +1,50 @@ import groovy.json.JsonSlurper +import org.apache.groovy.json.internal.LazyMap // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.10' + ext.kotlin_version = "1.6.0" repositories { + mavenCentral() google() - jcenter() + maven { url "https://maven.aliyun.com/repository/apache-snapshots" } + maven { url "https://maven.aliyun.com/repository/central" } + maven { url "https://maven.aliyun.com/repository/google" } + maven { url "https://maven.aliyun.com/repository/gradle-plugin" } + maven { url "https://maven.aliyun.com/repository/grails-core" } + maven { url "https://maven.aliyun.com/repository/jcenter" } + maven { url "https://maven.aliyun.com/repository/public" } + maven { url "https://maven.aliyun.com/repository/spring" } + maven { url "https://maven.aliyun.com/repository/spring-plugin" } + maven { url "https://repo.huaweicloud.com/repository/maven" } } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:7.2.0-alpha05' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc2' + classpath "com.jakewharton:butterknife-gradle-plugin:10.2.1" + classpath "org.codehaus.groovy:groovy-json:3.0.8" } } allprojects { repositories { - jcenter() - maven { - url "https://jitpack.io" - } + maven { url "https://jitpack.io" } + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + mavenCentral() + maven { url "https://maven.aliyun.com/repository/apache-snapshots" } + maven { url "https://maven.aliyun.com/repository/central" } + maven { url "https://maven.aliyun.com/repository/google" } + maven { url "https://maven.aliyun.com/repository/gradle-plugin" } + maven { url "https://maven.aliyun.com/repository/grails-core" } + maven { url "https://maven.aliyun.com/repository/jcenter" } + maven { url "https://maven.aliyun.com/repository/public" } + maven { url "https://maven.aliyun.com/repository/spring" } + maven { url "https://maven.aliyun.com/repository/spring-plugin" } + maven { url "https://repo.huaweicloud.com/repository/maven" } google() - maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } } @@ -32,5 +53,5 @@ task clean(type: Delete) { } ext { - versions = new JsonSlurper().parse(file('./project-versions.json')) + versions = new JsonSlurper().parse(file("./project-versions.json")) as LazyMap } diff --git a/common/build.gradle b/common/build.gradle index d14f76396..eb7668ed4 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,21 +1,26 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' + +tasks.withType(JavaCompile) { + options.compilerArgs << '-Xlint:deprecation' +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_16 + } +} android { compileSdkVersion versions.compile - buildToolsVersion versions.buildTool defaultConfig { minSdkVersion versions.mini targetSdkVersion versions.target - versionCode 1 - versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } - buildTypes { release { minifyEnabled false @@ -25,14 +30,15 @@ android { lintOptions { abortOnError false } + compileOptions { + sourceCompatibility JavaVersion.VERSION_16 + targetCompatibility JavaVersion.VERSION_16 + } } dependencies { - androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1-alpha01', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - api 'androidx.annotation:annotation:1.0.0' + api 'androidx.annotation:annotation:1.3.0' api 'com.github.hyb1996:settingscompat:1.1.5' } diff --git a/common/src/main/java/com/stardust/app/AppOps.kt b/common/src/main/java/com/stardust/app/AppOps.kt index 40b7bb512..9fda65600 100644 --- a/common/src/main/java/com/stardust/app/AppOps.kt +++ b/common/src/main/java/com/stardust/app/AppOps.kt @@ -2,19 +2,29 @@ package com.stardust.app import android.app.AppOpsManager import android.content.Context +import android.content.pm.ApplicationInfo import android.content.pm.PackageManager import android.os.Build import androidx.annotation.RequiresApi - @RequiresApi(Build.VERSION_CODES.KITKAT) fun Context.isOpPermissionGranted(permission: String): Boolean { - val appOps = getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager - val mode = appOps.checkOpNoThrow(permission, android.os.Process.myUid(), packageName) - - return if (mode == AppOpsManager.MODE_DEFAULT && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - checkCallingOrSelfPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) == PackageManager.PERMISSION_GRANTED - } else { + return try { + val packageManager: PackageManager = this.packageManager + val applicationInfo: ApplicationInfo = packageManager.getApplicationInfo(this.packageName, 0) + val appOpsManager: AppOpsManager = this.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager + val mode = if (Build.VERSION.SDK_INT >= 29 /* Build.VERSION_CODES.Q */) { + appOpsManager.unsafeCheckOpNoThrow(permission, applicationInfo.uid, applicationInfo.packageName) + } else { + @Suppress("DEPRECATION") + appOpsManager.checkOpNoThrow(permission, applicationInfo.uid, applicationInfo.packageName) + } mode == AppOpsManager.MODE_ALLOWED + } catch (e: PackageManager.NameNotFoundException) { + false } +} + +fun Context.isUsageStatsPermissionGranted(): Boolean { + return this.isOpPermissionGranted(AppOpsManager.OPSTR_GET_USAGE_STATS) } \ No newline at end of file diff --git a/common/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java b/common/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java index 68412685c..3f2f9adb9 100644 --- a/common/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java +++ b/common/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java @@ -1,5 +1,6 @@ package com.stardust.app; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; @@ -20,9 +21,9 @@ public interface OnFragmentInstantiateListener { void OnInstantiate(int pos, Fragment fragment); } - private List mFragments = new ArrayList<>(); - private List mTitles = new ArrayList<>(); - private FragmentActivity mActivity; + private final List mFragments = new ArrayList<>(); + private final List mTitles = new ArrayList<>(); + private final FragmentActivity mActivity; public FragmentPagerAdapterBuilder(FragmentActivity activity) { mActivity = activity; @@ -59,15 +60,16 @@ public CharSequence getPageTitle(int position) { public abstract static class StoredFragmentPagerAdapter extends FragmentPagerAdapter { - private SparseArray mStoredFragments = new SparseArray<>(); + private final SparseArray mStoredFragments = new SparseArray<>(); private OnFragmentInstantiateListener mOnFragmentInstantiateListener; public StoredFragmentPagerAdapter(FragmentManager fm) { super(fm); } + @NonNull @Override - public Object instantiateItem(ViewGroup container, int position) { + public Object instantiateItem(@NonNull ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); mStoredFragments.put(position, fragment); if(mOnFragmentInstantiateListener != null){ @@ -78,7 +80,7 @@ public Object instantiateItem(ViewGroup container, int position) { @Override - public void destroyItem(ViewGroup container, int position, Object object) { + public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { mStoredFragments.remove(position); super.destroyItem(container, position, object); } diff --git a/common/src/main/java/com/stardust/pio/PFiles.java b/common/src/main/java/com/stardust/pio/PFiles.java index abb2fd0eb..90d28c202 100644 --- a/common/src/main/java/com/stardust/pio/PFiles.java +++ b/common/src/main/java/com/stardust/pio/PFiles.java @@ -1,11 +1,9 @@ package com.stardust.pio; -import android.app.NativeActivity; import android.content.Context; import android.content.res.AssetManager; import android.os.Environment; import android.text.TextUtils; -import android.util.Log; import com.stardust.util.Func1; @@ -14,15 +12,12 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.RandomAccessFile; import java.nio.charset.Charset; -import java.util.Arrays; import java.util.Locale; +import java.util.Objects; /** * Created by Stardust on 2017/4/1. @@ -30,8 +25,6 @@ public class PFiles { - private static final String TAG = "PFiles"; - static final int DEFAULT_BUFFER_SIZE = 8192; static final String DEFAULT_ENCODING = Charset.defaultCharset().name(); @@ -313,16 +306,8 @@ public static void copyAssetDir(AssetManager manager, String assetsDir, String t String fullAssetsPath = join(assetsDir, file); String[] children = manager.list(fullAssetsPath); if (children == null || children.length == 0) { - InputStream stream = null; - try { - stream = manager.open(fullAssetsPath); + try (InputStream stream = manager.open(fullAssetsPath)) { copyStream(stream, join(toDir, file)); - } catch (IOException e) { - throw e; - } finally { - if (stream != null) { - stream.close(); - } } } else { copyAssetDir(manager, fullAssetsPath, join(toDir, file), children); @@ -460,12 +445,7 @@ private static String[] wrapNonNull(String[] list) { public static String[] listDir(String path, final Func1 filter) { final File file = new File(path); - return wrapNonNull(file.list(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return filter.call(name); - } - })); + return wrapNonNull(file.list((dir, name) -> filter.call(name))); } public static boolean isFile(String path) { @@ -478,7 +458,7 @@ public static boolean isDir(String path) { public static boolean isEmptyDir(String path) { File file = new File(path); - return file.isDirectory() && file.list().length == 0; + return file.isDirectory() && Objects.requireNonNull(file.list()).length == 0; } public static String join(String base, String... paths) { diff --git a/common/src/main/java/com/stardust/util/DeveloperUtils.java b/common/src/main/java/com/stardust/util/DeveloperUtils.java index 7f01fd348..16d13b25d 100644 --- a/common/src/main/java/com/stardust/util/DeveloperUtils.java +++ b/common/src/main/java/com/stardust/util/DeveloperUtils.java @@ -11,6 +11,7 @@ import android.content.pm.Signature; import androidx.annotation.Nullable; import android.util.Base64; +import android.util.Log; import java.io.IOException; import java.lang.ref.WeakReference; @@ -19,6 +20,8 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import kotlin.text.Regex; + /** * Created by Stardust on 2017/4/5. */ @@ -26,8 +29,7 @@ public class DeveloperUtils { private static final String PACKAGE_NAME = "org.autojs.autojs"; - private static final String SIGNATURE = "nPNPcy4Lk/eP6fLvZitP0VPbHdFCbKua77m59vis5fA="; - private static final String LOG_TAG = "DeveloperUtils"; + private static final Regex SIGNATURE_REX = new Regex(".*(CbKua77m59vis|N7YkpKxKjsPWe).*"); private static final ExecutorService sExecutor = UnderuseExecutors.getExecutor(); private static final String SALT = "let\nlife\nbe\nbeautiful\nlike\nsummer\nflowers\nand\ndeath\nlike\nautumn\nleaves\n."; @@ -80,7 +82,7 @@ public static boolean checkSignature(Context context, String packageName) { if (sha.endsWith("\n")) { sha = sha.substring(0, sha.length() - 1); } - return SIGNATURE.equals(sha); + return SIGNATURE_REX.matches(sha); } @@ -150,7 +152,7 @@ public static boolean checkDexFile(Context context, long[] crc) { } } - public static void verifyApk(Activity activity, final int crcRes) { + public static void verifyApk(Activity activity) { final WeakReference activityWeakReference = new WeakReference<>(activity); sExecutor.execute(new Runnable() { @Override @@ -160,13 +162,7 @@ public void run() { return; if (!checkSignature(a)) { a.finish(); - return; } - //long[] crc = readCrc(a.getString(crcRes)); - //if (!checkDexFile(a, crc)) { - //a.finish(); - //} - } }); } diff --git a/common/src/main/java/com/stardust/util/ResourceMonitor.java b/common/src/main/java/com/stardust/util/ResourceMonitor.java index c7a4fa861..760ee1ecd 100644 --- a/common/src/main/java/com/stardust/util/ResourceMonitor.java +++ b/common/src/main/java/com/stardust/util/ResourceMonitor.java @@ -8,13 +8,41 @@ import com.stardust.BuildConfig; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.ReentrantLock; public final class ResourceMonitor { private static final String LOG_TAG = "ResourceMonitor"; - private static final ConcurrentHashMap, SparseArray> mResources = new ConcurrentHashMap<>(); + // @Reference to TonyJiangWJ/Auto.js on Nov 22, 2021 + private static class LockedResource { + private ReentrantLock lock; + private SparseArray resource; + + public LockedResource() { + this.resource = new SparseArray<>(); + this.lock = new ReentrantLock(); + } + + public ReentrantLock getLock() { + return lock; + } + + public void setLock(ReentrantLock lock) { + this.lock = lock; + } + + public SparseArray getResource() { + return resource; + } + + public void setResource(SparseArray resource) { + this.resource = resource; + } + } + + private static final ConcurrentHashMap, LockedResource> mResources = new ConcurrentHashMap<>(); private static Handler sHandler; private static boolean sEnabled = BuildConfig.DEBUG; private static ExceptionCreator sExceptionCreator; @@ -32,9 +60,9 @@ public static void onOpen(ResourceMonitor.Resource resource) { if (!sEnabled) { return; } - SparseArray map = mResources.get(resource.getClass()); + LockedResource map = mResources.get(resource.getClass()); if (map == null) { - map = new SparseArray<>(); + map = new LockedResource(); mResources.put(resource.getClass(), map); } int resourceId = resource.getResourceId(); @@ -45,16 +73,20 @@ public static void onOpen(ResourceMonitor.Resource resource) { } else { exception = sExceptionCreator.create(resource); } - map.put(resourceId, exception); + map.getLock().lock(); + map.getResource().put(resourceId, exception); + map.getLock().unlock(); } public static void onClose(ResourceMonitor.Resource resource) { if (!sEnabled) { return; } - SparseArray map = mResources.get(resource.getClass()); + LockedResource map = mResources.get(resource.getClass()); if (map != null) { - map.remove(resource.getResourceId()); + map.getLock().lock(); + map.getResource().remove(resource.getResourceId()); + map.getLock().unlock(); } } @@ -62,12 +94,16 @@ public static void onFinalize(ResourceMonitor.Resource resource) { if (!sEnabled) { return; } - SparseArray map = mResources.get(resource.getClass()); + LockedResource map = mResources.get(resource.getClass()); if (map != null) { - int indexOfKey = map.indexOfKey(resource.getResourceId()); - if (indexOfKey >= 0) { - final Exception exception = map.valueAt(indexOfKey); - map.removeAt(indexOfKey); + map.getLock().lock(); + int indexOfKey = map.getResource().indexOfKey(resource.getResourceId()); + if (indexOfKey < 0) { + map.getLock().unlock(); + } else { + final Exception exception = map.getResource().valueAt(indexOfKey); + map.getResource().removeAt(indexOfKey); + map.getLock().unlock(); if (sHandler == null) { sHandler = new Handler(Looper.getMainLooper()); } diff --git a/common/src/main/java/com/stardust/util/ViewUtil.java b/common/src/main/java/com/stardust/util/ViewUtil.java index 61b58b547..ca419ee41 100644 --- a/common/src/main/java/com/stardust/util/ViewUtil.java +++ b/common/src/main/java/com/stardust/util/ViewUtil.java @@ -3,9 +3,15 @@ import android.app.Activity; import android.content.Context; import androidx.annotation.IdRes; +import androidx.annotation.Nullable; + +import android.content.ContextWrapper; +import android.graphics.Rect; import android.util.DisplayMetrics; +import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; +import android.view.Window; /** * Created by Stardust on 2017/1/24. @@ -19,7 +25,7 @@ public class ViewUtil { } // FIXME: 2018/1/23 not working in some devices (https://github.com/hyb1996/Auto.js/issues/268) - public static int getStatusBarHeight(Context context) { + public static int getStatusBarHeightLegacy(Context context) { int result = 0; int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { @@ -28,6 +34,36 @@ public static int getStatusBarHeight(Context context) { return result; } + public static int getStatusBarHeight(Context context) { + Rect rectangle = new Rect(); + Window window = getWindowForContext(context); + if (window == null) { + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, context.getResources().getDisplayMetrics()); + } + window.getDecorView().getWindowVisibleDisplayFrame(rectangle); + return rectangle.top; + } + + public static int getTitleBarHeight(Context context) { + Window window = getWindowForContext(context); + int contentViewTop = 0; + if (window != null) { + contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); + } + return contentViewTop - getStatusBarHeight(context); + } + + @Nullable + private static Window getWindowForContext(Context context) { + if (context instanceof Activity) { + return ((Activity) context).getWindow(); + } + if (context instanceof ContextWrapper) { + return getWindowForContext(((ContextWrapper) context).getBaseContext()); + } + return null; + } + public static int getScreenHeight(Activity activity) { DisplayMetrics displayMetrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); diff --git a/gradle.properties b/gradle.properties index 8204cd203..c317e0281 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,4 @@ -## Project-wide Gradle settings. -# -# For more details on how to configure your build environment visit +## For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # # Specifies the JVM arguments used for the daemon process. @@ -12,11 +10,10 @@ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -#Mon Jan 23 10:16:46 CST 2017 -#systemProp.https.proxyPort=1080 -#systemProp.http.proxyHost=127.0.0.1 -org.gradle.jvmargs=-Xms8192m -Xmx8192m -Dfile.encoding=UTF-8 -#systemProp.https.proxyHost=127.0.0.1 -#systemProp.http.proxyPort=1080 +#Thu Nov 11 16:38:18 CST 2021 + +org.gradle.jvmargs=-Xms2g -Xmx2g -Dkotlin.daemon.jvm.options\="-Xmx2g" -Dfile.encoding\=UTF-8 + android.useAndroidX=true android.enableJetifier=true +android.injected.studio.version.check=false \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 999ec9285..7f8f9af98 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Oct 05 23:57:16 CST 2018 +#Fri Nov 26 16:35:39 CST 2021 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +zipStoreBase=GRADLE_USER_HOME \ No newline at end of file diff --git a/inrt/build.gradle b/inrt/build.gradle index f8973cc38..dae35709c 100644 --- a/inrt/build.gradle +++ b/inrt/build.gradle @@ -1,16 +1,14 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' android { compileSdkVersion versions.compile - buildToolsVersion versions.buildTool defaultConfig { applicationId "com.stardust.auojs.inrt" minSdkVersion versions.mini targetSdkVersion versions.target - versionCode versions.appVersionCode - 200 + versionCode versions.appVersionCode versionName versions.appVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true @@ -21,8 +19,8 @@ android { disable 'ExtraTranslation' } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_16 + targetCompatibility JavaVersion.VERSION_16 } splits { @@ -39,7 +37,7 @@ android { reset() // Specifies a list of ABIs that Gradle should create APKs for. - include "x86", "armeabi-v7a" + include "armeabi-v7a" // Specifies that we do not want to also generate a universal APK that includes all ABIs. universalApk false @@ -87,7 +85,6 @@ task buildApkPlugin { return } buildApkPluginForAbi(pluginProjectDir, 'armeabi-v7a') - buildApkPluginForAbi(pluginProjectDir, 'x86') } } @@ -97,23 +94,24 @@ tasks.whenTaskAdded { task -> } } -repositories { - flatDir { - dirs 'libs' +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_16 } +} + +repositories { google() } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1-alpha01', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - //Glide - implementation('com.github.bumptech.glide:glide:4.2.0', { - exclude group: 'com.android.support' - }) - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' + + implementation 'com.github.bumptech.glide:glide:4.12.0' + + implementation project(":libs:org.mozilla.rhino-1.7.14") + implementation project(":libs:org.opencv-4.5.4") + implementation project(':automator') implementation project(':common') implementation project(':autojs') diff --git a/inrt/libs/emulatorview-release.aar b/inrt/libs/emulatorview-release.aar deleted file mode 100644 index 84e3e3343..000000000 Binary files a/inrt/libs/emulatorview-release.aar and /dev/null differ diff --git a/inrt/libs/libtermexec-release.aar b/inrt/libs/libtermexec-release.aar deleted file mode 100644 index f49ae3493..000000000 Binary files a/inrt/libs/libtermexec-release.aar and /dev/null differ diff --git a/inrt/libs/opencv-3.4.3.aar b/inrt/libs/opencv-3.4.3.aar deleted file mode 100644 index c0ffeb818..000000000 Binary files a/inrt/libs/opencv-3.4.3.aar and /dev/null differ diff --git a/inrt/libs/term-debug.aar b/inrt/libs/term-debug.aar deleted file mode 100644 index b32ad4322..000000000 Binary files a/inrt/libs/term-debug.aar and /dev/null differ diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/App.kt b/inrt/src/main/java/com/stardust/auojs/inrt/App.kt index 64305346d..806da5e7c 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/App.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/App.kt @@ -30,18 +30,18 @@ class App : Application() { Drawables.setDefaultImageLoader(object : ImageLoader { override fun loadInto(imageView: ImageView, uri: Uri) { Glide.with(this@App) - .load(uri) - .into(imageView) + .load(uri) + .into(imageView) } override fun loadIntoBackground(view: View, uri: Uri) { Glide.with(this@App) - .load(uri) - .into(object : SimpleTarget() { - override fun onResourceReady(resource: Drawable, transition: Transition) { - view.background = resource - } - }) + .load(uri) + .into(object : SimpleTarget() { + override fun onResourceReady(resource: Drawable, transition: Transition?) { + view.background = resource + } + }) } override fun load(view: View, uri: Uri): Drawable { @@ -50,23 +50,23 @@ class App : Application() { override fun load(view: View, uri: Uri, drawableCallback: ImageLoader.DrawableCallback) { Glide.with(this@App) - .load(uri) - .into(object : SimpleTarget() { - override fun onResourceReady(resource: Drawable, transition: Transition) { - drawableCallback.onLoaded(resource) - } - }) + .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(this@App) - .asBitmap() - .load(uri) - .into(object : SimpleTarget() { - override fun onResourceReady(resource: Bitmap, transition: Transition) { - bitmapCallback.onLoaded(resource) - } - }) + .asBitmap() + .load(uri) + .into(object : SimpleTarget() { + override fun onResourceReady(resource: Bitmap, transition: Transition?) { + bitmapCallback.onLoaded(resource) + } + }) } }) } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/Pref.kt b/inrt/src/main/java/com/stardust/auojs/inrt/Pref.kt index e2e62a772..47010ea38 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/Pref.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/Pref.kt @@ -1,7 +1,7 @@ package com.stardust.auojs.inrt import android.content.SharedPreferences -import android.preference.PreferenceManager +import androidx.preference.PreferenceManager import com.stardust.app.GlobalAppContext @@ -14,13 +14,13 @@ object Pref { private const val KEY_FIRST_USING = "key_first_using" private var sPreferences: SharedPreferences? = null - val preferences: SharedPreferences + private val preferences: SharedPreferences get() { - return sPreferences ?: { + return sPreferences ?: run { val pref = PreferenceManager.getDefaultSharedPreferences(GlobalAppContext.get()) sPreferences = pref pref - }() + } } val isFirstUsing: Boolean @@ -37,11 +37,11 @@ object Pref { } fun shouldEnableAccessibilityServiceByRoot(): Boolean { - return preferences.getBoolean(getString(R.string.key_enable_accessibility_service_by_root), false) + return preferences.getBoolean(getString(R.string.key_enable_accessibility_service_by_root), true) } fun shouldHideLogs(): Boolean { - return preferences.getBoolean(getString(R.string.key_dont_show_main_activity), false) + return preferences.getBoolean(getString(R.string.key_not_show_main_activity), false) } fun shouldStopAllScriptsWhenVolumeUp(): Boolean { diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt b/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt index 02efc172e..d525a8777 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/SettingsActivity.kt @@ -5,14 +5,11 @@ import androidx.annotation.Nullable import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar - /** * Created by Stardust on 2017/12/8. */ class SettingsActivity : AppCompatActivity() { - - override fun onCreate(@Nullable savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setupViews() @@ -28,11 +25,15 @@ class SettingsActivity : AppCompatActivity() { supportActionBar?.setDisplayHomeAsUpEnabled(true) } - class PreferenceFragment : android.preference.PreferenceFragment() { + class PreferenceFragment : androidx.preference.PreferenceFragment() { override fun onCreate(@Nullable savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) addPreferencesFromResource(R.xml.preference) } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + TODO("Not yet implemented") + } } } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt index 5705cd2f2..0f4562702 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.kt @@ -53,7 +53,7 @@ class SplashActivity : AppCompatActivity() { runOnUiThread { Toast.makeText(this@SplashActivity, e.message, Toast.LENGTH_LONG).show() startActivity(Intent(this@SplashActivity, LogActivity::class.java)) - AutoJs.instance!!.globalConsole.printAllStackTrace(e) + AutoJs.instance.globalConsole.printAllStackTrace(e) } } }.start() @@ -64,13 +64,9 @@ class SplashActivity : AppCompatActivity() { } private fun checkPermission(vararg permissions: String) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - val requestPermissions = getRequestPermissions(permissions) - if (requestPermissions.isNotEmpty()) { - requestPermissions(requestPermissions, PERMISSION_REQUEST_CODE) - } else { - runScript() - } + val requestPermissions = getRequestPermissions(permissions) + if (requestPermissions.isNotEmpty()) { + requestPermissions(requestPermissions, PERMISSION_REQUEST_CODE) } else { runScript() } @@ -91,7 +87,7 @@ class SplashActivity : AppCompatActivity() { companion object { private const val PERMISSION_REQUEST_CODE = 11186 - private const val INIT_TIMEOUT: Long = 2500 + private const val INIT_TIMEOUT: Long = 1000 } } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/GlobalKeyObserver.kt b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/GlobalKeyObserver.kt index 975c24070..2666bbe0e 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/GlobalKeyObserver.kt +++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/GlobalKeyObserver.kt @@ -22,7 +22,7 @@ class GlobalKeyObserver internal constructor() : OnKeyListener, ShellKeyObserver init { AccessibilityService.stickOnKeyObserver - .addListener(this) + .addListener(this) val observer = ShellKeyObserver() observer.setKeyListener(this) InputEventObserver.getGlobal(GlobalAppContext.get()).addListener(observer) @@ -31,7 +31,7 @@ class GlobalKeyObserver internal constructor() : OnKeyListener, ShellKeyObserver fun onVolumeUp() { Log.d(LOG_TAG, "onVolumeUp at " + System.currentTimeMillis()) if (Pref.shouldStopAllScriptsWhenVolumeUp()) { - AutoJs.instance!!.scriptEngineService.stopAllAndToast() + AutoJs.instance.scriptEngineService.stopAllAndToast() } } @@ -83,9 +83,7 @@ class GlobalKeyObserver internal constructor() : OnKeyListener, ShellKeyObserver } companion object { - - - private val LOG_TAG = "GlobalKeyObserver" + private const val LOG_TAG = "GlobalKeyObserver" private val sSingleton = GlobalKeyObserver() fun init() { diff --git a/inrt/src/main/res/values/strings.xml b/inrt/src/main/res/values/strings.xml index 59d0b15d5..0e6da3442 100644 --- a/inrt/src/main/res/values/strings.xml +++ b/inrt/src/main/res/values/strings.xml @@ -5,19 +5,18 @@ 使用root权限启用无障碍服务失败 设置 脚本运行 - key_use_volume_control_running key_enable_accessibility_service_by_root 音量上键停止所有脚本 - 开启后运行脚本会使用Root权限自动开启无障碍服务 - 使用Root权限自动启用服务 + 开启后运行脚本会使用 Root 权限自动开启无障碍服务 + 使用 Root 权限自动启用服务 key_stable_mode 开启后布局分析更稳定,但小部分脚本可能无法正常运行。重启无障碍服务生效 稳定模式 无障碍服务 - 不显示主界面 - key_dont_show_main_activity - 打开应用后直接运行脚本 + 不显示主界面 + key_not_show_main_activity + 打开应用后直接运行脚本 其他 Powered by Auto.js \n------------\n[%s]运行结束,用时%f秒 diff --git a/inrt/src/main/res/xml/preference.xml b/inrt/src/main/res/xml/preference.xml index eb132d913..8b0bd4d77 100644 --- a/inrt/src/main/res/xml/preference.xml +++ b/inrt/src/main/res/xml/preference.xml @@ -11,9 +11,9 @@ + android:key="@string/key_not_show_main_activity" + android:summary="@string/summary_not_show_main_activity" + android:title="@string/text_not_show_main_activity"/> diff --git a/libs/com.android.dx-1.7.0/build.gradle b/libs/com.android.dx-1.7.0/build.gradle new file mode 100644 index 000000000..f5c271b60 --- /dev/null +++ b/libs/com.android.dx-1.7.0/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file("dx.jar")) \ No newline at end of file diff --git a/autojs/libs/dx.jar b/libs/com.android.dx-1.7.0/dx.jar similarity index 100% rename from autojs/libs/dx.jar rename to libs/com.android.dx-1.7.0/dx.jar diff --git a/libs/com.tencent.bugly.crashreport-2.6.6/build.gradle b/libs/com.tencent.bugly.crashreport-2.6.6/build.gradle new file mode 100644 index 000000000..50395f95c --- /dev/null +++ b/libs/com.tencent.bugly.crashreport-2.6.6/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file("crashreport-2.6.6.aar")) \ No newline at end of file diff --git a/libs/com.tencent.bugly.crashreport-2.6.6/crashreport-2.6.6.aar b/libs/com.tencent.bugly.crashreport-2.6.6/crashreport-2.6.6.aar new file mode 100644 index 000000000..82a867320 Binary files /dev/null and b/libs/com.tencent.bugly.crashreport-2.6.6/crashreport-2.6.6.aar differ diff --git a/libs/jackpal.androidterm-1.0.70/build.gradle b/libs/jackpal.androidterm-1.0.70/build.gradle new file mode 100644 index 000000000..5269ce81e --- /dev/null +++ b/libs/jackpal.androidterm-1.0.70/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file("term-debug.aar")) \ No newline at end of file diff --git a/app/libs/term-debug.aar b/libs/jackpal.androidterm-1.0.70/term-debug.aar similarity index 100% rename from app/libs/term-debug.aar rename to libs/jackpal.androidterm-1.0.70/term-debug.aar diff --git a/libs/jackpal.androidterm.emulatorview-1.0.42/build.gradle b/libs/jackpal.androidterm.emulatorview-1.0.42/build.gradle new file mode 100644 index 000000000..204111152 --- /dev/null +++ b/libs/jackpal.androidterm.emulatorview-1.0.42/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file("emulatorview-release.aar")) \ No newline at end of file diff --git a/app/libs/emulatorview-release.aar b/libs/jackpal.androidterm.emulatorview-1.0.42/emulatorview-release.aar similarity index 100% rename from app/libs/emulatorview-release.aar rename to libs/jackpal.androidterm.emulatorview-1.0.42/emulatorview-release.aar diff --git a/libs/jackpal.androidterm.libtermexec-1.0/build.gradle b/libs/jackpal.androidterm.libtermexec-1.0/build.gradle new file mode 100644 index 000000000..7273945ae --- /dev/null +++ b/libs/jackpal.androidterm.libtermexec-1.0/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file("libtermexec-release.aar")) \ No newline at end of file diff --git a/app/libs/libtermexec-release.aar b/libs/jackpal.androidterm.libtermexec-1.0/libtermexec-release.aar similarity index 100% rename from app/libs/libtermexec-release.aar rename to libs/jackpal.androidterm.libtermexec-1.0/libtermexec-release.aar diff --git a/libs/org.mozilla.rhino-1.7.14/build.gradle b/libs/org.mozilla.rhino-1.7.14/build.gradle new file mode 100644 index 000000000..984d52073 --- /dev/null +++ b/libs/org.mozilla.rhino-1.7.14/build.gradle @@ -0,0 +1,8 @@ +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_16 + } +} + +configurations.maybeCreate("default") +artifacts.add("default", file("rhino-1.7.14-SNAPSHOT.jar")) \ No newline at end of file diff --git a/libs/org.mozilla.rhino-1.7.14/rhino-1.7.14-SNAPSHOT.jar b/libs/org.mozilla.rhino-1.7.14/rhino-1.7.14-SNAPSHOT.jar new file mode 100644 index 000000000..4968be500 Binary files /dev/null and b/libs/org.mozilla.rhino-1.7.14/rhino-1.7.14-SNAPSHOT.jar differ diff --git a/libs/org.opencv-4.5.4/build.gradle b/libs/org.opencv-4.5.4/build.gradle new file mode 100644 index 000000000..eb6c3887f --- /dev/null +++ b/libs/org.opencv-4.5.4/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file("opencv-4.5.4.aar")) \ No newline at end of file diff --git a/libs/org.opencv-4.5.4/opencv-4.5.4.aar b/libs/org.opencv-4.5.4/opencv-4.5.4.aar new file mode 100644 index 000000000..69ed04a0d Binary files /dev/null and b/libs/org.opencv-4.5.4/opencv-4.5.4.aar differ diff --git a/project-versions.json b/project-versions.json index ce36fa6c1..b1ba7f559 100644 --- a/project-versions.json +++ b/project-versions.json @@ -1,8 +1,8 @@ { - "appVersionCode": 461, - "appVersionName": "4.1.1 Alpha2", + "appVersionCode": 654, + "appVersionName": "6.0.0", + "appSinceDate": "Dec 1, 2021", "target": 28, - "mini": 17, - "compile": 28, - "buildTool": "28.0.3" + "mini": 24, + "compile": 31 } \ No newline at end of file diff --git a/screen-captures/ss01.png b/screen-captures/ss01.png deleted file mode 100644 index b297a1259..000000000 Binary files a/screen-captures/ss01.png and /dev/null differ diff --git a/screen-captures/ss02.png b/screen-captures/ss02.png deleted file mode 100644 index be174c71e..000000000 Binary files a/screen-captures/ss02.png and /dev/null differ diff --git a/screen-captures/ss03.png b/screen-captures/ss03.png deleted file mode 100644 index 43597c5bc..000000000 Binary files a/screen-captures/ss03.png and /dev/null differ diff --git a/screen-captures/ss04.png b/screen-captures/ss04.png deleted file mode 100644 index 752ed2bf5..000000000 Binary files a/screen-captures/ss04.png and /dev/null differ diff --git a/screen-captures/ss05.png b/screen-captures/ss05.png deleted file mode 100644 index 660ef5eb9..000000000 Binary files a/screen-captures/ss05.png and /dev/null differ diff --git a/screen-captures/ss06.png b/screen-captures/ss06.png deleted file mode 100644 index f0c977b16..000000000 Binary files a/screen-captures/ss06.png and /dev/null differ diff --git a/screen-captures/ss07.png b/screen-captures/ss07.png deleted file mode 100644 index 67c9a1345..000000000 Binary files a/screen-captures/ss07.png and /dev/null differ diff --git a/screen-captures/ss08.png b/screen-captures/ss08.png deleted file mode 100644 index 1a0ae7b23..000000000 Binary files a/screen-captures/ss08.png and /dev/null differ diff --git a/settings.gradle b/settings.gradle index 3de6418a6..5216b8739 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,9 @@ include ':app', ':automator', ':common', ':autojs', ':inrt' + +include ":libs:com.android.dx-1.7.0" +include ":libs:com.tencent.bugly.crashreport-2.6.6" +include ":libs:jackpal.androidterm.emulatorview-1.0.42" +include ":libs:jackpal.androidterm.libtermexec-1.0" +include ":libs:jackpal.androidterm-1.0.70" +include ":libs:org.mozilla.rhino-1.7.14" +include ":libs:org.opencv-4.5.4" \ No newline at end of file diff --git a/version.json b/version.json deleted file mode 100644 index 1e266f678..000000000 --- a/version.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "versionCode": 8000, - "versionName": "Pro 8.7.6", - "releaseNotes": "**Auto.js免费版已不再维护,建议使用Pro 8.7版本**\n* dex加密、snapshot等增强的加密方式、自定义签名、更小的打包体积\n* 可视化UI编辑、专业级单步调试、全新界面与编辑器\n* 新增大量API,压缩、加解密、OCR、加速找色等,修复大量问题\n* V9版本将支持Node.js,敬请期待", - "downloads" : [ - { - "name": "官网下载", - "url": "https://pro.autojs.org/download" - }, - { - "name": "酷安", - "url": "https://www.coolapk.com/apk/246247" - }, - { - "name": "小米商店", - "url": "https://app.mi.com/details?id=org.autojs.autojspro" - } - ], - "oldVersions": [ - { - "versionCode": 115, - "issues": "[测试] 当前版本为Beta版本,问题很多,请尽快更新正式版" - }, - { - "versionCode": "116", - "issues": "[测试] 当前版本为Beta版本,请尽快更新正式版" - } - ], - "deprecated": 116 -}