靠着打代码,我总算走上了人生巅峰,看着支付宝里好像永久花不完的余额,我不由初步苍莽。后边的路在何方?
一阵模糊,我从工位上醒了过来,夏天炎炎,办公室的风扇吹不走空气算法导论中的炎热。
妈呀果然是梦~~appreciate
一.布景
最近团队做一个供给 ocr 辨认才华的 sdk 项目。身为一个普通码农,当然是领android手机导说干啥就干啥,所以和算法对接android平板电脑价格吭哧吭哧算法的时刻复杂度是指什么打完了 身份证辨认,手机号辨认等卡证辨认功算法剖析的意图是用。快乐,交付给了客户!!
不久领appreciate导又说搞个指尖辨认的sdk供给给用户做指尖搜题用,和原本的项目放一块,搞个共同的才华sdk。可是输出sdk的时分要求除去掉指尖辨认之外的无关代appstore码。为了赶发展挥洒之间,我又写完了,在打包的时分算法的时刻复杂度是指什么,直接拉了个新的输出分支除去旧代码。就这样算法的时刻复杂度取决于输出了。
后边android下载安装又要一个新的sdk才华,图画质检 sdk 。
费事的问题就跳出来了算法的时刻复杂度取决于:
-
输出sdk的源码年代时分需求每次拉新分支除去,并每次更新的时分吞并
-
每个sdk才华都需求独立,又可以吞并算法导论
怎样办呢~~
二.考虑
这个问题说是问题也不是问题,无非是有点繁琐,保护好apple几个不同才华源码买卖网站源码的独立分支就appstore完事了算法的五个特性。gradle怎样读
可是我懒呀~~
聪明的我就想到了两个方法。
- 每个才华分出独立的模块,编译的时分打对应才华模块就好啦
- 运用gradle 装备编译不同的源文件,根据装备来打出包含不同源码的sdappearancek
终究当然是挑选了运用gradle sourceSets **装备的方法来编译不同的sdk源码啦。**为什么不选分模块呢?由于对外供给的是aar包,而不是maven仓库地址。所以存在多个才华多个aar包的状况,尽量android是什么手机牌子供给少的aar包吧,方便用户方便自己。
三.开干
-
先剥离不同sdk的源代码,放在不同的文件夹下面。通用代码放在默许的java文件夹源码分享网中。
这是一个细活,避免相互依托appearance,尽量依托倒置,解开耦合,让每个sdk才华都能独立编译,并且能一同编译。
-
在 gradle.properties 中新增sdkType装备
#算法的有穷性是指# 手机号,身份证银行卡等
#sdgradle教程kType=ocr
## 图画质检
#sdkType=graphcheck
## 指尖检测
#sdkType=fingerdetect
## 依源码资本靠全部代码
sdkType=all
-
在 build.grad算法规划与剖析le 装备源文件途径
android {
//...其他装备代码
sourceSetsandroid下载安装 {
main {
//默许文件夹
def javaPaths = ["sr算法导论c/main/java"]
def assetsPaths = ["src/main/assets"]
def javaGraphCheck = "src/main/javaGraphcheck"
def javaFin.gradle文件夹gerDetect = "src/main/javaFingerdetect"
de.gradle文件夹f javaOcr = "src/main/javaO算法是什么cr"
defgradle是什么 assetsGraphCheck = "src/main/assetsLensandroid的drawable类"
def assetsOcr = "srcandroid/yunos/main/assetsOcr"
def assetsFinger = "src/main/asandroid体系setsFinger"
if (sdkType == "graphcheck") {
javaPaths.add(javaGraphChapproveeck)
assetsPaths.add(assetsGraphCheck)
} else if (sdkType == "fingerdetect") {
javaPaths.add(javaFingerDetect)
assetsPaths.add(assetsFinger)
}android什么意思 else if (sdkType == "ocr") {
javaPaths.add(javaOcr)
aappstoressetsPaths.add(assetsOcr)
} elandroid/yunosse {
javaPaths.add(javaGraphCheck)
japp安装下载avaPaths.add(javappearanceaFingerDetect)
javaPaths.add(jav算法是什么aOcr)
assetsPaths.add(assetsGraphCheck)
assetsPaths.add(assetsOcr)
assetsPaths.add(aAPPssetsFinger)
}
java.srcDirs = javaPaAndroidths
asseAndroidts.srcDirs = assetsPaths
}
}
}
-
修改编译产品的称谓(为了直观差异打出来的是啥)
android {
buildTypes {
release {
minifyEnabled false
proguardF源码编辑器编程猫下载iles getDefaultProguardF算法的五个特性ile('proguard-android-optimize.txt'), 'proguard-rules.pro'
android.libraryVaandroid什么意思riants.all { variant ->
variant.outputs.agradle是干什么的ll {
outputFileName = "sail_ocr-${version}-${sdkType}.aar"
}
}
}
}
}
-
其他装备
dependencies 依托 和 setting.grandroid平板电脑价格adle 中也可以根据 sdkType 来判别。如下便是我项目中的demo模块树。
if (sdkType == "graphcheck") {
include ':lensdemo'
include ':modu算法剖析的意图是le_graphcAPPhandroid什么意思eck'
include ':module_ocr'
} else if (sdkType == "fingerdete源码编辑器编程猫ct") {
include算法工程师 ':demo_fing算法规划与剖析er_detect'
incluapplicationde ':module_scan_finger'
inc源码年代lude ':module_ocr'
include ':module_base'
include ':module_ui'
include ':lib_basapplee'
include ':lib_android的drawable类utils'
} else if (sdkType == "ocr") {
include ':demo_ocr'
i算法工程师和程序员差异nclude ':module_ocr'
i源码之家nclude ':module_base'
include ':android下载安装module_ui'
include ':lib_base'
inclappearanceude ':lib_utils'
} else {
include ':app'
include ':demo_ocr'
include ':lensdemo'
include ':mogradle教程dule_graphch源码编辑器手机版下载eck'
include ':module_scan_finger'
incluandroidstudio安装教程deandroid体系 ':module_profile'
include ':module_ocr'
include ':moduleandroid什么意思_base'
include ':moandroid体系dule_ui'
include ':profile_photo_frame'
inappstoreclude ':lib_base'
include ':lib_utils'
}
现在只需求在gradle. propertiesappointment中修改sdkType的值,就可以直算法的时刻复杂度取决于接编译出对应的sd源码编辑器手机版下载k包
四.完毕
这样的作业并不难,做完之后却有小小的成就感。
抽出那么半响一appointment天时刻专门用来剥离代码,解除耦合,调试差错。琐碎得作业却让时刻消逝得飞快appstore。
许多事情都不难,仅仅迟迟没有人去做算了。