@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="VcsDirectoryMappings"> |
||||||
|
<mapping directory="" vcs="Git" /> |
||||||
|
</component> |
||||||
|
</project> |
@ -0,0 +1,19 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module external.linked.project.id="DKit" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
||||||
|
<component name="FacetManager"> |
||||||
|
<facet type="java-gradle" name="Java-Gradle"> |
||||||
|
<configuration> |
||||||
|
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> |
||||||
|
<option name="BUILDABLE" value="false" /> |
||||||
|
</configuration> |
||||||
|
</facet> |
||||||
|
</component> |
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true"> |
||||||
|
<exclude-output /> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.gradle" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="inheritedJdk" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
</component> |
||||||
|
</module> |
@ -0,0 +1,19 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module external.linked.project.id="DebugKit" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
||||||
|
<component name="FacetManager"> |
||||||
|
<facet type="java-gradle" name="Java-Gradle"> |
||||||
|
<configuration> |
||||||
|
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> |
||||||
|
<option name="BUILDABLE" value="false" /> |
||||||
|
</configuration> |
||||||
|
</facet> |
||||||
|
</component> |
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> |
||||||
|
<exclude-output /> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.gradle" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="inheritedJdk" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
</component> |
||||||
|
</module> |
@ -0,0 +1 @@ |
|||||||
|
/build |
@ -0,0 +1,162 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
||||||
|
<component name="FacetManager"> |
||||||
|
<facet type="android-gradle" name="Android-Gradle"> |
||||||
|
<configuration> |
||||||
|
<option name="GRADLE_PROJECT_PATH" value=":app" /> |
||||||
|
</configuration> |
||||||
|
</facet> |
||||||
|
<facet type="android" name="Android"> |
||||||
|
<configuration> |
||||||
|
<option name="SELECTED_BUILD_VARIANT" value="debug" /> |
||||||
|
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> |
||||||
|
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> |
||||||
|
<afterSyncTasks> |
||||||
|
<task>generateDebugSources</task> |
||||||
|
</afterSyncTasks> |
||||||
|
<option name="ALLOW_USER_CONFIGURATION" value="false" /> |
||||||
|
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> |
||||||
|
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> |
||||||
|
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" /> |
||||||
|
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" /> |
||||||
|
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> |
||||||
|
</configuration> |
||||||
|
</facet> |
||||||
|
</component> |
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> |
||||||
|
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" /> |
||||||
|
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" /> |
||||||
|
<exclude-output /> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/apk_list" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-libraries" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkDebugClasspath" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split_list" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/tmp" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.0.2@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-core:3.2.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.2.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout:1.1.3@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.0.1@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout-solver:1.1.3@jar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0@jar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.2.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.core:core:1.0.1@aar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-idling-resource:3.2.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: com.joanzapata.pdfview:android-pdfview:1.0.4@aar" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0@jar" level="project" /> |
||||||
|
<orderEntry type="module" module-name="dklib" /> |
||||||
|
</component> |
||||||
|
</module> |
@ -0,0 +1,36 @@ |
|||||||
|
apply plugin: 'com.android.application' |
||||||
|
|
||||||
|
android { |
||||||
|
compileSdkVersion 29 |
||||||
|
buildToolsVersion "29.0.0" |
||||||
|
defaultConfig { |
||||||
|
applicationId "vip.devkit.DebugKit.Demo" |
||||||
|
minSdkVersion 19 |
||||||
|
targetSdkVersion 29 |
||||||
|
versionCode 1 |
||||||
|
versionName "1.0" |
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |
||||||
|
} |
||||||
|
buildTypes { |
||||||
|
release { |
||||||
|
minifyEnabled false |
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
implementation fileTree(dir: 'libs', include: ['*.jar']) |
||||||
|
implementation 'androidx.appcompat:appcompat:1.0.2' |
||||||
|
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' |
||||||
|
testImplementation 'junit:junit:4.12' |
||||||
|
androidTestImplementation 'androidx.test:runner:1.2.0' |
||||||
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' |
||||||
|
|
||||||
|
implementation project(':dklib') |
||||||
|
|
||||||
|
api 'com.joanzapata.pdfview:android-pdfview:1.0.4@aar' |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
# Add project specific ProGuard rules here. |
||||||
|
# You can control the set of applied configuration files using the |
||||||
|
# proguardFiles setting in build.gradle. |
||||||
|
# |
||||||
|
# For more details, see |
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html |
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following |
||||||
|
# and specify the fully qualified class name to the JavaScript interface |
||||||
|
# class: |
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
||||||
|
# public *; |
||||||
|
#} |
||||||
|
|
||||||
|
# Uncomment this to preserve the line number information for |
||||||
|
# debugging stack traces. |
||||||
|
#-keepattributes SourceFile,LineNumberTable |
||||||
|
|
||||||
|
# If you keep the line number information, uncomment this to |
||||||
|
# hide the original source file name. |
||||||
|
#-renamesourcefileattribute SourceFile |
@ -0,0 +1,27 @@ |
|||||||
|
package vip.devkit.DebugKit.Demo; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
|
||||||
|
import androidx.test.InstrumentationRegistry; |
||||||
|
import androidx.test.runner.AndroidJUnit4; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.runner.RunWith; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Instrumented test, which will execute on an Android device. |
||||||
|
* |
||||||
|
* @see <PermissionManagerActivity href="http://d.android.com/tools/testing">Testing documentation</PermissionManagerActivity> |
||||||
|
*/ |
||||||
|
@RunWith(AndroidJUnit4.class) |
||||||
|
public class ExampleInstrumentedTest { |
||||||
|
@Test |
||||||
|
public void useAppContext() { |
||||||
|
// Context of the app under test.
|
||||||
|
Context appContext = InstrumentationRegistry.getTargetContext(); |
||||||
|
|
||||||
|
assertEquals("vip.devkit.DebugKit.Demo", appContext.getPackageName()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
package="vip.devkit.DebugKit.Demo"> |
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
||||||
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> |
||||||
|
<uses-permission android:name="android.permission.INTERNET"/> |
||||||
|
<application |
||||||
|
android:allowBackup="true" |
||||||
|
android:icon="@mipmap/ic_launcher" |
||||||
|
android:label="@string/app_name" |
||||||
|
android:roundIcon="@mipmap/ic_launcher_round" |
||||||
|
android:supportsRtl="true" |
||||||
|
android:theme="@style/AppTheme"> |
||||||
|
<activity android:name=".MainActivity"> |
||||||
|
<intent-filter> |
||||||
|
<action android:name="android.intent.action.MAIN" /> |
||||||
|
<category android:name="android.intent.category.LAUNCHER" /> |
||||||
|
</intent-filter> |
||||||
|
</activity> |
||||||
|
</application> |
||||||
|
|
||||||
|
</manifest> |
@ -0,0 +1,39 @@ |
|||||||
|
package vip.devkit.DebugKit.Demo; |
||||||
|
|
||||||
|
import android.Manifest; |
||||||
|
import android.content.Intent; |
||||||
|
import android.os.Bundle; |
||||||
|
import android.view.View; |
||||||
|
import android.widget.TextView; |
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.ui.KitManagerActivity; |
||||||
|
|
||||||
|
public class MainActivity extends AppCompatActivity { |
||||||
|
|
||||||
|
/** |
||||||
|
* Debug |
||||||
|
*/ |
||||||
|
private TextView mTvDebug; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onCreate(Bundle savedInstanceState) { |
||||||
|
super.onCreate(savedInstanceState); |
||||||
|
setContentView(R.layout.activity_main); |
||||||
|
initView(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void initView() { |
||||||
|
mTvDebug = (TextView) findViewById(R.id.tv_debug); |
||||||
|
mTvDebug.setOnClickListener(new View.OnClickListener() { |
||||||
|
@Override |
||||||
|
public void onClick(View view) { |
||||||
|
Intent intent = new Intent(MainActivity.this, KitManagerActivity.class); |
||||||
|
startActivity(intent); |
||||||
|
String[] permissions=new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package vip.devkit.DebugKit.Demo; |
||||||
|
|
||||||
|
import android.os.Bundle; |
||||||
|
import android.widget.TextView; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
import androidx.appcompat.app.AppCompatActivity; |
||||||
|
|
||||||
|
import com.joanzapata.pdfview.PDFView; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.DebugKit.Demo |
||||||
|
* File Name: PDF.java |
||||||
|
* Create Date: 2019/7/5 16:51 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class PDF extends AppCompatActivity { |
||||||
|
|
||||||
|
|
||||||
|
private PDFView mPdfView; |
||||||
|
/** |
||||||
|
* Debug |
||||||
|
*/ |
||||||
|
private TextView mTvDebug; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState) { |
||||||
|
super.onCreate(savedInstanceState); |
||||||
|
setContentView(R.layout.activity_pdf); |
||||||
|
initView(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initView() { |
||||||
|
mPdfView = (PDFView) findViewById(R.id.pdf_view); |
||||||
|
mTvDebug = (TextView) findViewById(R.id.tv_debug); |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
xmlns:aapt="http://schemas.android.com/aapt" |
||||||
|
android:width="108dp" |
||||||
|
android:height="108dp" |
||||||
|
android:viewportWidth="108" |
||||||
|
android:viewportHeight="108"> |
||||||
|
<path |
||||||
|
android:fillType="evenOdd" |
||||||
|
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z" |
||||||
|
android:strokeWidth="1" |
||||||
|
android:strokeColor="#00000000"> |
||||||
|
<aapt:attr name="android:fillColor"> |
||||||
|
<gradient |
||||||
|
android:endX="78.5885" |
||||||
|
android:endY="90.9159" |
||||||
|
android:startX="48.7653" |
||||||
|
android:startY="61.0927" |
||||||
|
android:type="linear"> |
||||||
|
<item |
||||||
|
android:color="#44000000" |
||||||
|
android:offset="0.0" /> |
||||||
|
<item |
||||||
|
android:color="#00000000" |
||||||
|
android:offset="1.0" /> |
||||||
|
</gradient> |
||||||
|
</aapt:attr> |
||||||
|
</path> |
||||||
|
<path |
||||||
|
android:fillColor="#FFFFFF" |
||||||
|
android:fillType="nonZero" |
||||||
|
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z" |
||||||
|
android:strokeWidth="1" |
||||||
|
android:strokeColor="#00000000" /> |
||||||
|
</vector> |
@ -0,0 +1,170 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
android:width="108dp" |
||||||
|
android:height="108dp" |
||||||
|
android:viewportWidth="108" |
||||||
|
android:viewportHeight="108"> |
||||||
|
<path |
||||||
|
android:fillColor="#008577" |
||||||
|
android:pathData="M0,0h108v108h-108z" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M9,0L9,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M19,0L19,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M29,0L29,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M39,0L39,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M49,0L49,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M59,0L59,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M69,0L69,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M79,0L79,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M89,0L89,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M99,0L99,108" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,9L108,9" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,19L108,19" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,29L108,29" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,39L108,39" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,49L108,49" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,59L108,59" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,69L108,69" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,79L108,79" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,89L108,89" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M0,99L108,99" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M19,29L89,29" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M19,39L89,39" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M19,49L89,49" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M19,59L89,59" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M19,69L89,69" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M19,79L89,79" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M29,19L29,89" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M39,19L39,89" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M49,19L49,89" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M59,19L59,89" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M69,19L69,89" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
<path |
||||||
|
android:fillColor="#00000000" |
||||||
|
android:pathData="M79,19L79,89" |
||||||
|
android:strokeWidth="0.8" |
||||||
|
android:strokeColor="#33FFFFFF" /> |
||||||
|
</vector> |
@ -0,0 +1,7 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> |
||||||
|
|
||||||
|
<solid android:color="#111"/> |
||||||
|
<corners android:radius="50dp"/> |
||||||
|
|
||||||
|
</shape> |
@ -0,0 +1,33 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
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" |
||||||
|
tools:context=".MainActivity"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="Hello World!" |
||||||
|
app:layout_constraintBottom_toBottomOf="parent" |
||||||
|
app:layout_constraintLeft_toLeftOf="parent" |
||||||
|
app:layout_constraintRight_toRightOf="parent" |
||||||
|
app:layout_constraintTop_toTopOf="parent" /> |
||||||
|
|
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_debug" |
||||||
|
android:layout_width="50dp" |
||||||
|
android:layout_height="50dp" |
||||||
|
android:layout_alignParentRight="true" |
||||||
|
android:layout_alignParentBottom="true" |
||||||
|
android:layout_marginRight="50dp" |
||||||
|
android:gravity="center" |
||||||
|
android:textSize="12sp" |
||||||
|
android:layout_marginBottom="150dp" |
||||||
|
android:background="@drawable/shape_debug" |
||||||
|
android:text="Debug" |
||||||
|
android:textColor="#ffffff" /> |
||||||
|
|
||||||
|
</RelativeLayout> |
@ -0,0 +1,29 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
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" |
||||||
|
tools:context=".MainActivity"> |
||||||
|
|
||||||
|
<com.joanzapata.pdfview.PDFView |
||||||
|
android:id="@+id/pdf_view" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="match_parent" /> |
||||||
|
|
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_debug" |
||||||
|
android:layout_width="50dp" |
||||||
|
android:layout_height="50dp" |
||||||
|
android:layout_alignParentRight="true" |
||||||
|
android:layout_alignParentBottom="true" |
||||||
|
android:layout_marginRight="50dp" |
||||||
|
android:layout_marginBottom="150dp" |
||||||
|
android:background="@drawable/shape_debug" |
||||||
|
android:gravity="center" |
||||||
|
android:text="Debug" |
||||||
|
android:textColor="#ffffff" |
||||||
|
android:textSize="12sp" /> |
||||||
|
|
||||||
|
</RelativeLayout> |
@ -0,0 +1,5 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
||||||
|
<background android:drawable="@drawable/ic_launcher_background" /> |
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground" /> |
||||||
|
</adaptive-icon> |
@ -0,0 +1,5 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
||||||
|
<background android:drawable="@drawable/ic_launcher_background" /> |
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground" /> |
||||||
|
</adaptive-icon> |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<resources> |
||||||
|
<color name="colorPrimary">#008577</color> |
||||||
|
<color name="colorPrimaryDark">#00574B</color> |
||||||
|
<color name="colorAccent">#D81B60</color> |
||||||
|
</resources> |
@ -0,0 +1,3 @@ |
|||||||
|
<resources> |
||||||
|
<string name="app_name">DebugKit</string> |
||||||
|
</resources> |
@ -0,0 +1,11 @@ |
|||||||
|
<resources> |
||||||
|
|
||||||
|
<!-- Base application theme. --> |
||||||
|
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> |
||||||
|
<!-- Customize your theme here. --> |
||||||
|
<item name="colorPrimary">@color/colorPrimary</item> |
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> |
||||||
|
<item name="colorAccent">@color/colorAccent</item> |
||||||
|
</style> |
||||||
|
|
||||||
|
</resources> |
@ -0,0 +1,17 @@ |
|||||||
|
package vip.devkit.DebugKit.Demo; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Example local unit test, which will execute on the development machine (host). |
||||||
|
* |
||||||
|
* @see <PermissionManagerActivity href="http://d.android.com/tools/testing">Testing documentation</PermissionManagerActivity> |
||||||
|
*/ |
||||||
|
public class ExampleUnitTest { |
||||||
|
@Test |
||||||
|
public void addition_isCorrect() { |
||||||
|
assertEquals(4, 2 + 2); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules. |
||||||
|
|
||||||
|
buildscript { |
||||||
|
repositories { |
||||||
|
google() |
||||||
|
jcenter() |
||||||
|
|
||||||
|
} |
||||||
|
dependencies { |
||||||
|
classpath 'com.android.tools.build:gradle:3.2.1' |
||||||
|
|
||||||
|
// NOTE: Do not place your application dependencies here; they belong |
||||||
|
// in the individual module build.gradle files |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
allprojects { |
||||||
|
repositories { |
||||||
|
google() |
||||||
|
jcenter() |
||||||
|
maven { url 'https://jitpack.io' } |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
task clean(type: Delete) { |
||||||
|
delete rootProject.buildDir |
||||||
|
} |
@ -0,0 +1 @@ |
|||||||
|
/build |
@ -0,0 +1,34 @@ |
|||||||
|
apply plugin: 'com.android.library' |
||||||
|
|
||||||
|
android { |
||||||
|
compileSdkVersion 29 |
||||||
|
|
||||||
|
defaultConfig { |
||||||
|
minSdkVersion 19 |
||||||
|
targetSdkVersion 29 |
||||||
|
versionCode 1 |
||||||
|
versionName "1.0" |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
buildTypes { |
||||||
|
release { |
||||||
|
minifyEnabled false |
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
implementation fileTree(include: ['*.jar'], dir: 'libs') |
||||||
|
implementation 'androidx.appcompat:appcompat:1.0.2' |
||||||
|
implementation('com.android.support:recyclerview-v7:29.0.0') { |
||||||
|
exclude group: 'com.android.support' |
||||||
|
} |
||||||
|
implementation 'com.android.support:design:29.0.0' |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//https://github.com/nisrulz/easydeviceinfo/wiki/Usage#easyappmod |
@ -0,0 +1,147 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module external.linked.project.id=":dklib" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
||||||
|
<component name="FacetManager"> |
||||||
|
<facet type="android-gradle" name="Android-Gradle"> |
||||||
|
<configuration> |
||||||
|
<option name="GRADLE_PROJECT_PATH" value=":dklib" /> |
||||||
|
</configuration> |
||||||
|
</facet> |
||||||
|
<facet type="android" name="Android"> |
||||||
|
<configuration> |
||||||
|
<option name="SELECTED_BUILD_VARIANT" value="debug" /> |
||||||
|
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> |
||||||
|
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> |
||||||
|
<afterSyncTasks> |
||||||
|
<task>generateDebugSources</task> |
||||||
|
</afterSyncTasks> |
||||||
|
<option name="ALLOW_USER_CONFIGURATION" value="false" /> |
||||||
|
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> |
||||||
|
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> |
||||||
|
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" /> |
||||||
|
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" /> |
||||||
|
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> |
||||||
|
<option name="PROJECT_TYPE" value="1" /> |
||||||
|
</configuration> |
||||||
|
</facet> |
||||||
|
</component> |
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> |
||||||
|
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" /> |
||||||
|
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" /> |
||||||
|
<exclude-output /> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/aapt_friendly_merged_manifests" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/aidl_parcelable" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/intermediate-jars" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/library_assets" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/packaged_res" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/public_res" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/tmp" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.transition:transition:1.0.0-rc01@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.0.2@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: com.google.android.material:material:1.0.0-rc01@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.0.1@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.0.0-rc01@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.cardview:cardview:1.0.0-rc01@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.core:core:1.0.1@aar" level="project" /> |
||||||
|
<orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0@jar" level="project" /> |
||||||
|
</component> |
||||||
|
</module> |
@ -0,0 +1,21 @@ |
|||||||
|
# Add project specific ProGuard rules here. |
||||||
|
# You can control the set of applied configuration files using the |
||||||
|
# proguardFiles setting in build.gradle. |
||||||
|
# |
||||||
|
# For more details, see |
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html |
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following |
||||||
|
# and specify the fully qualified class name to the JavaScript interface |
||||||
|
# class: |
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
||||||
|
# public *; |
||||||
|
#} |
||||||
|
|
||||||
|
# Uncomment this to preserve the line number information for |
||||||
|
# debugging stack traces. |
||||||
|
#-keepattributes SourceFile,LineNumberTable |
||||||
|
|
||||||
|
# If you keep the line number information, uncomment this to |
||||||
|
# hide the original source file name. |
||||||
|
#-renamesourcefileattribute SourceFile |
@ -0,0 +1,27 @@ |
|||||||
|
package vip.devkit.debugkit; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
|
||||||
|
import androidx.test.InstrumentationRegistry; |
||||||
|
import androidx.test.runner.AndroidJUnit4; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.runner.RunWith; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Instrumented test, which will execute on an Android device. |
||||||
|
* |
||||||
|
* @see <PermissionManagerActivity href="http://d.android.com/tools/testing">Testing documentation</PermissionManagerActivity> |
||||||
|
*/ |
||||||
|
@RunWith(AndroidJUnit4.class) |
||||||
|
public class ExampleInstrumentedTest { |
||||||
|
@Test |
||||||
|
public void useAppContext() { |
||||||
|
// Context of the app under test.
|
||||||
|
Context appContext = InstrumentationRegistry.getTargetContext(); |
||||||
|
|
||||||
|
assertEquals("vip.devkit.debugkit.test", appContext.getPackageName()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
package="vip.devkit.debugkit"> |
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
||||||
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> |
||||||
|
<uses-permission android:name="android.permission.INTERNET" /> |
||||||
|
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE" /> |
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> |
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
||||||
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> |
||||||
|
<uses-permission android:name="android.permission.VIBRATE" /> |
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
||||||
|
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" /> |
||||||
|
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> |
||||||
|
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> |
||||||
|
<!-- 富媒体需要声明的权限 --> |
||||||
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> |
||||||
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> |
||||||
|
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> |
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" /> |
||||||
|
<uses-permission android:name="android.permission.CAMERA" /> |
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |
||||||
|
|
||||||
|
<!-- 适配Android N系统必需的ContentProvider写权限声明,写权限包含应用包名--> |
||||||
|
<uses-permission android:name="vip.devkit.permission.WRITE_PUSHINFOPROVIDER.com.idyoga.live" /> |
||||||
|
<permission |
||||||
|
android:name="vip.devkit.permission.WRITE_PUSHINFOPROVIDER.com.idyoga.live" |
||||||
|
android:description="@string/dk_debug" |
||||||
|
android:protectionLevel="signature" /> |
||||||
|
|
||||||
|
<application |
||||||
|
android:allowBackup="true" |
||||||
|
android:label="@string/app_name"> |
||||||
|
<activity android:name=".ui.KitManagerActivity" /> |
||||||
|
<activity android:name=".ui.base_url.BaseUrlManagerActivity" /> |
||||||
|
<activity android:name=".ui.permission.PermissionManagerActivity" /> |
||||||
|
<activity android:name=".ui.crash.CrashManagerActivity" /> |
||||||
|
<activity android:name=".ui.AppDataCleanActivity"/> |
||||||
|
<activity android:name=".ui.FileExplorer.FileExplorerActivity"/> |
||||||
|
|
||||||
|
|
||||||
|
</application> |
||||||
|
|
||||||
|
|
||||||
|
</manifest> |
@ -0,0 +1,14 @@ |
|||||||
|
// PackageStats.aidl |
||||||
|
package android.content.pm; |
||||||
|
|
||||||
|
import android.content.pm.PackageStats; |
||||||
|
/** |
||||||
|
* API for package data change related callbacks from the Package Manager. |
||||||
|
* Some usage scenarios include deletion of cache directory, generate |
||||||
|
* statistics related to code, data, cache usage(TODO) |
||||||
|
* {@hide} |
||||||
|
*/ |
||||||
|
oneway interface IPackageStatsObserver { |
||||||
|
|
||||||
|
void onGetStatsCompleted(in PackageStats pStats, boolean succeeded); |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
package android.content.pm; |
||||||
|
|
||||||
|
parcelable PackageStats; |
@ -0,0 +1,14 @@ |
|||||||
|
// PackageStats.aidl |
||||||
|
package android.content.pm; |
||||||
|
|
||||||
|
import android.content.pm.PackageStats; |
||||||
|
/** |
||||||
|
* API for package data change related callbacks from the Package Manager. |
||||||
|
* Some usage scenarios include deletion of cache directory, generate |
||||||
|
* statistics related to code, data, cache usage(TODO) |
||||||
|
* {@hide} |
||||||
|
*/ |
||||||
|
oneway interface IPackageStatsObserver { |
||||||
|
|
||||||
|
void onGetStatsCompleted(in PackageStats pStats, boolean succeeded); |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
package android.content.pm; |
||||||
|
|
||||||
|
parcelable PackageStats; |
@ -0,0 +1,199 @@ |
|||||||
|
package vip.devkit.debugkit; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.kit.GroupKitItem; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.kit.KitItem; |
||||||
|
import vip.devkit.debugkit.kit.debug.AppInfo; |
||||||
|
import vip.devkit.debugkit.kit.debug.BaseUrlManger; |
||||||
|
import vip.devkit.debugkit.kit.debug.CachesManager; |
||||||
|
import vip.devkit.debugkit.kit.debug.CrashManger; |
||||||
|
import vip.devkit.debugkit.kit.debug.DataExport; |
||||||
|
import vip.devkit.debugkit.kit.debug.FileExplorer; |
||||||
|
import vip.devkit.debugkit.kit.debug.WebBrowse; |
||||||
|
import vip.devkit.debugkit.kit.debug.LogManager; |
||||||
|
import vip.devkit.debugkit.kit.debug.PermissionManager; |
||||||
|
import vip.devkit.debugkit.kit.debug.Simulation; |
||||||
|
import vip.devkit.debugkit.kit.performance.Battery; |
||||||
|
import vip.devkit.debugkit.kit.performance.CPU; |
||||||
|
import vip.devkit.debugkit.kit.performance.FTPS; |
||||||
|
import vip.devkit.debugkit.kit.performance.RAM; |
||||||
|
import vip.devkit.debugkit.kit.performance.Time; |
||||||
|
import vip.devkit.debugkit.kit.performance.Traffic; |
||||||
|
import vip.devkit.debugkit.kit.system.CpuKit; |
||||||
|
import vip.devkit.debugkit.kit.system.HardwareKit; |
||||||
|
import vip.devkit.debugkit.kit.system.NetworkKit; |
||||||
|
import vip.devkit.debugkit.kit.system.ScreenKit; |
||||||
|
import vip.devkit.debugkit.kit.system.SysInfo; |
||||||
|
import vip.devkit.debugkit.kit.ue.ColorPicker; |
||||||
|
import vip.devkit.debugkit.kit.ue.UE; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit |
||||||
|
* File Name: DataSource.java |
||||||
|
* Create Date: 2019/7/1 17:24 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class DataSource { |
||||||
|
|
||||||
|
private List<GroupKitItem> mItemList = new ArrayList<>(); |
||||||
|
private List<KitItem> mDiyKitItems = new ArrayList<>(); |
||||||
|
private Context mContext; |
||||||
|
|
||||||
|
public List<GroupKitItem> getKitList() { |
||||||
|
return mItemList; |
||||||
|
} |
||||||
|
|
||||||
|
public DataSource(Context context) { |
||||||
|
mContext = context; |
||||||
|
initKit(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initKit() { |
||||||
|
sysKit(); |
||||||
|
debugKit(); |
||||||
|
developerKit(); |
||||||
|
performanceKit(); |
||||||
|
ueKit(); |
||||||
|
diyKit(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void sysKit() { |
||||||
|
GroupKitItem sys = new GroupKitItem(); |
||||||
|
sys.mGroupName = ResUtil.getString(mContext, R.string.dk_sys_system); |
||||||
|
|
||||||
|
List<IKit> d = new ArrayList<>(); |
||||||
|
d.add(new SysInfo()); |
||||||
|
d.add(new ScreenKit()); |
||||||
|
d.add(new NetworkKit()); |
||||||
|
d.add(new HardwareKit()); |
||||||
|
d.add(new CpuKit()); |
||||||
|
|
||||||
|
List<KitItem> kitItems = new ArrayList<>(); |
||||||
|
for (IKit kit : d) { |
||||||
|
kitItems.add(new KitItem(kit)); |
||||||
|
} |
||||||
|
sys.mKitList = kitItems; |
||||||
|
mItemList.add(sys); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void debugKit() { |
||||||
|
GroupKitItem mGroupBean = new GroupKitItem(); |
||||||
|
mGroupBean.mGroupName = ResUtil.getString(mContext, R.string.dk_debug); |
||||||
|
|
||||||
|
|
||||||
|
List<IKit> d = new ArrayList<>(); |
||||||
|
d.add(new AppInfo()); |
||||||
|
d.add(new FileExplorer()); |
||||||
|
d.add(new LogManager()); |
||||||
|
d.add(new PermissionManager()); |
||||||
|
d.add(new BaseUrlManger()); |
||||||
|
d.add(new CachesManager()); |
||||||
|
d.add(new CrashManger()); |
||||||
|
d.add(new Simulation()); |
||||||
|
d.add(new DataExport()); |
||||||
|
d.add(new WebBrowse()); |
||||||
|
|
||||||
|
|
||||||
|
List<KitItem> kitItems = new ArrayList<>(); |
||||||
|
for (IKit kit : d) { |
||||||
|
kitItems.add(new KitItem(kit)); |
||||||
|
} |
||||||
|
mGroupBean.mKitList = kitItems; |
||||||
|
mItemList.add(mGroupBean); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void developerKit() { |
||||||
|
GroupKitItem mGroupBean = new GroupKitItem(); |
||||||
|
mGroupBean.mGroupName = ResUtil.getString(mContext, R.string.dk_developer); |
||||||
|
|
||||||
|
List<IKit> d = new ArrayList<>(); |
||||||
|
d.add(new SysInfo()); |
||||||
|
d.add(new ScreenKit()); |
||||||
|
d.add(new NetworkKit()); |
||||||
|
d.add(new HardwareKit()); |
||||||
|
d.add(new CpuKit()); |
||||||
|
|
||||||
|
List<KitItem> kitItems = new ArrayList<>(); |
||||||
|
for (IKit kit : d) { |
||||||
|
kitItems.add(new KitItem(kit)); |
||||||
|
} |
||||||
|
mGroupBean.mKitList = kitItems; |
||||||
|
mItemList.add(mGroupBean); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void performanceKit() { |
||||||
|
GroupKitItem mGroupBean = new GroupKitItem(); |
||||||
|
mGroupBean.mGroupName = ResUtil.getString(mContext, R.string.dk_performance); |
||||||
|
|
||||||
|
List<IKit> d = new ArrayList<>(); |
||||||
|
d.add(new FTPS()); |
||||||
|
d.add(new CPU()); |
||||||
|
d.add(new RAM()); |
||||||
|
d.add(new Traffic()); |
||||||
|
d.add(new Battery()); |
||||||
|
d.add(new Time()); |
||||||
|
|
||||||
|
List<KitItem> kitItems = new ArrayList<>(); |
||||||
|
for (IKit kit : d) { |
||||||
|
kitItems.add(new KitItem(kit)); |
||||||
|
} |
||||||
|
mGroupBean.mKitList = kitItems; |
||||||
|
mItemList.add(mGroupBean); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void ueKit() { |
||||||
|
GroupKitItem mGroupBean = new GroupKitItem(); |
||||||
|
mGroupBean.mGroupName = ResUtil.getString(mContext, R.string.dk_ue); |
||||||
|
|
||||||
|
List<IKit> d = new ArrayList<>(); |
||||||
|
d.add(new ColorPicker()); |
||||||
|
d.add(new UE()); |
||||||
|
|
||||||
|
List<KitItem> kitItems = new ArrayList<>(); |
||||||
|
for (IKit kit : d) { |
||||||
|
kitItems.add(new KitItem(kit)); |
||||||
|
} |
||||||
|
mGroupBean.mKitList = kitItems; |
||||||
|
mItemList.add(mGroupBean); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void diyKit() { |
||||||
|
if (mDiyKitItems.size() > 0) { |
||||||
|
GroupKitItem mGroupBean = new GroupKitItem(); |
||||||
|
mGroupBean.mGroupName = ResUtil.getString(mContext, R.string.dk_diy); |
||||||
|
mGroupBean.mKitList = mDiyKitItems; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void add(IKit mIKit) { |
||||||
|
mDiyKitItems.add(new KitItem(mIKit)); |
||||||
|
} |
||||||
|
|
||||||
|
public void add(List<IKit> list) { |
||||||
|
for (IKit kit : list) { |
||||||
|
mDiyKitItems.add(new KitItem(kit)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package vip.devkit.debugkit; |
||||||
|
|
||||||
|
import androidx.core.content.FileProvider; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit |
||||||
|
* File Name: DebugKitFileProvider.java |
||||||
|
* Create Date: 2019/6/28 11:06 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class DebugKitFileProvider extends FileProvider { |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package vip.devkit.debugkit; |
||||||
|
|
||||||
|
import android.view.View; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.kit.KitItem; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseViewHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit |
||||||
|
* File Name: KitAdapter.java |
||||||
|
* Create Date: 2019/7/1 14:59 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class KitAdapter extends BaseRecyclerAdapter<KitItem, BaseViewHolder> { |
||||||
|
|
||||||
|
|
||||||
|
public KitAdapter(int layoutResId, @Nullable List<KitItem> data) { |
||||||
|
super(layoutResId, data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void convert(BaseViewHolder helper,final KitItem mItem) { |
||||||
|
helper.setText(R.id.tv_name, mItem.kit.getName()) |
||||||
|
.setImageResource(R.id.iv_icon, mItem.kit.getIcon()); |
||||||
|
helper.itemView.setOnClickListener(new View.OnClickListener() { |
||||||
|
@Override |
||||||
|
public void onClick(View v) { |
||||||
|
mItem.kit.onClick(mContext); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void setOnItemClick(View v, int position) { |
||||||
|
super.setOnItemClick(v, position); |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package vip.devkit.debugkit; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
import androidx.recyclerview.widget.GridLayoutManager; |
||||||
|
import androidx.recyclerview.widget.RecyclerView; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.kit.GroupKitItem; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseViewHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit |
||||||
|
* File Name: KitManagerAdapter.java |
||||||
|
* Create Date: 2019/7/1 11:16 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class KitManagerAdapter extends BaseRecyclerAdapter<GroupKitItem, BaseViewHolder> { |
||||||
|
|
||||||
|
public KitManagerAdapter(int layoutResId, @Nullable List<GroupKitItem> data) { |
||||||
|
super(layoutResId, data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void convert(BaseViewHolder helper, GroupKitItem mItem) { |
||||||
|
|
||||||
|
helper.setText(R.id.tv_group_name, mItem.mGroupName); |
||||||
|
RecyclerView mKitList = (RecyclerView) helper.getView(R.id.rv_group_kit); |
||||||
|
mKitList.setLayoutManager(new GridLayoutManager(mContext, 4)); |
||||||
|
KitAdapter mKitAdapter = new KitAdapter(R.layout.dk_item_kit, mItem.mKitList); |
||||||
|
mKitList.setAdapter(mKitAdapter); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
package vip.devkit.debugkit.adapter; |
||||||
|
|
||||||
|
import android.widget.CheckBox; |
||||||
|
import android.widget.CompoundButton; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
import vip.devkit.debugkit.ui.base_url.UrlInfo; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseViewHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.adapter |
||||||
|
* File Name: BaseUrlManagerAdapter.java |
||||||
|
* Create Date: 2019/7/3 10:34 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class BaseUrlManagerAdapter extends BaseRecyclerAdapter<UrlInfo, BaseViewHolder> { |
||||||
|
|
||||||
|
public interface OnUrlCheckedListener { |
||||||
|
void onChecked(UrlInfo urlInfo); |
||||||
|
} |
||||||
|
|
||||||
|
private OnUrlCheckedListener mOnUrlCheckedListener; |
||||||
|
private int checkPosition=-1; |
||||||
|
|
||||||
|
public void setOnUrlCheckedListener(OnUrlCheckedListener onUrlCheckedListener) { |
||||||
|
mOnUrlCheckedListener = onUrlCheckedListener; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseUrlManagerAdapter(int layoutResId, @Nullable List<UrlInfo> data) { |
||||||
|
super(layoutResId, data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void convert(final BaseViewHolder helper, final UrlInfo mItem) { |
||||||
|
helper.setText(R.id.tv_url, mItem.getBaseUrl()); |
||||||
|
CheckBox checkBox = (CheckBox) helper.getView(R.id.cb_check); |
||||||
|
LogCat.i("----------"+helper.getAdapterPosition()); |
||||||
|
if (helper.getAdapterPosition()==checkPosition){ |
||||||
|
checkBox.setChecked(true); |
||||||
|
}else { |
||||||
|
checkBox.setChecked(false); |
||||||
|
} |
||||||
|
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { |
||||||
|
@Override |
||||||
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
||||||
|
LogCat.i("----------"+helper.getAdapterPosition()+"/"+isChecked); |
||||||
|
if (isChecked && mOnUrlCheckedListener != null) { |
||||||
|
checkPosition=helper.getAdapterPosition(); |
||||||
|
mOnUrlCheckedListener.onChecked(mItem); |
||||||
|
} else { |
||||||
|
checkPosition=-1; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package vip.devkit.debugkit.adapter; |
||||||
|
|
||||||
|
import android.util.Log; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
|
||||||
|
import java.lang.reflect.UndeclaredThrowableException; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.bean.CrashInfoBean; |
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseViewHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.adapter |
||||||
|
* File Name: CrashListAdapter.java |
||||||
|
* Create Date: 2019/7/9 10:00 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CrashListAdapter extends BaseRecyclerAdapter<CrashInfoBean, BaseViewHolder> { |
||||||
|
public CrashListAdapter(int layoutResId, @Nullable List<CrashInfoBean> data) { |
||||||
|
super(layoutResId, data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void convert(BaseViewHolder helper, CrashInfoBean mItem) { |
||||||
|
LogCat.i(" 1" + mItem.tr.toString()); |
||||||
|
|
||||||
|
Throwable throwable = mItem.tr; |
||||||
|
String type = throwable.toString(); |
||||||
|
// LogCat.i("throwable 99999 "+type.substring(0,type.indexOf(":")));
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); |
||||||
|
helper.setText(R.id.tv_time,""+dateFormat.format(new Date(mItem.time))) |
||||||
|
.setText(R.id.tv_crash_name,type.substring(0,type.indexOf(":"))); |
||||||
|
if (helper.getAdapterPosition()==0){ |
||||||
|
LogCat.i(Log.getStackTraceString(throwable)); |
||||||
|
} |
||||||
|
|
||||||
|
// StackTraceElement[] elements= throwable .getStackTrace();
|
||||||
|
// for (int i = 0; i <elements.length ; i++) {
|
||||||
|
// StackTraceElement stackTraceElement = elements[i];
|
||||||
|
// LogCat.i(
|
||||||
|
// helper.getAdapterPosition()
|
||||||
|
// +"堆栈 getLineNumber:"+stackTraceElement.getClassName()
|
||||||
|
// +"("
|
||||||
|
// +stackTraceElement.getFileName()
|
||||||
|
// +":"
|
||||||
|
// +stackTraceElement.getLineNumber()+")");
|
||||||
|
// }
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package vip.devkit.debugkit.adapter; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.bean.FileInfoBean; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseViewHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.adapter |
||||||
|
* File Name: FileInfoAdapter.java |
||||||
|
* Create Date: 2019/7/9 14:27 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class FileFolderAdapter extends BaseRecyclerAdapter<FileInfoBean, BaseViewHolder> { |
||||||
|
public FileFolderAdapter(int layoutResId, @Nullable List<FileInfoBean> data) { |
||||||
|
super(layoutResId, data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void convert(BaseViewHolder helper, FileInfoBean mItem) { |
||||||
|
helper.setText(R.id.tv_folder,mItem.file.getName()+" >"); |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,56 @@ |
|||||||
|
package vip.devkit.debugkit.adapter; |
||||||
|
|
||||||
|
import android.widget.ImageView; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.bean.FileInfoBean; |
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
import vip.devkit.debugkit.util.FileUtil; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseViewHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.adapter |
||||||
|
* File Name: FileInfoAdapter.java |
||||||
|
* Create Date: 2019/7/9 14:27 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class FileInfoAdapter extends BaseRecyclerAdapter<FileInfoBean, BaseViewHolder> { |
||||||
|
public FileInfoAdapter(int layoutResId, @Nullable List<FileInfoBean> data) { |
||||||
|
super(layoutResId, data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void convert(BaseViewHolder helper, FileInfoBean fileInfo) { |
||||||
|
helper.setText(R.id.tv_name, fileInfo.file.getName()) |
||||||
|
.setVisible(R.id.iv_more, !fileInfo.file.isFile()); |
||||||
|
|
||||||
|
ImageView mIcon = (ImageView) helper.getView(R.id.iv_icon); |
||||||
|
if (fileInfo.file.isFile()) { |
||||||
|
String suffix = FileUtil.getSuffix(fileInfo.file); |
||||||
|
LogCat.i("---------------"+suffix); |
||||||
|
if (suffix.equals("gif") || suffix.equals("jpg") || suffix.equals("jpeg") || suffix.equals("png") || suffix.equals("bmp")) { |
||||||
|
mIcon.setImageResource(R.mipmap.dk_file_img); |
||||||
|
} else if (suffix.equals(FileUtil.TXT)||suffix.equals("json")||suffix.equals("xml")) { |
||||||
|
mIcon.setImageResource(R.mipmap.dk_file_txt); |
||||||
|
} else if (suffix.equals(FileUtil.SHARED_PREFS)) { |
||||||
|
} else if (suffix.equals(FileUtil.DB)) { |
||||||
|
mIcon.setImageResource(R.mipmap.dk_file_db); |
||||||
|
} else { |
||||||
|
mIcon.setImageResource(R.mipmap.dk_file_ohter); |
||||||
|
} |
||||||
|
} else { |
||||||
|
mIcon.setImageResource(R.mipmap.dk_file_folder); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package vip.devkit.debugkit.adapter; |
||||||
|
|
||||||
|
import android.content.pm.PermissionInfo; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
|
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.ui.permission.PermissionData; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseViewHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.adapter |
||||||
|
* File Name: PermissionManagerAdapter.java |
||||||
|
* Create Date: 2019/7/3 11:58 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class PermissionManagerAdapter extends BaseRecyclerAdapter<String, BaseViewHolder> { |
||||||
|
|
||||||
|
|
||||||
|
public PermissionManagerAdapter(int layoutResId, @Nullable List<String> data) { |
||||||
|
super(layoutResId, data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void convert(BaseViewHolder helper, String name) { |
||||||
|
helper.setText(R.id.tv_permission, name) |
||||||
|
.setText(R.id.tv_desc,""+PermissionData.getPermissionName(name)) |
||||||
|
.setChecked(R.id.cb_check, PermissionData.hasSelfPermission(mContext, name)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,281 @@ |
|||||||
|
package vip.devkit.debugkit.bean; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.content.pm.ApplicationInfo; |
||||||
|
import android.content.pm.PackageInfo; |
||||||
|
import android.content.pm.PackageManager; |
||||||
|
import android.graphics.drawable.Drawable; |
||||||
|
import android.os.Build; |
||||||
|
|
||||||
|
import androidx.annotation.Keep; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.util.AppUtil; |
||||||
|
import vip.devkit.debugkit.util.DeviceUtils; |
||||||
|
import vip.devkit.debugkit.util.FileUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.bean |
||||||
|
* File Name: AppInfoBean.java |
||||||
|
* Create Date: 2019/7/8 13:56 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class AppInfoBean { |
||||||
|
|
||||||
|
@Keep // App 包名
|
||||||
|
private String appPackName; |
||||||
|
@Keep // App 应用名
|
||||||
|
private String appName; |
||||||
|
@Keep // App 图标
|
||||||
|
private transient Drawable appIcon; |
||||||
|
@Keep // App 类型
|
||||||
|
private AppType appType; |
||||||
|
@Keep // App 版本号
|
||||||
|
private int versionCode; |
||||||
|
@Keep // App 版本名
|
||||||
|
private String versionName; |
||||||
|
@Keep // App 首次安装时间
|
||||||
|
private long firstInstallTime; |
||||||
|
@Keep // App 最后一次更新时间
|
||||||
|
private long lastUpdateTime; |
||||||
|
@Keep // App 地址
|
||||||
|
private String sourceDir; |
||||||
|
@Keep // APK 大小
|
||||||
|
private long apkSize; |
||||||
|
@Keep //Sign MD5
|
||||||
|
private String apkSign; |
||||||
|
@Keep //最小支持
|
||||||
|
private int minSdkVersion = -1; |
||||||
|
@Keep //兼容
|
||||||
|
private int targetSdkVersion = -1; |
||||||
|
|
||||||
|
@Keep //activity 数量
|
||||||
|
private int activityCount; |
||||||
|
@Keep //service 数量
|
||||||
|
private int serviceCount; |
||||||
|
@Keep //receiver 数量
|
||||||
|
private int receiverCount; |
||||||
|
@Keep //provider 数量
|
||||||
|
private int providerCount; |
||||||
|
@Keep //permission 数量
|
||||||
|
private int permissionCount; |
||||||
|
|
||||||
|
|
||||||
|
private Context context; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化 AppInfoBean |
||||||
|
*/ |
||||||
|
protected AppInfoBean() { |
||||||
|
|
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
public AppInfoBean(Context context) { |
||||||
|
this.context = context; |
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() { |
||||||
|
//GET_CONFIGURATIONS
|
||||||
|
PackageInfo packageInfo = DeviceUtils.getPackageInfo(context); |
||||||
|
|
||||||
|
PackageManager packageManager = context.getPackageManager(); |
||||||
|
// App 包名
|
||||||
|
appPackName = packageInfo.applicationInfo.packageName; |
||||||
|
// App 应用名
|
||||||
|
appName = packageManager.getApplicationLabel(packageInfo.applicationInfo).toString(); |
||||||
|
// App 图标
|
||||||
|
appIcon = packageManager.getApplicationIcon(packageInfo.applicationInfo); |
||||||
|
// App 类型
|
||||||
|
appType = AppInfoBean.getAppType(packageInfo); |
||||||
|
// App 版本号
|
||||||
|
versionCode = packageInfo.versionCode; |
||||||
|
// App 版本名
|
||||||
|
versionName = packageInfo.versionName; |
||||||
|
// App 首次安装时间
|
||||||
|
firstInstallTime = packageInfo.firstInstallTime; |
||||||
|
// App 最后一次更新时间
|
||||||
|
lastUpdateTime = packageInfo.lastUpdateTime; |
||||||
|
// App 地址
|
||||||
|
sourceDir = packageInfo.applicationInfo.sourceDir; |
||||||
|
// APK 大小
|
||||||
|
// apkSize = FileUtil.getFileSize(context,sourceDir);
|
||||||
|
// APK sign
|
||||||
|
apkSign = AppUtil.getSign(context, packageInfo.packageName); |
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { |
||||||
|
minSdkVersion = context.getApplicationInfo().minSdkVersion; |
||||||
|
} |
||||||
|
targetSdkVersion = context.getApplicationInfo().targetSdkVersion; |
||||||
|
PackageInfo pia = DeviceUtils.getPackageInfo(context, PackageManager.GET_ACTIVITIES); |
||||||
|
if (pia.activities != null) { |
||||||
|
activityCount = pia.activities.length; |
||||||
|
} |
||||||
|
|
||||||
|
PackageInfo pis = DeviceUtils.getPackageInfo(context, PackageManager.GET_SERVICES); |
||||||
|
if (pis.services != null) { |
||||||
|
serviceCount = pis.services.length; |
||||||
|
} |
||||||
|
|
||||||
|
PackageInfo pir = DeviceUtils.getPackageInfo(context, PackageManager.GET_RECEIVERS); |
||||||
|
if (pir.receivers != null) { |
||||||
|
receiverCount = pir.receivers.length; |
||||||
|
} |
||||||
|
PackageInfo pip = DeviceUtils.getPackageInfo(context, PackageManager.GET_PROVIDERS); |
||||||
|
if (pip.providers != null) { |
||||||
|
providerCount = pip.providers.length; |
||||||
|
} |
||||||
|
|
||||||
|
PackageInfo permissions = DeviceUtils.getPackageInfo(context, PackageManager.GET_PERMISSIONS); |
||||||
|
if (permissions.requestedPermissions != null) { |
||||||
|
permissionCount = permissions.requestedPermissions.length; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* detail: 应用类型 |
||||||
|
*/ |
||||||
|
public enum AppType { |
||||||
|
|
||||||
|
USER, // 用户 App
|
||||||
|
|
||||||
|
SYSTEM, // 系统 App
|
||||||
|
|
||||||
|
ALL // 全部 App
|
||||||
|
} |
||||||
|
|
||||||
|
public String getAppPackName() { |
||||||
|
return appPackName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAppName() { |
||||||
|
return appName; |
||||||
|
} |
||||||
|
|
||||||
|
public Drawable getAppIcon() { |
||||||
|
return appIcon; |
||||||
|
} |
||||||
|
|
||||||
|
public AppType getAppType() { |
||||||
|
return appType; |
||||||
|
} |
||||||
|
|
||||||
|
public int getVersionCode() { |
||||||
|
return versionCode; |
||||||
|
} |
||||||
|
|
||||||
|
public String getVersionName() { |
||||||
|
return versionName; |
||||||
|
} |
||||||
|
|
||||||
|
public long getFirstInstallTime() { |
||||||
|
return firstInstallTime; |
||||||
|
} |
||||||
|
|
||||||
|
public long getLastUpdateTime() { |
||||||
|
return lastUpdateTime; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSourceDir() { |
||||||
|
return sourceDir; |
||||||
|
} |
||||||
|
|
||||||
|
public long getApkSize() { |
||||||
|
return apkSize; |
||||||
|
} |
||||||
|
|
||||||
|
public String getApkSign() { |
||||||
|
return apkSign; |
||||||
|
} |
||||||
|
|
||||||
|
public int getMinSdkVersion() { |
||||||
|
return minSdkVersion; |
||||||
|
} |
||||||
|
|
||||||
|
public int getTargetSdkVersion() { |
||||||
|
return targetSdkVersion; |
||||||
|
} |
||||||
|
|
||||||
|
public int getActivityCount() { |
||||||
|
return activityCount; |
||||||
|
} |
||||||
|
|
||||||
|
public int getServiceCount() { |
||||||
|
return serviceCount; |
||||||
|
} |
||||||
|
|
||||||
|
public int getReceiverCount() { |
||||||
|
return receiverCount; |
||||||
|
} |
||||||
|
|
||||||
|
public int getProviderCount() { |
||||||
|
return providerCount; |
||||||
|
} |
||||||
|
|
||||||
|
public int getPermissionCount() { |
||||||
|
return permissionCount; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取 App 类型 |
||||||
|
* |
||||||
|
* @param packageInfo {@link PackageInfo} |
||||||
|
* @return {@link AppType} 应用类型 |
||||||
|
*/ |
||||||
|
public static AppType getAppType(final PackageInfo packageInfo) { |
||||||
|
if (!isSystemApp(packageInfo) && !isSystemUpdateApp(packageInfo)) { |
||||||
|
return AppType.USER; |
||||||
|
} |
||||||
|
return AppType.SYSTEM; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否系统程序 |
||||||
|
* |
||||||
|
* @param packageInfo {@link PackageInfo} |
||||||
|
* @return {@code true} yes, {@code false} no |
||||||
|
*/ |
||||||
|
public static boolean isSystemApp(final PackageInfo packageInfo) { |
||||||
|
return ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否系统程序被手动更新后, 也成为第三方应用程序 |
||||||
|
* |
||||||
|
* @param packageInfo {@link PackageInfo} |
||||||
|
* @return {@code true} yes, {@code false} no |
||||||
|
*/ |
||||||
|
public static boolean isSystemUpdateApp(final PackageInfo packageInfo) { |
||||||
|
return ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return "AppInfoBean{" + |
||||||
|
"appPackName='" + appPackName + '\'' + |
||||||
|
", appName='" + appName + '\'' + |
||||||
|
", appIcon=" + appIcon + |
||||||
|
", appType=" + appType + |
||||||
|
", versionCode=" + versionCode + |
||||||
|
", versionName='" + versionName + '\'' + |
||||||
|
", firstInstallTime=" + firstInstallTime + |
||||||
|
", lastUpdateTime=" + lastUpdateTime + |
||||||
|
", sourceDir='" + sourceDir + '\'' + |
||||||
|
", apkSize=" + apkSize + |
||||||
|
", apkSign='" + apkSign + '\'' + |
||||||
|
", minSdkVersion='" + targetSdkVersion + '\'' + |
||||||
|
", activityCount=" + activityCount + |
||||||
|
", serviceCount=" + serviceCount + |
||||||
|
", receiverCount=" + receiverCount + |
||||||
|
", providerCount=" + providerCount + |
||||||
|
", permissionCount=" + permissionCount + |
||||||
|
'}'; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package vip.devkit.debugkit.bean; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.bean |
||||||
|
* File Name: CrashInfoBean.java |
||||||
|
* Create Date: 2019/7/9 9:24 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CrashInfoBean implements Serializable { |
||||||
|
public final Throwable tr; |
||||||
|
|
||||||
|
public final long time; |
||||||
|
|
||||||
|
public CrashInfoBean(Throwable tr, long l) { |
||||||
|
this.tr = tr; |
||||||
|
this.time = l; |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package vip.devkit.debugkit.bean; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.bean |
||||||
|
* File Name: FileInfoBean.java |
||||||
|
* Create Date: 2019/7/9 14:23 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class FileInfoBean { |
||||||
|
public final File file; |
||||||
|
|
||||||
|
public FileInfoBean(File file) { |
||||||
|
this.file = file; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package vip.devkit.debugkit.bean; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.bean |
||||||
|
* File Name: PermissionData.java |
||||||
|
* Create Date: 2019/7/3 11:59 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class PermissionInfo { |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package vip.devkit.debugkit.kit; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit |
||||||
|
* File Name: Category.java |
||||||
|
* Create Date: 2019/6/28 10:57 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public interface Category { |
||||||
|
int BIZ = 0; |
||||||
|
|
||||||
|
int TOOLS = 1; |
||||||
|
|
||||||
|
int PERFORMANCE = 2; |
||||||
|
|
||||||
|
int UI = 3; |
||||||
|
|
||||||
|
int CLOSE = 5; |
||||||
|
} |
||||||
|
|
@ -0,0 +1,30 @@ |
|||||||
|
package vip.devkit.debugkit.kit; |
||||||
|
|
||||||
|
import java.security.acl.Group; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit |
||||||
|
* File Name: GroupKitItem.java |
||||||
|
* Create Date: 2019/7/1 14:53 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class GroupKitItem { |
||||||
|
|
||||||
|
|
||||||
|
public String mGroupName; |
||||||
|
public List<KitItem> mKitList; |
||||||
|
|
||||||
|
public GroupKitItem() { |
||||||
|
} |
||||||
|
|
||||||
|
public GroupKitItem(String groupName, List<KitItem> kitList) { |
||||||
|
mGroupName = groupName; |
||||||
|
mKitList = kitList; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package vip.devkit.debugkit.kit; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
|
||||||
|
import androidx.annotation.DrawableRes; |
||||||
|
import androidx.annotation.StringRes; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit |
||||||
|
* File Name: IKit.java |
||||||
|
* Create Date: 2019/6/28 10:57 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public interface IKit { |
||||||
|
int getCategory(); |
||||||
|
|
||||||
|
@StringRes |
||||||
|
int getName(); |
||||||
|
|
||||||
|
@DrawableRes |
||||||
|
int getIcon(); |
||||||
|
|
||||||
|
void onClick(Context context); |
||||||
|
|
||||||
|
void onAppInit(Context context); |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package vip.devkit.debugkit.kit; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit |
||||||
|
* File Name: KitItem.java |
||||||
|
* Create Date: 2019/7/1 15:00 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class KitItem { |
||||||
|
public IKit kit; |
||||||
|
|
||||||
|
public KitItem(){ |
||||||
|
|
||||||
|
} |
||||||
|
public KitItem(IKit kit) { |
||||||
|
this.kit = kit; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package vip.devkit.debugkit.kit.crash; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.crash |
||||||
|
* File Name: CacheConfig.java |
||||||
|
* Create Date: 2019/7/9 9:33 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CacheConfig { |
||||||
|
|
||||||
|
static String CRASH_HISTORY_DIR = "crash"; |
||||||
|
|
||||||
|
static int CRASH_FILE_SZIE = 5; |
||||||
|
|
||||||
|
static boolean isCrashCapture = false; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,115 @@ |
|||||||
|
package vip.devkit.debugkit.kit.crash; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.io.FileInputStream; |
||||||
|
import java.io.FileOutputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InvalidClassException; |
||||||
|
import java.io.ObjectInputStream; |
||||||
|
import java.io.ObjectOutputStream; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.crash |
||||||
|
* File Name: CacheUtils.java |
||||||
|
* Create Date: 2019/7/9 9:30 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CacheUtils { |
||||||
|
|
||||||
|
private CacheUtils() { |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean saveObject(Context context, String key, Serializable ser) { |
||||||
|
File file = new File(context.getCacheDir() + "/" + key); |
||||||
|
if (!file.exists()) { |
||||||
|
try { |
||||||
|
file.createNewFile(); |
||||||
|
} catch (IOException e) { |
||||||
|
LogCat.e(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
return saveObject(ser, file); |
||||||
|
} |
||||||
|
|
||||||
|
public static Serializable readObject(Context context, String key) { |
||||||
|
File file = new File(context.getCacheDir() + "/" + key); |
||||||
|
return readObject(file); |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean saveObject(Serializable ser, File file) { |
||||||
|
FileOutputStream fos = null; |
||||||
|
ObjectOutputStream oos = null; |
||||||
|
try { |
||||||
|
fos = new FileOutputStream(file); |
||||||
|
oos = new ObjectOutputStream(fos); |
||||||
|
oos.writeObject(ser); |
||||||
|
oos.flush(); |
||||||
|
return true; |
||||||
|
} catch (IOException e) { |
||||||
|
LogCat.e(e.toString()); |
||||||
|
return false; |
||||||
|
} finally { |
||||||
|
if (oos != null) { |
||||||
|
try { |
||||||
|
oos.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
LogCat.e(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
if (fos != null) { |
||||||
|
try { |
||||||
|
fos.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
LogCat.e(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static Serializable readObject(File file) { |
||||||
|
if (file == null || !file.exists() || file.isDirectory()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
FileInputStream fis = null; |
||||||
|
ObjectInputStream ois = null; |
||||||
|
try { |
||||||
|
fis = new FileInputStream(file); |
||||||
|
ois = new ObjectInputStream(fis); |
||||||
|
return (Serializable) ois.readObject(); |
||||||
|
} catch (IOException e) { |
||||||
|
if (e instanceof InvalidClassException) { |
||||||
|
file.delete(); |
||||||
|
} |
||||||
|
LogCat.e(e.toString()); |
||||||
|
return null; |
||||||
|
} catch (ClassNotFoundException e) { |
||||||
|
LogCat.e(e.toString()); |
||||||
|
return null; |
||||||
|
} finally { |
||||||
|
if (fis != null) { |
||||||
|
try { |
||||||
|
fis.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
LogCat.e(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
if (ois != null) { |
||||||
|
try { |
||||||
|
ois.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
LogCat.e(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,126 @@ |
|||||||
|
package vip.devkit.debugkit.kit.crash; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.os.Handler; |
||||||
|
import android.os.HandlerThread; |
||||||
|
import android.util.Log; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.io.Serializable; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.bean.CrashInfoBean; |
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
import vip.devkit.debugkit.util.FileUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.crash |
||||||
|
* File Name: CrashCaptureManager.java |
||||||
|
* Create Date: 2019/7/9 9:26 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CrashCaptureManager implements Thread.UncaughtExceptionHandler { |
||||||
|
private static final String TAG = "CrashCaptureManager"; |
||||||
|
private final Thread.UncaughtExceptionHandler mDefaultHandler; |
||||||
|
private final Handler mHandler; |
||||||
|
private Context mContext; |
||||||
|
private CrashCaptureManager() { |
||||||
|
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); |
||||||
|
HandlerThread handlerThread = new HandlerThread(TAG); |
||||||
|
handlerThread.start(); |
||||||
|
mHandler = new Handler(handlerThread.getLooper()); |
||||||
|
} |
||||||
|
|
||||||
|
private static class Holder { |
||||||
|
private static final CrashCaptureManager INSTANCE = new CrashCaptureManager(); |
||||||
|
} |
||||||
|
|
||||||
|
public static CrashCaptureManager getInstance() { |
||||||
|
return Holder.INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
public void init(Context context) { |
||||||
|
mContext = context.getApplicationContext(); |
||||||
|
} |
||||||
|
|
||||||
|
public void start() { |
||||||
|
Thread.setDefaultUncaughtExceptionHandler(this); |
||||||
|
} |
||||||
|
|
||||||
|
public void stop() { |
||||||
|
Thread.setDefaultUncaughtExceptionHandler(mDefaultHandler); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void uncaughtException(final Thread t, final Throwable e) { |
||||||
|
LogCat.d(t.toString()); |
||||||
|
LogCat.d(Log.getStackTraceString(e)); |
||||||
|
CacheUtils.saveObject(e, getCrashCacheFile()); |
||||||
|
post(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
Toast.makeText(mContext, mContext.getString(R.string.dk_crash_capture_tips), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
}); |
||||||
|
postDelay(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
if (mDefaultHandler != null) { |
||||||
|
mDefaultHandler.uncaughtException(t, e); |
||||||
|
} |
||||||
|
} |
||||||
|
}, 2000); |
||||||
|
} |
||||||
|
|
||||||
|
private void post(Runnable r) { |
||||||
|
mHandler.post(r); |
||||||
|
} |
||||||
|
|
||||||
|
private void postDelay(Runnable r, long delayMillis) { |
||||||
|
mHandler.postDelayed(r, delayMillis); |
||||||
|
} |
||||||
|
|
||||||
|
public File getCrashCacheDir() { |
||||||
|
File dir = new File(mContext.getCacheDir() + File.separator + "crash"); |
||||||
|
if (!dir.exists()) { |
||||||
|
dir.mkdir(); |
||||||
|
} |
||||||
|
return dir; |
||||||
|
} |
||||||
|
|
||||||
|
private File getCrashCacheFile() { |
||||||
|
String fileName = new Date().toString(); |
||||||
|
return new File(getCrashCacheDir() + File.separator + fileName); |
||||||
|
} |
||||||
|
|
||||||
|
public void clearCacheHistory() { |
||||||
|
FileUtil.deleteDirectory(getCrashCacheDir()); |
||||||
|
} |
||||||
|
|
||||||
|
public List<CrashInfoBean> getCrashCaches() { |
||||||
|
File[] caches = getCrashCacheDir().listFiles(); |
||||||
|
List<CrashInfoBean> result = new ArrayList<>(); |
||||||
|
if (caches == null) { |
||||||
|
return result; |
||||||
|
} |
||||||
|
for (File cache : caches) { |
||||||
|
Serializable serializable = CacheUtils.readObject(cache); |
||||||
|
if (serializable instanceof Throwable) { |
||||||
|
CrashInfoBean info = new CrashInfoBean((Throwable) serializable, cache.lastModified()); |
||||||
|
result.add(info); |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.bean.AppInfoBean; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class AppInfo implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_info; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_app_info; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
AppInfoBean appInfoBean = new AppInfoBean(context); |
||||||
|
// LogCat.i("build netInfo:"+appInfoBean.toString());
|
||||||
|
LogCat.i("dk_log:"+123); |
||||||
|
LogCat.i("dk_log----------------","build netInfo:"+appInfoBean.toString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.content.Intent; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.ui.base_url.BaseUrlManagerActivity; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class BaseUrlManger implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_base_url; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_base_url; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Intent intent = new Intent(context, BaseUrlManagerActivity.class); |
||||||
|
context.startActivity(intent); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.content.Intent; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.ui.AppDataCleanActivity; |
||||||
|
import vip.devkit.debugkit.ui.crash.CrashManagerActivity; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CachesManager implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_clean; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_data_clean; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Intent intent = new Intent(context, AppDataCleanActivity.class); |
||||||
|
context.startActivity(intent); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.content.Intent; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.kit.crash.CrashCaptureManager; |
||||||
|
import vip.devkit.debugkit.ui.crash.CrashManagerActivity; |
||||||
|
import vip.devkit.debugkit.ui.permission.PermissionManagerActivity; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CrashManger implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_crash; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_crash_catch; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
CrashCaptureManager.getInstance().init(context); |
||||||
|
CrashCaptureManager.getInstance().start(); |
||||||
|
Intent intent = new Intent(context, CrashManagerActivity.class); |
||||||
|
context.startActivity(intent); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class DataExport implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_data_export; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_data_export; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.content.Intent; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.ui.FileExplorer.FileExplorerActivity; |
||||||
|
import vip.devkit.debugkit.ui.crash.CrashManagerActivity; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class FileExplorer implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_file; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_file_explorer; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Intent intent = new Intent(context, FileExplorerActivity.class); |
||||||
|
context.startActivity(intent); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: PermissionManager.java |
||||||
|
* Create Date: 2019/7/1 17:48 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class LogManager implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_log; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_log_info; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.content.Intent; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.ui.permission.PermissionManagerActivity; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: PermissionManager.java |
||||||
|
* Create Date: 2019/7/1 17:48 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class PermissionManager implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_permission; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return R.mipmap.dk_crash_permission; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Intent intent = new Intent(context, PermissionManagerActivity.class); |
||||||
|
context.startActivity(intent); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: Simulation.java |
||||||
|
* Create Date: 2019/7/1 17:52 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class Simulation implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_simulation; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package vip.devkit.debugkit.kit.debug; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class WebBrowse implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_web; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package vip.devkit.debugkit.kit.developer; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.developer |
||||||
|
* File Name: Language.java |
||||||
|
* Create Date: 2019/7/1 18:04 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class Language { |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package vip.devkit.debugkit.kit.developer; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.developer |
||||||
|
* File Name: SystemSetting.java |
||||||
|
* Create Date: 2019/7/1 18:00 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class RuningService { |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package vip.devkit.debugkit.kit.developer; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.developer |
||||||
|
* File Name: SystemSetting.java |
||||||
|
* Create Date: 2019/7/1 18:00 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class SystemSetting { |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package vip.devkit.debugkit.kit.developer; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.debug |
||||||
|
* File Name: AppInfoM.java |
||||||
|
* Create Date: 2019/7/1 17:47 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class USBKit implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_debug_info; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,73 @@ |
|||||||
|
package vip.devkit.debugkit.kit.log; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.log |
||||||
|
* File Name: IPrinter.java |
||||||
|
* Create Date: 2019/7/8 15:16 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public interface IPrinter { |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取日志配置信息 |
||||||
|
* |
||||||
|
* @return {@link LogConfig} 日志配置 |
||||||
|
*/ |
||||||
|
LogConfig getLogConfig(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化日志配置信息 ( 使用默认配置 ) |
||||||
|
* |
||||||
|
* @return {@link LogConfig} 日志配置 |
||||||
|
*/ |
||||||
|
LogConfig init(); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 自定义日志配置信息 |
||||||
|
* |
||||||
|
* @param logConfig 日志配置 |
||||||
|
*/ |
||||||
|
void init(LogConfig logConfig); |
||||||
|
|
||||||
|
|
||||||
|
void d(String log); |
||||||
|
|
||||||
|
void i(Object... log); |
||||||
|
|
||||||
|
void w(String log); |
||||||
|
|
||||||
|
void e(String log); |
||||||
|
|
||||||
|
void e(Throwable throwable); |
||||||
|
|
||||||
|
void a(String log); |
||||||
|
|
||||||
|
void json(String log); |
||||||
|
|
||||||
|
void xml(String log); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void d(String tag, String log); |
||||||
|
|
||||||
|
void i(String tag, Object... log); |
||||||
|
|
||||||
|
void w(String tag, String log); |
||||||
|
|
||||||
|
void e(String tag, String log); |
||||||
|
|
||||||
|
void e(String tag, Throwable throwable); |
||||||
|
|
||||||
|
void a(String tag, String log); |
||||||
|
|
||||||
|
void json(String tag, String log); |
||||||
|
|
||||||
|
void xml(String tag, String log); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package vip.devkit.debugkit.kit.log; |
||||||
|
|
||||||
|
import android.text.TextUtils; |
||||||
|
import android.util.Log; |
||||||
|
|
||||||
|
import org.json.JSONArray; |
||||||
|
import org.json.JSONException; |
||||||
|
import org.json.JSONObject; |
||||||
|
|
||||||
|
import java.io.StringReader; |
||||||
|
import java.io.StringWriter; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import javax.xml.transform.OutputKeys; |
||||||
|
import javax.xml.transform.Source; |
||||||
|
import javax.xml.transform.Transformer; |
||||||
|
import javax.xml.transform.TransformerFactory; |
||||||
|
import javax.xml.transform.stream.StreamResult; |
||||||
|
import javax.xml.transform.stream.StreamSource; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.util |
||||||
|
* File Name: LogCat.java |
||||||
|
* Create Date: 2019/7/1 11:51 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class LogCat { |
||||||
|
|
||||||
|
private static final IPrinter sPrinter = new LogPrinter(); |
||||||
|
|
||||||
|
|
||||||
|
private LogCat() { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return {@link LogConfig} config |
||||||
|
*/ |
||||||
|
public static LogConfig getLogConfig() { |
||||||
|
return sPrinter.getLogConfig(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* default |
||||||
|
* @return {@link LogConfig} log config |
||||||
|
*/ |
||||||
|
public static LogConfig init() { |
||||||
|
return sPrinter.init(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param logConfig config |
||||||
|
*/ |
||||||
|
public static void init(final LogConfig logConfig) { |
||||||
|
sPrinter.init(logConfig); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void d(String msg) { |
||||||
|
sPrinter.d(msg); |
||||||
|
} |
||||||
|
|
||||||
|
public static void i(Object... msg) { |
||||||
|
sPrinter.i(msg); |
||||||
|
} |
||||||
|
|
||||||
|
public static void w(String msg) { |
||||||
|
sPrinter.w(msg); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static void e(String msg) { |
||||||
|
sPrinter.e(msg); |
||||||
|
} |
||||||
|
|
||||||
|
public static void e(Throwable msg) { |
||||||
|
sPrinter.e(msg); |
||||||
|
} |
||||||
|
|
||||||
|
public static void a(String msg) { |
||||||
|
sPrinter.a(msg); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static void d(String tag, String msg) { |
||||||
|
sPrinter.d(tag,msg); |
||||||
|
} |
||||||
|
public static void i(String tag, String msg) { |
||||||
|
sPrinter.i(tag,msg); |
||||||
|
} |
||||||
|
public static void w(String tag, String msg) { |
||||||
|
sPrinter.w(tag,msg); |
||||||
|
} |
||||||
|
public static void e(String tag, String msg) { |
||||||
|
sPrinter.e(tag,msg); |
||||||
|
} |
||||||
|
public static void e(String tag,Throwable msg) { |
||||||
|
sPrinter.e(tag,msg); |
||||||
|
} |
||||||
|
public static void a(String tag, String msg) { |
||||||
|
sPrinter.a(tag,msg); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package vip.devkit.debugkit.kit.log; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.log |
||||||
|
* File Name: LogConfig.java |
||||||
|
* Create Date: 2019/7/8 15:00 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class LogConfig { |
||||||
|
|
||||||
|
public static final int VERBOSE = 2; |
||||||
|
public static final int DEBUG = 3; |
||||||
|
public static final int INFO = 4; |
||||||
|
public static final int WARN = 5; |
||||||
|
public static final int ERROR = 6; |
||||||
|
public static final int ASSERT = 7; |
||||||
|
public static final int JSON = 8; |
||||||
|
public static final int XML = 9; |
||||||
|
|
||||||
|
public static final int JSON_INDENT = 4; |
||||||
|
|
||||||
|
public static final String LINE_SEPARATOR = System.getProperty("line.separator"); |
||||||
|
|
||||||
|
|
||||||
|
public static String LOG_TAG = "dk_log"; |
||||||
|
|
||||||
|
public static LogLevel DEFAULT_LOG_LEVEL = LogLevel.DEBUG; |
||||||
|
|
||||||
|
|
||||||
|
public static LogLevel logLevel=DEFAULT_LOG_LEVEL; |
||||||
|
|
||||||
|
public static void setLogTag(String logTag) { |
||||||
|
LOG_TAG = logTag; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLogLevel(LogLevel logLevel) { |
||||||
|
this.logLevel = logLevel; |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,39 @@ |
|||||||
|
package vip.devkit.debugkit.kit.log; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.log |
||||||
|
* File Name: LogLevel.java |
||||||
|
* Create Date: 2019/7/8 14:59 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public enum LogLevel { |
||||||
|
/** |
||||||
|
* 全部不打印 |
||||||
|
*/ |
||||||
|
NONE, |
||||||
|
|
||||||
|
/** |
||||||
|
* 调试级别 v, d - 全部打印 |
||||||
|
*/ |
||||||
|
DEBUG, |
||||||
|
|
||||||
|
/** |
||||||
|
* 正常级别 i |
||||||
|
*/ |
||||||
|
INFO, |
||||||
|
|
||||||
|
/** |
||||||
|
* 警告级别 w |
||||||
|
*/ |
||||||
|
WARN, |
||||||
|
|
||||||
|
/** |
||||||
|
* 异常级别 e, wtf |
||||||
|
*/ |
||||||
|
ERROR |
||||||
|
} |
@ -0,0 +1,327 @@ |
|||||||
|
package vip.devkit.debugkit.kit.log; |
||||||
|
|
||||||
|
import android.text.TextUtils; |
||||||
|
import android.util.Log; |
||||||
|
|
||||||
|
import org.json.JSONArray; |
||||||
|
import org.json.JSONException; |
||||||
|
import org.json.JSONObject; |
||||||
|
|
||||||
|
import java.io.StringReader; |
||||||
|
import java.io.StringWriter; |
||||||
|
|
||||||
|
import javax.xml.transform.OutputKeys; |
||||||
|
import javax.xml.transform.Source; |
||||||
|
import javax.xml.transform.Transformer; |
||||||
|
import javax.xml.transform.TransformerFactory; |
||||||
|
import javax.xml.transform.stream.StreamResult; |
||||||
|
import javax.xml.transform.stream.StreamSource; |
||||||
|
|
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.ASSERT; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.DEBUG; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.ERROR; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.INFO; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.JSON_INDENT; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.LINE_SEPARATOR; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.VERBOSE; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.WARN; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.JSON; |
||||||
|
import static vip.devkit.debugkit.kit.log.LogConfig.XML; |
||||||
|
import static vip.devkit.debugkit.kit.log.Util.getObjectsString; |
||||||
|
import static vip.devkit.debugkit.kit.log.Util.printLine; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.log |
||||||
|
* File Name: LogLevel.java |
||||||
|
* Create Date: 2019/7/8 14:59 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class LogPrinter implements IPrinter { |
||||||
|
|
||||||
|
LogConfig mLogConfig; |
||||||
|
|
||||||
|
@Override |
||||||
|
public LogConfig getLogConfig() { |
||||||
|
return mLogConfig; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public LogConfig init() { |
||||||
|
if (mLogConfig == null) { |
||||||
|
mLogConfig = new LogConfig(); |
||||||
|
} |
||||||
|
return mLogConfig; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void init(LogConfig logConfig) { |
||||||
|
mLogConfig = logConfig; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void d(String log) { |
||||||
|
d(mLogConfig.LOG_TAG, log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void i(Object... log) { |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
for (Object obj : log) { |
||||||
|
sb.append(obj + ","); |
||||||
|
} |
||||||
|
log(INFO,mLogConfig.LOG_TAG,String.valueOf(sb)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void w(String log) { |
||||||
|
log(WARN,mLogConfig.LOG_TAG,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void e(String log) { |
||||||
|
log(INFO,mLogConfig.LOG_TAG,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void e(Throwable throwable) { |
||||||
|
log(ERROR,mLogConfig.LOG_TAG,throwable.toString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void a(String log) { |
||||||
|
log(ASSERT,mLogConfig.LOG_TAG,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void json(String log) { |
||||||
|
log(JSON,mLogConfig.LOG_TAG,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void xml(String log) { |
||||||
|
log(XML,mLogConfig.LOG_TAG,log); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void d(String tag, String log) { |
||||||
|
log(DEBUG,tag,log); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void i(String tag, Object... log) { |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
for (Object obj : log) { |
||||||
|
sb.append(obj + ","); |
||||||
|
} |
||||||
|
log(INFO,tag,String.valueOf(sb)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void w(String tag, String log) { |
||||||
|
log(WARN,tag,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void e(String tag, String log) { |
||||||
|
log(ERROR,tag,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void e(String tag, Throwable throwable) { |
||||||
|
log(ERROR,tag,throwable.toString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void a(String tag, String log) { |
||||||
|
log(ASSERT,tag,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void json(String tag, String log) { |
||||||
|
log(JSON,tag,log); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void xml(String tag, String log) { |
||||||
|
log(XML,tag,log); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void log(int logType, String tagStr, Object objects) { |
||||||
|
String[] contents = wrapperContent(tagStr, objects); |
||||||
|
String tag = contents[0]; |
||||||
|
String msg = contents[1]; |
||||||
|
String headString = contents[2]; |
||||||
|
if (mLogConfig.logLevel != LogLevel.NONE) { |
||||||
|
switch (logType) { |
||||||
|
case VERBOSE: |
||||||
|
case DEBUG: |
||||||
|
case INFO: |
||||||
|
case WARN: |
||||||
|
case ERROR: |
||||||
|
case ASSERT: |
||||||
|
printDefault(logType, tag, headString + msg); |
||||||
|
break; |
||||||
|
case JSON: |
||||||
|
printJson(tag, msg, headString); |
||||||
|
break; |
||||||
|
case XML: |
||||||
|
printXml(tag, msg, headString); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
public String[] wrapperContent(String tag, Object... objects) { |
||||||
|
if (TextUtils.isEmpty(tag)) { |
||||||
|
tag = LogConfig.LOG_TAG; |
||||||
|
} |
||||||
|
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); |
||||||
|
StackTraceElement targetElement = stackTrace[6]; |
||||||
|
if (TextUtils.isEmpty(tag)) { |
||||||
|
targetElement = stackTrace[6]; |
||||||
|
} |
||||||
|
String className = targetElement.getClassName(); |
||||||
|
String[] classNameInfo = className.split("\\."); |
||||||
|
if (classNameInfo.length > 0) { |
||||||
|
className = classNameInfo[classNameInfo.length-1] + ".java"; |
||||||
|
} |
||||||
|
String methodName = targetElement.getMethodName(); |
||||||
|
int lineNumber = targetElement.getLineNumber(); |
||||||
|
if (lineNumber < 0) { |
||||||
|
lineNumber = 0; |
||||||
|
} |
||||||
|
String methodNameShort = methodName.substring(0, 1).toUpperCase() + methodName.substring(1); |
||||||
|
String msg = (objects == null) ? "Log with null object" : getObjectsString(objects); |
||||||
|
String headString = "[(" + className + ":" + lineNumber + ")#" + methodNameShort + " ] "; |
||||||
|
return new String[]{tag, msg, headString}; |
||||||
|
} |
||||||
|
|
||||||
|
private void printDefault(int type, String tag, String msg) { |
||||||
|
if (!Util.isPrintLog(mLogConfig, type)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (TextUtils.isEmpty(tag)) { |
||||||
|
tag = mLogConfig.LOG_TAG; |
||||||
|
} |
||||||
|
int index = 0; |
||||||
|
int maxLength = 4000; |
||||||
|
int countOfSub = msg.length() / maxLength; |
||||||
|
|
||||||
|
if (countOfSub > 0) { // The log is so long
|
||||||
|
for (int i = 0; i < countOfSub; i++) { |
||||||
|
String sub = msg.substring(index, index + maxLength); |
||||||
|
printSub(type, tag, sub); |
||||||
|
index += maxLength; |
||||||
|
} |
||||||
|
//printSub(type, msg.substring(index, msg.length()));
|
||||||
|
} else { |
||||||
|
printSub(type, tag, msg); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void printSub(int type, String tag, String sub) { |
||||||
|
if (tag == null) { |
||||||
|
tag = mLogConfig.LOG_TAG; |
||||||
|
} |
||||||
|
switch (type) { |
||||||
|
case VERBOSE: |
||||||
|
Log.v(tag, sub); |
||||||
|
break; |
||||||
|
case DEBUG: |
||||||
|
Log.d(tag, sub); |
||||||
|
break; |
||||||
|
case INFO: |
||||||
|
Log.i(tag, sub); |
||||||
|
break; |
||||||
|
case WARN: |
||||||
|
Log.w(tag, sub); |
||||||
|
break; |
||||||
|
case ERROR: |
||||||
|
Log.e(tag, sub); |
||||||
|
break; |
||||||
|
case ASSERT: |
||||||
|
Log.wtf(tag, sub); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void printJson(String tag, String json, String headString) { |
||||||
|
if (TextUtils.isEmpty(json)) { |
||||||
|
d("Empty/Null json content"); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (TextUtils.isEmpty(tag)) { |
||||||
|
tag = mLogConfig.LOG_TAG; |
||||||
|
} |
||||||
|
String message; |
||||||
|
|
||||||
|
try { |
||||||
|
if (json.startsWith("{")) { |
||||||
|
JSONObject jsonObject = new JSONObject(json); |
||||||
|
message = jsonObject.toString(JSON_INDENT); |
||||||
|
} else if (json.startsWith("[")) { |
||||||
|
JSONArray jsonArray = new JSONArray(json); |
||||||
|
message = jsonArray.toString(JSON_INDENT); |
||||||
|
} else { |
||||||
|
message = json; |
||||||
|
} |
||||||
|
} catch (JSONException e) { |
||||||
|
message = json; |
||||||
|
} |
||||||
|
|
||||||
|
printLine(tag, true); |
||||||
|
message = headString + LINE_SEPARATOR + message; |
||||||
|
String[] lines = message.split(LINE_SEPARATOR); |
||||||
|
for (String line : lines) { |
||||||
|
Log.d(tag, "|" + line); |
||||||
|
} |
||||||
|
printLine(tag, false); |
||||||
|
} |
||||||
|
|
||||||
|
private void printXml(String tag, String xml, String headString) { |
||||||
|
if (TextUtils.isEmpty(tag)) { |
||||||
|
tag = mLogConfig.LOG_TAG; |
||||||
|
} |
||||||
|
if (xml != null) { |
||||||
|
try { |
||||||
|
Source xmlInput = new StreamSource(new StringReader(xml)); |
||||||
|
StreamResult xmlOutput = new StreamResult(new StringWriter()); |
||||||
|
Transformer transformer = TransformerFactory.newInstance().newTransformer(); |
||||||
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); |
||||||
|
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); |
||||||
|
transformer.transform(xmlInput, xmlOutput); |
||||||
|
xml = xmlOutput.getWriter().toString().replaceFirst(">", ">\n"); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
xml = headString + "\n" + xml; |
||||||
|
} else { |
||||||
|
xml = headString + "Log with null object"; |
||||||
|
} |
||||||
|
|
||||||
|
printLine(tag, true); |
||||||
|
String[] lines = xml.split(LINE_SEPARATOR); |
||||||
|
for (String line : lines) { |
||||||
|
if (!TextUtils.isEmpty(line)) { |
||||||
|
Log.d(tag, "|" + line); |
||||||
|
} |
||||||
|
} |
||||||
|
printLine(tag, false); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,104 @@ |
|||||||
|
package vip.devkit.debugkit.kit.log; |
||||||
|
|
||||||
|
import android.text.TextUtils; |
||||||
|
import android.util.Log; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.log |
||||||
|
* File Name: Util.java |
||||||
|
* Create Date: 2019/7/8 15:38 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class Util { |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static String getObjectsString(Object... objects) { |
||||||
|
|
||||||
|
if (objects.length > 1) { |
||||||
|
StringBuilder stringBuilder = new StringBuilder(); |
||||||
|
stringBuilder.append("\n"); |
||||||
|
for (int i = 0; i < objects.length; i++) { |
||||||
|
Object object = objects[i]; |
||||||
|
if (object == null) { |
||||||
|
stringBuilder.append("param").append("[").append(i).append("]").append(" = ").append("null").append("\n"); |
||||||
|
} else { |
||||||
|
stringBuilder.append("param").append("[").append(i).append("]").append(" = ").append(object.toString()).append("\n"); |
||||||
|
} |
||||||
|
} |
||||||
|
return stringBuilder.toString(); |
||||||
|
} else { |
||||||
|
Object object = objects[0]; |
||||||
|
return object == null ? "null" : object.toString(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void printLine(String tag, boolean isTop) { |
||||||
|
if (isTop) { |
||||||
|
Log.d(tag, "╔═══════════════════════════════════════════════════════════════════════════════════════"); |
||||||
|
} else { |
||||||
|
Log.d(tag, "╚═══════════════════════════════════════════════════════════════════════════════════════"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否打印日志 |
||||||
|
* @param logConfig 日志配置 |
||||||
|
* @param logType 日志类型 |
||||||
|
* @return {@code true} yes, {@code false} no |
||||||
|
*/ |
||||||
|
public static boolean isPrintLog(final LogConfig logConfig, final int logType) { |
||||||
|
boolean isPrint = false; |
||||||
|
LogLevel logLevel = logConfig.logLevel; |
||||||
|
switch (logLevel) { |
||||||
|
case NONE: //
|
||||||
|
break; |
||||||
|
case DEBUG: // v, d - all
|
||||||
|
isPrint = true; |
||||||
|
break; |
||||||
|
case INFO: // i
|
||||||
|
case WARN: // w
|
||||||
|
case ERROR: // e, wtf
|
||||||
|
isPrint = checkLogLevel(logLevel, logType); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
return isPrint; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 判断日志级别是否允许输出 |
||||||
|
* @param logLevel 日志级别 |
||||||
|
* @param logType 日志类型 |
||||||
|
* @return {@code true} yes, {@code false} no |
||||||
|
*/ |
||||||
|
private static boolean checkLogLevel(final LogLevel logLevel, final int logType) { |
||||||
|
switch (logLevel) { |
||||||
|
case INFO: // i
|
||||||
|
if (logType != Log.VERBOSE && logType != Log.DEBUG) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
break; |
||||||
|
case WARN: // w
|
||||||
|
if (logType != Log.VERBOSE && logType != Log.DEBUG && logType != Log.INFO) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
break; |
||||||
|
case ERROR: // e, wtf
|
||||||
|
if (logType == Log.ERROR || logType == Log.ASSERT) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.performance; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.performance |
||||||
|
* File Name: Battery.java |
||||||
|
* Create Date: 2019/7/1 18:05 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class Battery implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_performance_battery; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.performance; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.performance |
||||||
|
* File Name: FTPS.java |
||||||
|
* Create Date: 2019/7/1 18:04 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CPU implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_performance_cpu; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.performance; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.performance |
||||||
|
* File Name: FTPS.java |
||||||
|
* Create Date: 2019/7/1 18:04 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class FTPS implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_performance_fps; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.performance; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.performance |
||||||
|
* File Name: RAM.java |
||||||
|
* Create Date: 2019/7/2 9:14 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class RAM implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_performance_ram; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.performance; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.performance |
||||||
|
* File Name: Time.java |
||||||
|
* Create Date: 2019/7/2 9:15 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class Time implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_performance_open_time; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.performance; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.performance |
||||||
|
* File Name: Traffic.java |
||||||
|
* Create Date: 2019/7/2 9:14 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class Traffic implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_performance_traffic; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.system; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.system |
||||||
|
* File Name: HardwareKit.java |
||||||
|
* Create Date: 2019/7/1 15:44 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class CpuKit implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_sys_cpu; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package vip.devkit.debugkit.kit.system; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.system |
||||||
|
* File Name: HardwareKit.java |
||||||
|
* Create Date: 2019/7/1 15:44 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class HardwareKit implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_sys_hardware; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package vip.devkit.debugkit.kit.system; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.util.Log; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.ui.sysinfo.SysInfoKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.system |
||||||
|
* File Name: HardwareKit.java |
||||||
|
* Create Date: 2019/7/1 15:44 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class NetworkKit implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_sys_network; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
SysInfoKit sysInfoKit =new SysInfoKit(); |
||||||
|
Log.i("build netInfo:",0+sysInfoKit.getNetInfo(context).toString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package vip.devkit.debugkit.kit.system; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.util.Log; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.ui.sysinfo.SysInfoKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.system |
||||||
|
* File Name: HardwareKit.java |
||||||
|
* Create Date: 2019/7/1 15:44 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class ScreenKit implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_sys_screen; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
SysInfoKit sysInfoKit =new SysInfoKit(); |
||||||
|
Log.i("build getScreen:",0+sysInfoKit.getScreen(context).toString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package vip.devkit.debugkit.kit.system; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.util.Log; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.ui.sysinfo.SysInfoKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit |
||||||
|
* File Name: SysInfo.java |
||||||
|
* Create Date: 2019/7/1 15:30 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class SysInfo implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_sys_system; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
|
||||||
|
SysInfoKit sysInfoKit =new SysInfoKit(); |
||||||
|
Log.i("build SysInfo:",0+sysInfoKit.getInfo().toString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.ue; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.ue |
||||||
|
* File Name: ColorPicker.java |
||||||
|
* Create Date: 2019/7/2 9:09 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class ColorPicker implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_ue_color_picker; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package vip.devkit.debugkit.kit.ue; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.IKit; |
||||||
|
import vip.devkit.debugkit.util.ResUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.kit.ue |
||||||
|
* File Name: ColorPicker.java |
||||||
|
* Create Date: 2019/7/2 9:09 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class UE implements IKit { |
||||||
|
@Override |
||||||
|
public int getCategory() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getName() { |
||||||
|
return R.string.dk_ue_ue; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIcon() { |
||||||
|
return android.R.mipmap.sym_def_app_icon; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(Context context) { |
||||||
|
Toast.makeText(context, ResUtil.getString(context,getName()), Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onAppInit(Context context) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package vip.devkit.debugkit.ui; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.ui.base.BaseActivity; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.ui |
||||||
|
* File Name: AppDataCleanActivity.java |
||||||
|
* Create Date: 2019/7/9 11:41 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class AppDataCleanActivity extends BaseActivity { |
||||||
|
@Override |
||||||
|
protected void initData() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected int setLayoutId() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initView() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setListener() { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,250 @@ |
|||||||
|
package vip.devkit.debugkit.ui.FileExplorer; |
||||||
|
|
||||||
|
import android.content.ContentValues; |
||||||
|
import android.content.Context; |
||||||
|
import android.content.Intent; |
||||||
|
import android.database.Cursor; |
||||||
|
import android.net.Uri; |
||||||
|
import android.os.Build; |
||||||
|
import android.os.Bundle; |
||||||
|
import android.provider.MediaStore; |
||||||
|
import android.view.View; |
||||||
|
import android.widget.LinearLayout; |
||||||
|
import android.widget.TextView; |
||||||
|
import android.widget.Toast; |
||||||
|
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager; |
||||||
|
import androidx.recyclerview.widget.RecyclerView; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.adapter.FileFolderAdapter; |
||||||
|
import vip.devkit.debugkit.adapter.FileInfoAdapter; |
||||||
|
import vip.devkit.debugkit.bean.FileInfoBean; |
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
import vip.devkit.debugkit.ui.base.BaseActivity; |
||||||
|
import vip.devkit.debugkit.widget.recyclerview.BaseRecyclerAdapter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.ui.FileExplorer |
||||||
|
* File Name: FileExplorerActivity.java |
||||||
|
* Create Date: 2019/7/9 14:17 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class FileExplorerActivity extends BaseActivity implements View.OnClickListener, FileInfoAdapter.OnItemClickListener { |
||||||
|
private LinearLayout mLlTitleBack; |
||||||
|
private TextView mTvTitle; |
||||||
|
private TextView mTvTitleRight; |
||||||
|
private LinearLayout mLlTitleRight; |
||||||
|
private LinearLayout mLlCommonLayout; |
||||||
|
private RecyclerView mRlList; |
||||||
|
private RecyclerView mRlFileFolder; |
||||||
|
private LinearLayout mLlFolder; |
||||||
|
|
||||||
|
private File mCurDir; |
||||||
|
private FileInfoAdapter mAdapter; |
||||||
|
private List<FileInfoBean> mBeanList = new ArrayList<>(); |
||||||
|
private FileFolderAdapter mFolderAdapter; |
||||||
|
private List<FileInfoBean> mFolderList = new ArrayList<>(); |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initData() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected int setLayoutId() { |
||||||
|
return R.layout.dk_activity_file_explorer; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initView() { |
||||||
|
|
||||||
|
mLlTitleBack = (LinearLayout) findViewById(R.id.ll_title_back); |
||||||
|
mLlTitleBack.setOnClickListener(this); |
||||||
|
mTvTitle = (TextView) findViewById(R.id.tv_title); |
||||||
|
mTvTitleRight = (TextView) findViewById(R.id.tv_title_right); |
||||||
|
mLlTitleRight = (LinearLayout) findViewById(R.id.ll_title_right); |
||||||
|
mLlCommonLayout = (LinearLayout) findViewById(R.id.ll_common_layout); |
||||||
|
mRlList = (RecyclerView) findViewById(R.id.rl_list); |
||||||
|
mRlFileFolder = (RecyclerView) findViewById(R.id.rl_file_folder); |
||||||
|
mLlFolder = (LinearLayout) findViewById(R.id.ll_folder); |
||||||
|
mTvTitle.setOnClickListener(this); |
||||||
|
mTvTitleRight.setOnClickListener(this); |
||||||
|
mLlFolder.setOnClickListener(this); |
||||||
|
|
||||||
|
mFolderAdapter = new FileFolderAdapter(R.layout.dk_item_file_folder, mFolderList); |
||||||
|
LinearLayoutManager layoutManager = new LinearLayoutManager(this); |
||||||
|
layoutManager.setOrientation(RecyclerView.HORIZONTAL); |
||||||
|
mRlFileFolder.setLayoutManager(layoutManager); |
||||||
|
mRlFileFolder.setAdapter(mFolderAdapter); |
||||||
|
|
||||||
|
|
||||||
|
mBeanList.addAll(initRootFileInfos(this)); |
||||||
|
mAdapter = new FileInfoAdapter(R.layout.dk_item_file, mBeanList); |
||||||
|
mAdapter.setOnItemClickListener(this); |
||||||
|
mRlList.setLayoutManager(new LinearLayoutManager(this)); |
||||||
|
mRlList.setAdapter(mAdapter); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setListener() { |
||||||
|
|
||||||
|
mFolderAdapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener() { |
||||||
|
@Override |
||||||
|
public void onItemClick(BaseRecyclerAdapter adapter, View view, int position) { |
||||||
|
FileInfoBean fileInfoBean = mFolderAdapter.getItem(position); |
||||||
|
if (fileInfoBean.file == mCurDir) { |
||||||
|
LogCat.i("当前文件夹"); |
||||||
|
return; |
||||||
|
} |
||||||
|
setAdapterData(getFileInfos(fileInfoBean.file)); |
||||||
|
for (int i = 0; i < mFolderList.size(); i++) { |
||||||
|
LogCat.i("当前文件夹" + i); |
||||||
|
if (i > position) { |
||||||
|
mFolderList.remove(i); |
||||||
|
} |
||||||
|
} |
||||||
|
mFolderAdapter.notifyDataSetChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void onItemClick(BaseRecyclerAdapter adapter, View view, int position) { |
||||||
|
FileInfoBean fileInfoBean = mAdapter.getItem(position); |
||||||
|
if (fileInfoBean.file.isFile()) { |
||||||
|
openFile(this,fileInfoBean.file); |
||||||
|
} else { |
||||||
|
mCurDir = fileInfoBean.file; |
||||||
|
setAdapterData(getFileInfos(fileInfoBean.file)); |
||||||
|
mFolderList.add(fileInfoBean); |
||||||
|
mFolderAdapter.notifyDataSetChanged(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void setAdapterData(List<FileInfoBean> fileInfos) { |
||||||
|
mBeanList.clear(); |
||||||
|
if (!fileInfos.isEmpty()) { |
||||||
|
mBeanList.addAll(fileInfos); |
||||||
|
} |
||||||
|
mAdapter.notifyDataSetChanged(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClick(View v) { |
||||||
|
if (v.getId() == R.id.ll_title_back) { |
||||||
|
finish(); |
||||||
|
} else if (v.getId() == R.id.ll_folder) { |
||||||
|
mFolderList.clear(); |
||||||
|
mFolderAdapter.notifyDataSetChanged(); |
||||||
|
mBeanList.clear(); |
||||||
|
mBeanList.addAll(initRootFileInfos(this)); |
||||||
|
mAdapter.notifyDataSetChanged(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 调用系统应用打开图片 |
||||||
|
* |
||||||
|
* @param context context |
||||||
|
* @param file file |
||||||
|
*/ |
||||||
|
public static void openFile(Context context, File file) { |
||||||
|
Intent intent = new Intent(); |
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
||||||
|
intent.setAction(Intent.ACTION_VIEW); |
||||||
|
Uri uri = null; |
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { |
||||||
|
// 方式一
|
||||||
|
uri = getImageContentUri(context, file); |
||||||
|
// 方式二
|
||||||
|
// uri = FileProvider.getUriForFile(context, ".fileProvider", file);
|
||||||
|
// intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
|
} else { |
||||||
|
uri = Uri.fromFile(file); |
||||||
|
} |
||||||
|
|
||||||
|
String type = null; |
||||||
|
intent.setDataAndType(uri, type); |
||||||
|
try { |
||||||
|
context.startActivity(intent); |
||||||
|
} catch (Exception e) { |
||||||
|
LogCat.e("FileUtil"+ e.getMessage()); |
||||||
|
Toast.makeText(context, "找不到打开此文件的应用!", Toast.LENGTH_SHORT).show(); |
||||||
|
} |
||||||
|
} |
||||||
|
/** |
||||||
|
* 转换 content:// uri
|
||||||
|
* |
||||||
|
* @param imageFile imageFile |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Uri getImageContentUri(Context context, File imageFile) { |
||||||
|
String filePath = imageFile.getAbsolutePath(); |
||||||
|
Cursor cursor = context.getContentResolver().query( |
||||||
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, |
||||||
|
new String[] { MediaStore.Images.Media._ID }, |
||||||
|
MediaStore.Images.Media.DATA + "=? ", |
||||||
|
new String[] { filePath }, null); |
||||||
|
|
||||||
|
if (cursor != null && cursor.moveToFirst()) { |
||||||
|
int id = cursor.getInt(cursor |
||||||
|
.getColumnIndex(MediaStore.MediaColumns._ID)); |
||||||
|
Uri baseUri = Uri.parse("content://media/external/images/media"); |
||||||
|
return Uri.withAppendedPath(baseUri, "" + id); |
||||||
|
} else { |
||||||
|
if (imageFile.exists()) { |
||||||
|
ContentValues values = new ContentValues(); |
||||||
|
values.put(MediaStore.Images.Media.DATA, filePath); |
||||||
|
return context.getContentResolver().insert( |
||||||
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); |
||||||
|
} else { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private List<FileInfoBean> getFileInfos(File dir) { |
||||||
|
List<FileInfoBean> fileInfos = new ArrayList<>(); |
||||||
|
if (dir.listFiles() == null) { |
||||||
|
return fileInfos; |
||||||
|
} |
||||||
|
for (File file : dir.listFiles()) { |
||||||
|
FileInfoBean fileInfo = new FileInfoBean(file); |
||||||
|
fileInfos.add(fileInfo); |
||||||
|
} |
||||||
|
return fileInfos; |
||||||
|
} |
||||||
|
|
||||||
|
private List<FileInfoBean> initRootFileInfos(Context context) { |
||||||
|
List<FileInfoBean> fileInfos = new ArrayList<>(); |
||||||
|
fileInfos.add(new FileInfoBean(context.getFilesDir().getParentFile())); |
||||||
|
fileInfos.add(new FileInfoBean(context.getExternalCacheDir())); |
||||||
|
fileInfos.add(new FileInfoBean(context.getExternalFilesDir(null))); |
||||||
|
return fileInfos; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isRootFile(Context context, File file) { |
||||||
|
if (file == null) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return file.equals(context.getExternalCacheDir()) |
||||||
|
|| file.equals(context.getExternalFilesDir(null)) |
||||||
|
|| file.equals(context.getFilesDir().getParentFile()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,95 @@ |
|||||||
|
package vip.devkit.debugkit.ui; |
||||||
|
|
||||||
|
import android.content.pm.IPackageStatsObserver; |
||||||
|
import android.content.pm.PackageStats; |
||||||
|
import android.os.RemoteException; |
||||||
|
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager; |
||||||
|
import androidx.recyclerview.widget.RecyclerView; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import vip.devkit.debugkit.DataSource; |
||||||
|
import vip.devkit.debugkit.KitManagerAdapter; |
||||||
|
import vip.devkit.debugkit.R; |
||||||
|
import vip.devkit.debugkit.kit.GroupKitItem; |
||||||
|
import vip.devkit.debugkit.kit.KitItem; |
||||||
|
import vip.devkit.debugkit.kit.log.LogCat; |
||||||
|
import vip.devkit.debugkit.ui.base.BaseActivity; |
||||||
|
import vip.devkit.debugkit.ui.base_url.BaseUrlManager; |
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.ui |
||||||
|
* File Name: KitManagerActivity.java |
||||||
|
* Create Date: 2019/7/1 10:43 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public class KitManagerActivity extends BaseActivity { |
||||||
|
|
||||||
|
|
||||||
|
private RecyclerView mRvList; |
||||||
|
private KitManagerAdapter mManagerAdapter; |
||||||
|
|
||||||
|
List<GroupKitItem> mItemList = new ArrayList<>(); |
||||||
|
List<KitItem> mKitItems = new ArrayList<>(); |
||||||
|
|
||||||
|
private BaseUrlManager mBaseUrlManager; |
||||||
|
@Override |
||||||
|
protected void initData() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected int setLayoutId() { |
||||||
|
return R.layout.act_kit_manager; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initView() { |
||||||
|
mRvList = (RecyclerView) findViewById(R.id.rv_list); |
||||||
|
mRvList.setLayoutManager(new LinearLayoutManager(this)); |
||||||
|
mManagerAdapter = new KitManagerAdapter(R.layout.dk_item_group_kit, mItemList); |
||||||
|
mRvList.setAdapter(mManagerAdapter); |
||||||
|
|
||||||
|
DataSource dataSource = new DataSource(this); |
||||||
|
|
||||||
|
mItemList.addAll(dataSource.getKitList()); |
||||||
|
mManagerAdapter.notifyDataSetChanged(); |
||||||
|
|
||||||
|
mBaseUrlManager = new BaseUrlManager(this); |
||||||
|
|
||||||
|
LogCat.i("mBaseUrlManager:"+mBaseUrlManager.getBaseUrl()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onResume() { |
||||||
|
super.onResume(); |
||||||
|
mBaseUrlManager.refreshData(); |
||||||
|
LogCat.i("mBaseUrlManager:"+mBaseUrlManager.getBaseUrl()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setListener() { |
||||||
|
|
||||||
|
} |
||||||
|
//aidl文件形成的Bindler机制服务类
|
||||||
|
public class PkgSizeObserver extends IPackageStatsObserver.Stub{ |
||||||
|
/*** 回调函数, |
||||||
|
* @param pStats ,返回数据封装在PackageStats对象中 |
||||||
|
* @param succeeded 代表回调成功 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) |
||||||
|
throws RemoteException { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,222 @@ |
|||||||
|
package vip.devkit.debugkit.ui.base; |
||||||
|
|
||||||
|
import android.app.Activity; |
||||||
|
import android.app.Dialog; |
||||||
|
import android.content.Context; |
||||||
|
import android.content.Intent; |
||||||
|
import android.content.IntentFilter; |
||||||
|
import android.content.pm.ActivityInfo; |
||||||
|
import android.content.res.Configuration; |
||||||
|
import android.content.res.Resources; |
||||||
|
import android.net.ConnectivityManager; |
||||||
|
import android.os.Bundle; |
||||||
|
import android.provider.Settings; |
||||||
|
import android.text.TextUtils; |
||||||
|
import android.view.View; |
||||||
|
import android.view.ViewGroup; |
||||||
|
import android.view.Window; |
||||||
|
import android.view.WindowManager; |
||||||
|
import android.view.inputmethod.InputMethodManager; |
||||||
|
import android.widget.FrameLayout; |
||||||
|
|
||||||
|
import androidx.annotation.Nullable; |
||||||
|
import androidx.appcompat.app.AppCompatActivity; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Package Name: vip.devkit.debugkit.ui.base |
||||||
|
* File Name: BaseActivity.java |
||||||
|
* Create Date: 2019/7/1 10:44 |
||||||
|
* Author : K |
||||||
|
* E-mail : vip@devkit.vip |
||||||
|
* VersionCode : V 1.0 |
||||||
|
* Describe : |
||||||
|
* Code Update :(author - time) |
||||||
|
* Update Describe: |
||||||
|
*/ |
||||||
|
public abstract class BaseActivity extends AppCompatActivity { |
||||||
|
|
||||||
|
private long lastBackKeyDownTick = 0; |
||||||
|
public static final long MAX_DOUBLE_BACK_DURATION = 1500; |
||||||
|
protected Context mContext; |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState) { |
||||||
|
super.onCreate(savedInstanceState); |
||||||
|
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); |
||||||
|
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏应用的标题栏
|
||||||
|
setContentView(setLayoutId()); |
||||||
|
mContext = this; |
||||||
|
initBase(); |
||||||
|
initData(); |
||||||
|
initView(); |
||||||
|
setListener(); |
||||||
|
} |
||||||
|
|
||||||
|
protected boolean isOrientation() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private void initBase() { |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected abstract void initData(); |
||||||
|
|
||||||
|
protected abstract int setLayoutId(); |
||||||
|
|
||||||
|
protected abstract void initView(); |
||||||
|
|
||||||
|
protected abstract void setListener(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @return RootView FrameLayout |
||||||
|
*/ |
||||||
|
protected FrameLayout getRootView() { |
||||||
|
View re = this.findViewById(android.R.id.content); |
||||||
|
if (re != null && re instanceof FrameLayout) { |
||||||
|
return (FrameLayout) re; |
||||||
|
} |
||||||
|
ViewGroup viewGroup = (ViewGroup) this.getWindow().getDecorView(); |
||||||
|
re = viewGroup.getChildAt(viewGroup.getChildCount() - 1); |
||||||
|
if (re != null && re instanceof FrameLayout) { |
||||||
|
return (FrameLayout) re; |
||||||
|
} else { |
||||||
|
re = new FrameLayout(this); |
||||||
|
this.getActionBar().getHeight(); |
||||||
|
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT |
||||||
|
, ViewGroup.LayoutParams.MATCH_PARENT); |
||||||
|
viewGroup.addView(re, lp); |
||||||
|
return (FrameLayout) re; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected <T extends View> T getView(int id) { |
||||||
|
return (T) super.findViewById(id); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* startActivity |
||||||
|
* |
||||||
|
* @param clazz |
||||||
|
*/ |
||||||
|
protected void startActivity(Class<?> clazz) { |
||||||
|
Intent intent = new Intent(this, clazz); |
||||||
|
startActivity(intent); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* startActivity putExtras(Bundle) |
||||||
|
* |
||||||
|
* @param clazz |
||||||
|
* @param extras |
||||||
|
*/ |
||||||
|
protected void startActivity(Class<?> clazz, Bundle extras) { |
||||||
|
Intent intent = new Intent(this, clazz); |
||||||
|
intent.putExtras(extras); |
||||||
|
startActivity(intent); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* startActivity putExtras(Bundle) |
||||||
|
* |
||||||
|
* @param clazz |
||||||
|
* @param requestCode |
||||||
|
* @param extras |
||||||
|
*/ |
||||||
|
protected void startActivity(Class<?> clazz, int requestCode, Bundle extras) { |
||||||
|
Intent intent = new Intent(this, clazz); |
||||||
|
intent.putExtras(extras); |
||||||
|
startActivityForResult(intent, requestCode); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* startActivity putExtras(Bundle) |
||||||
|
* |
||||||
|
* @param clazz |
||||||
|
* @param code |
||||||
|
*/ |
||||||
|
protected void startActivity(Class<?> clazz, int code) { |
||||||
|
Intent intent = new Intent(this, clazz); |
||||||
|
startActivityForResult(intent, code); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 重启当前Activity |
||||||
|
*/ |
||||||
|
private void reStartActivity() { |
||||||
|
Intent intent = getIntent(); |
||||||
|
finish(); |
||||||
|
startActivity(intent); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化是否全屏 |
||||||
|
*/ |
||||||
|
protected void initFlagFullscreen() { |
||||||
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, |
||||||
|
WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @return 设置android app 的字体大小不受系统字体大小改变的影响 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public Resources getResources() { |
||||||
|
Resources res = super.getResources(); |
||||||
|
Configuration config = new Configuration(); |
||||||
|
config.setToDefaults(); |
||||||
|
res.updateConfiguration(config, res.getDisplayMetrics()); |
||||||
|
return res; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void onBackPressed() { |
||||||
|
super.onBackPressed(); |
||||||
|
long currentTick = System.currentTimeMillis(); |
||||||
|
if (currentTick - lastBackKeyDownTick > MAX_DOUBLE_BACK_DURATION) { |
||||||
|
lastBackKeyDownTick = currentTick; |
||||||
|
} else { |
||||||
|
finish(); |
||||||
|
System.exit(0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onResume() { |
||||||
|
super.onResume(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onPause() { |
||||||
|
super.onPause(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onDestroy() { |
||||||
|
super.onDestroy(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void finish() { |
||||||
|
hideSoftInput(); |
||||||
|
super.finish(); |
||||||
|
} |
||||||
|
|
||||||
|
private void hideSoftInput() { |
||||||
|
View view = getCurrentFocus(); |
||||||
|
if (view == null) view = new View(this); |
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); |
||||||
|
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); |
||||||
|
} |
||||||
|
|
||||||
|
} |