+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/.idea/vcs.xml b/AndroidOCRTool/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/AndroidOCRTool/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/LICENSE b/AndroidOCRTool/LICENSE
new file mode 100644
index 0000000..44cc482
--- /dev/null
+++ b/AndroidOCRTool/LICENSE
@@ -0,0 +1,191 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "{}" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+ Copyright 2018 xuexiangjys
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
\ No newline at end of file
diff --git a/AndroidOCRTool/README.md b/AndroidOCRTool/README.md
new file mode 100644
index 0000000..0335630
--- /dev/null
+++ b/AndroidOCRTool/README.md
@@ -0,0 +1,116 @@
+# TemplateAppProject
+
+Android空壳模板工程,快速搭建(集成了XUI、XUtil、XAOP、XPage、XUpdate、XHttp2、友盟统计和walle多渠道打包)
+
+**【注意】** 本模板适用于Android Studio 4.0及以上版本,如果你的Android Studio低于 4.0版本,可使用[butterknife](https://github.com/xuexiangjys/TemplateAppProject/tree/butterknife)分支。
+
+**【Kotlin版本】** 如果你想使用Kotlin语言,那么请移步[TemplateAppProject-kotlin](https://github.com/xuexiangjys/TemplateAppProject-kotlin)
+
+## 关于我
+
+| 公众号 | 掘金 | 知乎 | CSDN | 简书 | 思否 | 哔哩哔哩 | 今日头条
+|---------|---------|--------- |---------|---------|---------|---------|---------|
+| [我的Android开源之旅](https://t.1yb.co/Irse) | [点我](https://juejin.im/user/598feef55188257d592e56ed/posts) | [点我](https://www.zhihu.com/people/xuexiangjys/posts) | [点我](https://xuexiangjys.blog.csdn.net/) | [点我](https://www.jianshu.com/u/6bf605575337) | [点我](https://segmentfault.com/u/xuexiangjys) | [点我](https://space.bilibili.com/483850585) | [点我](https://img.rruu.net/image/5ff34ff7b02dd)
+
+## 效果
+
+
+
+## Star趋势图
+
+[](https://starchart.cc/xuexiangjys/TemplateAppProject)
+
+## 集成介绍(请star支持)
+
+> 本项目是项目androidx项目。精选了X系列最实用的几个库,可大大提高开发的效率。
+
+* [XUI 一个简洁而优雅的Android原生UI框架,解放你的双手!](https://github.com/xuexiangjys/XUI)
+
+* [XUtil 一个方便实用的Android工具类库!](https://github.com/xuexiangjys/XUtil)
+
+* [XAOP 一个轻量级的AOP(Android)应用框架。囊括了最实用的AOP应用。](https://github.com/xuexiangjys/XAOP)
+
+* [XPage 一个非常方便的fragment页面框架。](https://github.com/xuexiangjys/XPage)
+
+* [XUpdate 一个轻量级、高可用性的Android版本更新框架。](https://github.com/xuexiangjys/XUpdate)
+
+* [XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp组合进行封装。](https://github.com/xuexiangjys/XHttp2)
+
+除此之外,还集成了其他优秀的第三方库:
+
+* [AndroidAutoSize 优秀的屏幕适配方案](https://github.com/JessYanCoding/AndroidAutoSize)
+
+* [ViewBinding Google推荐的视图绑定工具](https://developer.android.google.cn/topic/libraries/view-binding)
+
+* [vlayout 阿里巴巴开源淘宝多布局组件](https://github.com/alibaba/vlayout)
+
+* [MMKV 腾讯开源键值对存储](https://github.com/Tencent/MMKV)
+
+* [leakcanary 内存泄漏检测](https://github.com/square/leakcanary)
+
+## 更多资源
+
+* [简化版Android空壳模板工程](https://github.com/xuexiangjys/TemplateSimpleProject)
+
+* [X-Library系列Android应用框架详解](https://github.com/xuexiangjys/AndroidAdvancedLearning/blob/master/framework/X-Library系列Android应用框架详解.md)
+
+* [Flutter空壳模板工程](https://github.com/xuexiangjys/flutter_template)
+
+## 使用方式
+
+[视频教程-如何使用模板工程](https://www.bilibili.com/video/av92348545)
+
+1.克隆项目
+
+```
+git clone https://github.com/xuexiangjys/TemplateAppProject.git
+```
+
+2.修改项目名(文件夹名),并删除目录下的.git文件夹(隐藏文件)
+
+3.使用AS打开项目,然后修改`包名`、`applicationId`和`app_name`
+
+* 修改包名
+
+
+
+
+
+* 修改applicationId
+
+
+
+* 修改app_name
+
+
+
+## 项目打包
+
+1.修改工程根目录的`gradle.properties`中的`isNeedPackage=true`。
+
+2.添加并配置keystore,在`versions.gradle`中修改`app_release`相关参数。
+
+3.如果考虑使用友盟统计的话,在`local.properties`中设置应用的友盟ID:`APP_ID_UMENG`。
+
+4.使用`./gradlew clean assembleReleaseChannels`进行多渠道打包。
+
+## 如果觉得项目还不错,可以考虑打赏一波
+
+> 你的打赏是我维护的动力,我将会列出所有打赏人员的清单在下方作为凭证,打赏前请留下打赏项目的备注!
+
+
+
+感谢下面小伙伴的打赏:
+
+姓名 | 金额 | 方式
+:-|:-|:-
+myie9 | 100¥ | 微信
+*鸥 | 10.24¥ | 微信
+**家 | 10.24¥ | 支付宝
+*寻 | 20.48¥ | 微信
+
+## 联系方式
+
+> 更多资讯内容,欢迎扫描关注我的个人微信公众号:【我的Android开源之旅】
+
+
diff --git a/AndroidOCRTool/app/.DS_Store b/AndroidOCRTool/app/.DS_Store
new file mode 100644
index 0000000..4cf063c
Binary files /dev/null and b/AndroidOCRTool/app/.DS_Store differ
diff --git a/AndroidOCRTool/app/.gitignore b/AndroidOCRTool/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/AndroidOCRTool/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/AndroidOCRTool/app/build.gradle b/AndroidOCRTool/app/build.gradle
new file mode 100644
index 0000000..41c596a
--- /dev/null
+++ b/AndroidOCRTool/app/build.gradle
@@ -0,0 +1,109 @@
+apply plugin: 'com.android.application'
+apply plugin: 'img-optimizer'
+//打包时,记得设置true启用
+if (isNeedPackage.toBoolean() && isUseBooster.toBoolean()) {
+ apply plugin: 'com.didiglobal.booster'
+}
+
+android {
+ compileSdkVersion build_versions.target_sdk
+ buildToolsVersion build_versions.build_tools
+
+ defaultConfig {
+ applicationId "com.xuexiang.templateproject"
+ minSdkVersion 17
+ targetSdkVersion build_versions.target_sdk
+ versionCode 1
+ versionName "1.0.0"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+
+ multiDexEnabled true
+ vectorDrawables.useSupportLibrary = true
+
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [ moduleName : project.getName() ]
+ }
+ }
+ }
+
+ signingConfigs {
+ if (isNeedPackage.toBoolean()) {
+ release {
+ storeFile file(app_release.storeFile)
+ storePassword app_release.storePassword
+ keyAlias app_release.keyAlias
+ keyPassword app_release.keyPassword
+ }
+ }
+
+ debug {
+ storeFile file("./debug.jks")
+ storePassword "123456"
+ keyAlias "debug"
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled true
+ shrinkResources true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ if (isNeedPackage.toBoolean()) {
+ signingConfig signingConfigs.release
+
+ Properties properties = new Properties()
+ properties.load(project.rootProject.file('local.properties').newDataInputStream())
+ def appID = properties.getProperty("APP_ID_UMENG")
+ if (appID != null) {
+ buildConfigField "String", "APP_ID_UMENG", appID
+ } else {
+ buildConfigField "String", "APP_ID_UMENG", '""'
+ }
+ } else {
+ signingConfig signingConfigs.debug
+ buildConfigField "String", "APP_ID_UMENG", '""'
+ }
+ }
+
+ debug {
+ debuggable true
+ minifyEnabled false
+
+ signingConfig signingConfigs.debug
+ buildConfigField "String", "APP_ID_UMENG", '""'
+ }
+ }
+
+ lintOptions {
+ abortOnError false
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ buildFeatures {
+ viewBinding true
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ testImplementation deps.junit
+ androidTestImplementation deps.runner
+ androidTestImplementation deps.espresso.core
+ implementation 'com.github.chrisbanes:PhotoView:2.3.0'
+ implementation 'com.github.HuanTanSheng:EasyPhotos:3.1.5'
+ implementation 'com.github.bumptech.glide:glide:4.11.0'
+
+ implementation 'com.github.bumptech.glide:glide:4.12.0'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
+}
+//自动添加X-Library依赖
+apply from: 'x-library.gradle'
+//walle多渠道打包
+apply from: 'multiple-channel.gradle'
+
+
diff --git a/AndroidOCRTool/app/channel b/AndroidOCRTool/app/channel
new file mode 100644
index 0000000..10c8afd
--- /dev/null
+++ b/AndroidOCRTool/app/channel
@@ -0,0 +1,25 @@
+# 美团
+meituan
+# 三星
+samsungapps
+# 小米
+xiaomi
+# 91助手
+91com
+# 魅族
+meizu
+# 豌豆荚
+wandou
+# Google Play
+googleplay
+# 百度
+baidu
+# 360
+360cn
+# 应用宝
+myapp
+# 华为
+huawei
+# 蒲公英
+pgyer
+github
\ No newline at end of file
diff --git a/AndroidOCRTool/app/debug.jks b/AndroidOCRTool/app/debug.jks
new file mode 100644
index 0000000..d49fb2b
Binary files /dev/null and b/AndroidOCRTool/app/debug.jks differ
diff --git a/AndroidOCRTool/app/multiple-channel.gradle b/AndroidOCRTool/app/multiple-channel.gradle
new file mode 100644
index 0000000..5dc6dbf
--- /dev/null
+++ b/AndroidOCRTool/app/multiple-channel.gradle
@@ -0,0 +1,10 @@
+apply plugin: 'walle'
+
+walle {
+ // 指定渠道包的输出路径
+ apkOutputFolder = new File("${project.buildDir}/outputs/channels")
+ // 定制渠道包的APK的文件名称
+ apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk'
+ // 渠道配置文件
+ channelFile = new File("${project.getProjectDir()}/channel")
+}
\ No newline at end of file
diff --git a/AndroidOCRTool/app/proguard-rules.pro b/AndroidOCRTool/app/proguard-rules.pro
new file mode 100644
index 0000000..2b565e2
--- /dev/null
+++ b/AndroidOCRTool/app/proguard-rules.pro
@@ -0,0 +1,269 @@
+#=========================================基础不变的混淆配置=========================================##
+#指定代码的压缩级别
+-optimizationpasses 5
+#包名不混合大小写
+-dontusemixedcaseclassnames
+#不去忽略非公共的库类
+-dontskipnonpubliclibraryclasses
+# 指定不去忽略非公共的库的类的成员
+-dontskipnonpubliclibraryclassmembers
+#优化 不优化输入的类文件
+-dontoptimize
+#预校验
+-dontpreverify
+#混淆时是否记录日志
+-verbose
+# 混淆时所采用的算法
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+#保护注解
+-keepattributes *Annotation*
+#忽略警告
+-ignorewarnings
+
+##记录生成的日志数据,gradle build时在本项目根目录输出##
+#apk 包内所有 class 的内部结构
+-dump class_files.txt
+#未混淆的类和成员
+-printseeds seeds.txt
+#列出从 apk 中删除的代码
+-printusage unused.txt
+#混淆前后的映射
+-printmapping mapping.txt
+# 并保留源文件名为"Proguard"字符串,而非原始的类名 并保留行号
+-keepattributes SourceFile,LineNumberTable
+########记录生成的日志数据,gradle build时 在本项目根目录输出-end#####
+
+#需要保留的东西
+# 保持哪些类不被混淆
+-keep public class * extends android.app.Fragment
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.support.v4.**
+-keep public class com.android.vending.licensing.ILicensingService
+
+#如果有引用v4包可以添加下面这行
+-keep public class * extends android.support.v4.app.Fragment
+
+##########JS接口类不混淆,否则执行不了
+-dontwarn com.android.JsInterface.**
+-keep class com.android.JsInterface.** {*; }
+
+#极光推送和百度lbs android sdk一起使用proguard 混淆的问题#http的类被混淆后,导致apk定位失败,保持apache 的http类不被混淆就好了
+-dontwarn org.apache.**
+-keep class org.apache.**{ *; }
+
+-keep public class * extends android.view.View {
+ public (android.content.Context);
+ public (android.content.Context, android.util.AttributeSet);
+ public (android.content.Context, android.util.AttributeSet, int);
+ public void set*(...);
+ }
+
+#保持 native 方法不被混淆
+-keepclasseswithmembernames class * {
+ native ;
+}
+
+#保持自定义控件类不被混淆
+-keepclasseswithmembers class * {
+ public (android.content.Context, android.util.AttributeSet);
+}
+
+#保持自定义控件类不被混淆
+-keepclassmembers class * extends android.app.Activity {
+ public void *(android.view.View);
+}
+
+#保持 Parcelable 不被混淆
+-keep class * implements android.os.Parcelable {
+ public static final android.os.Parcelable$Creator *;
+}
+
+#保持 Serializable 不被混淆
+-keepnames class * implements java.io.Serializable
+
+#保持 Serializable 不被混淆并且enum 类也不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
+ !static !transient ;
+ !private ;
+ !private ;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keepclassmembers class * {
+ public void *ButtonClicked(android.view.View);
+}
+
+#不混淆资源类
+-keep class **.R$* {*;}
+
+#===================================混淆保护自己项目的部分代码以及引用的第三方jar包library=============================#######
+#如果引用了v4或者v7包
+-dontwarn android.support.**
+
+
+# AndroidX 防止混淆
+-dontwarn com.google.android.material.**
+-dontnote com.google.android.material.**
+-dontwarn androidx.**
+-keep class com.google.android.material.** {*;}
+-keep class androidx.** {*;}
+-keep public class * extends androidx.**
+-keep interface androidx.** {*;}
+-keepclassmembers class * {
+ @androidx.annotation.Keep *;
+}
+
+# zxing
+-dontwarn com.google.zxing.**
+-keep class com.google.zxing.**{*;}
+
+#SignalR推送
+-keep class microsoft.aspnet.signalr.** { *; }
+
+# 极光推送混淆
+-dontoptimize
+-dontpreverify
+-dontwarn cn.jpush.**
+-keep class cn.jpush.** { *; }
+-dontwarn cn.jiguang.**
+-keep class cn.jiguang.** { *; }
+
+# 数据库框架OrmLite
+-keepattributes *DatabaseField*
+-keepattributes *DatabaseTable*
+-keepattributes *SerializedName*
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+
+#XHttp2
+-keep class com.xuexiang.xhttp2.model.** { *; }
+-keep class com.xuexiang.xhttp2.cache.model.** { *; }
+-keep class com.xuexiang.xhttp2.cache.stategy.**{*;}
+-keep class com.xuexiang.xhttp2.annotation.** { *; }
+
+#okhttp
+-dontwarn com.squareup.okhttp3.**
+-keep class com.squareup.okhttp3.** { *;}
+-dontwarn okio.**
+-dontwarn javax.annotation.Nullable
+-dontwarn javax.annotation.ParametersAreNonnullByDefault
+-dontwarn javax.annotation.**
+
+#如果用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错
+-keepattributes Signature
+-keep class com.google.gson.stream.** { *; }
+-keepattributes EnclosingMethod
+-keep class org.xz_sale.entity.**{*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.**{*;}
+-keep class sun.misc.Unsafe { *; }
+-keep class com.google.gson.stream.** { *; }
+-keep class com.google.gson.examples.android.model.** { *; }
+
+# Glide
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public class * extends com.bumptech.glide.module.AppGlideModule
+-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
+ **[] $VALUES;
+ public *;
+}
+
+# Retrofit
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepattributes Exceptions
+
+# RxJava RxAndroid
+-dontwarn sun.misc.**
+-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
+ long producerIndex;
+ long consumerIndex;
+}
+-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
+ rx.internal.util.atomic.LinkedQueueNode producerNode;
+}
+-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
+ rx.internal.util.atomic.LinkedQueueNode consumerNode;
+}
+
+-dontwarn okio.**
+-dontwarn javax.annotation.Nullable
+-dontwarn javax.annotation.ParametersAreNonnullByDefault
+-dontwarn javax.annotation.**
+
+# fastjson
+-dontwarn com.alibaba.fastjson.**
+-keep class com.alibaba.fastjson.** { *; }
+-keepattributes Signature
+
+# xpage
+-keep class com.xuexiang.xpage.annotation.** { *; }
+-keep class com.xuexiang.xpage.config.** { *; }
+
+# xaop
+-keep @com.xuexiang.xaop.annotation.* class * {*;}
+-keep @org.aspectj.lang.annotation.* class * {*;}
+-keep class * {
+ @com.xuexiang.xaop.annotation.* ;
+ @org.aspectj.lang.annotation.* ;
+}
+-keepclassmembers class * {
+ @com.xuexiang.xaop.annotation.* ;
+ @org.aspectj.lang.annotation.* ;
+}
+
+# xrouter
+-keep public class com.xuexiang.xrouter.routes.**{*;}
+-keep class * implements com.xuexiang.xrouter.facade.template.ISyringe{*;}
+# 如果使用了 byType 的方式获取 Service,需添加下面规则,保护接口
+-keep interface * implements com.xuexiang.xrouter.facade.template.IProvider
+# 如果使用了 单类注入,即不定义接口实现 IProvider,需添加下面规则,保护实现
+-keep class * implements com.xuexiang.xrouter.facade.template.IProvider
+
+# xupdate
+-keep class com.xuexiang.xupdate.entity.** { *; }
+
+# xvideo
+-keep class com.xuexiang.xvideo.jniinterface.** { *; }
+
+# xipc
+-keep @com.xuexiang.xipc.annotation.* class * {*;}
+-keep class * {
+ @com.xuexiang.xipc.annotation.* ;
+}
+-keepclassmembers class * {
+ @com.xuexiang.xipc.annotation.* ;
+}
+
+# umeng统计
+-keep class com.umeng.** {*;}
+-keepclassmembers class * {
+ public (org.json.JSONObject);
+}
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keep class com.xuexiang.xui.widget.edittext.materialedittext.** { *; }
diff --git a/AndroidOCRTool/app/src/.DS_Store b/AndroidOCRTool/app/src/.DS_Store
new file mode 100644
index 0000000..abbd72e
Binary files /dev/null and b/AndroidOCRTool/app/src/.DS_Store differ
diff --git a/AndroidOCRTool/app/src/androidTest/java/com/xuexiang/templateproject/ExampleInstrumentedTest.java b/AndroidOCRTool/app/src/androidTest/java/com/xuexiang/templateproject/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..c597e61
--- /dev/null
+++ b/AndroidOCRTool/app/src/androidTest/java/com/xuexiang/templateproject/ExampleInstrumentedTest.java
@@ -0,0 +1,27 @@
+package com.xuexiang.templateproject;
+
+import android.content.Context;
+
+import androidx.test.platform.app.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 Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+
+ assertEquals("com.xuexiang.templateproject", appContext.getPackageName());
+ }
+}
diff --git a/AndroidOCRTool/app/src/main/.DS_Store b/AndroidOCRTool/app/src/main/.DS_Store
new file mode 100644
index 0000000..bcb8689
Binary files /dev/null and b/AndroidOCRTool/app/src/main/.DS_Store differ
diff --git a/AndroidOCRTool/app/src/main/AndroidManifest.xml b/AndroidOCRTool/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..23b93c4
--- /dev/null
+++ b/AndroidOCRTool/app/src/main/AndroidManifest.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/app/src/main/assets/.DS_Store b/AndroidOCRTool/app/src/main/assets/.DS_Store
new file mode 100644
index 0000000..3d493e5
Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/.DS_Store differ
diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.DS_Store b/AndroidOCRTool/app/src/main/assets/OCRPython/.DS_Store
new file mode 100644
index 0000000..0bed67d
Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/.DS_Store differ
diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/OCRPython.iml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/OCRPython.iml
new file mode 100644
index 0000000..82ae1e8
--- /dev/null
+++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/OCRPython.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/inspectionProfiles/profiles_settings.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/misc.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/misc.xml
new file mode 100644
index 0000000..d1b825e
--- /dev/null
+++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/modules.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/modules.xml
new file mode 100644
index 0000000..ccb86f8
--- /dev/null
+++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/vcs.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/workspace.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/workspace.xml
new file mode 100644
index 0000000..07df508
--- /dev/null
+++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/workspace.xml
@@ -0,0 +1,128 @@
+
+
+
+