gradle 适配最新开发工具 android studio2024.2.2

master
hwf452 10 months ago
parent 06bea1aa89
commit 1f59c77b7d

@ -1,8 +1,3 @@
//plugins {
// id 'com.android.application'
// id 'org.jetbrains.kotlin.android'
//}
plugins { plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
@ -48,7 +43,6 @@ android {
abortOnError false abortOnError false
} }
minifyEnabled false // minifyEnabled false //
zipAlignEnabled true // zip
debuggable false // debug debuggable false // debug
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//apk //apk
@ -89,35 +83,23 @@ dependencies {
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' implementation libs.logging.interceptor
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation libs.retrofit
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation libs.com.squareup.retrofit2.converter.gson5
//implementation 'org.litepal.android:core:1.5.1'// implementation libs.smarttable
implementation 'com.github.huangyanbin:SmartTable:2.2.0' implementation libs.androidx.recyclerview
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation libs.circleimageview
implementation 'de.hdodenhof:circleimageview:3.1.0' implementation libs.photoviewer
implementation 'com.github.wanglu1209:PhotoViewer:0.50' implementation libs.appupdate
implementation 'io.github.azhon:appupdate:4.2.6' implementation libs.crashreport
implementation 'com.tencent.bugly:crashreport:3.2.1' implementation libs.xui
implementation 'com.github.xuexiangjys:XUI:1.1.4' implementation libs.eventbus
implementation 'org.greenrobot:eventbus:3.0.0'
//implementation 'com.zhihu.android:matisse:0.5.3-beta3'//
// //
implementation 'io.github.justson:agentweb-core:v5.1.1-androidx' implementation libs.agentweb.core
//implementation 'com.lcodecorex:tkrefreshlayout:1.0.7'// implementation libs.androidx.multidex
implementation 'androidx.multidex:multidex:2.0.1'
// implementation 'androidx.core:core-ktx:1.9.0'
// implementation 'androidx.appcompat:appcompat:1.6.1'
// implementation 'com.google.android.material:material:1.8.0'
// implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
// implementation 'androidx.activity:activity:1.8.0'
//
//
// //
implementation project(':videocompressor') implementation project(':videocompressor')
// //
@ -134,60 +116,41 @@ dependencies {
//SDK //SDK
implementation files('libs/SangforSDK.aar') implementation files('libs/SangforSDK.aar')
implementation 'de.hdodenhof:circleimageview:3.1.0' implementation libs.circleimageview
//APP //APP
implementation 'com.tencent.bugly:crashreport:3.2.1' implementation libs.crashreport
// //
// PictureSelector basic (Necessary) // PictureSelector basic (Necessary)
implementation 'io.github.lucksiege:pictureselector:v3.10.7' implementation libs.pictureselector
// image compress library (Not necessary) // image compress library (Not necessary)
implementation 'io.github.lucksiege:compress:v3.10.7' implementation libs.compress
// uCrop library (Not necessary) // uCrop library (Not necessary)
implementation 'io.github.lucksiege:ucrop:v3.10.7' implementation libs.ucrop
// simple camerax library (Not necessary) // simple camerax library (Not necessary)
implementation 'io.github.lucksiege:camerax:v3.10.7' implementation libs.camerax
// //
implementation 'com.github.bumptech.glide:glide:4.11.0' implementation libs.glide
implementation 'androidx.annotation:annotation:1.6.0' implementation libs.annotation
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' implementation libs.androidx.lifecycle.livedata.ktx
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' implementation libs.androidx.lifecycle.viewmodel.ktx
annotationProcessor libs.compiler
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
// //
implementation 'cn.hutool:hutool-all:5.8.5' implementation libs.cn.hutool.all
//implementation 'cn.hutool:hutool-crypto:5.7.16' implementation libs.bcprov.jdk15on
implementation 'org.bouncycastle:bcprov-jdk15on:1.65'
//mqtt //mqtt
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.4' implementation libs.paho.org.eclipse.paho.client.mqttv3
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' implementation libs.paho.org.eclipse.paho.android.service
implementation 'org.bouncycastle:bcpkix-jdk15on:1.56' implementation libs.bcpkix.jdk15on
implementation 'commons-codec:commons-codec:1.15' implementation libs.commons.codec.commons.codec4
//广 //广
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' implementation libs.androidx.localbroadcastmanager.localbroadcastmanager
// //
implementation 'com.google.mlkit:face-detection:16.1.6' implementation libs.com.google.mlkit.face.detection2
// CameraX core library using the camera2 implementation //
def camerax_version = "1.4.0-alpha04" implementation libs.barcode.scanning
// The following line is optional, as the core library is included indirectly by camera-camera2
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
// If you want to additionally use the CameraX Lifecycle library
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
// If you want to additionally use the CameraX VideoCapture library
implementation "androidx.camera:camera-video:${camerax_version}"
// If you want to additionally use the CameraX View class
implementation "androidx.camera:camera-view:${camerax_version}"
// If you want to additionally add CameraX ML Kit Vision Integration
implementation "androidx.camera:camera-mlkit-vision:${camerax_version}"
// If you want to additionally use the CameraX Extensions library
implementation "androidx.camera:camera-extensions:${camerax_version}"
// testImplementation 'junit:junit:4.13.2'
// androidTestImplementation 'androidx.test.ext:junit:1.1.5'
// androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
configurations { configurations {
all*.exclude group: 'com.google.code.gson' all*.exclude group: 'com.google.code.gson'
} }

@ -78,6 +78,7 @@
tools:replace="android:allowBackup" tools:replace="android:allowBackup"
tools:targetApi="s"> tools:targetApi="s">
<activity <activity
android:name=".ui.activity.LoginActivity" android:name=".ui.activity.LoginActivity"
android:exported="true" android:exported="true"
@ -128,6 +129,10 @@
android:name=".base.MipcaActivityCapture" android:name=".base.MipcaActivityCapture"
android:exported="false" android:exported="false"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity
android:name=".ui.activity.QrCodeActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.SisBaseActivity" android:name=".ui.activity.SisBaseActivity"
android:exported="false" android:exported="false"

@ -0,0 +1,45 @@
package com.rehome.dywoa.Listener
import android.annotation.SuppressLint
import android.util.Log
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageProxy
import com.google.mlkit.vision.barcode.Barcode
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
import com.google.mlkit.vision.barcode.BarcodeScanning
import com.google.mlkit.vision.common.InputImage
class QRCodeAnalyser(private val listener: (List<Barcode>, Int, Int) -> Unit) :
ImageAnalysis.Analyzer {
//配置当前扫码格式
private val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(
Barcode.FORMAT_QR_CODE,
Barcode.FORMAT_AZTEC
).build()
//获取解析器
private val detector = BarcodeScanning.getClient(options)
@SuppressLint("UnsafeExperimentalUsageError", "UnsafeOptInUsageError")
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image ?: kotlin.run {
imageProxy.close()
return
}
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
detector.process(image)
.addOnSuccessListener { barCodes ->
Log.i("app", "barCodes: ${barCodes.size}")
if (barCodes.size > 0) {
listener.invoke(barCodes, imageProxy.width, imageProxy.height)
//接收到结果后,就关闭解析
detector.close()
}
}
.addOnFailureListener { Log.i("app", "Error: ${it.message}") }
.addOnCompleteListener { imageProxy.close() }
}
}

@ -27,15 +27,9 @@ import java.util.Calendar
class KksSearchActivity : BaseActivityOaToolbarViewBinding<ActivityKksSearchBinding>() { class KksSearchActivity : BaseActivityOaToolbarViewBinding<ActivityKksSearchBinding>() {
private val QRCODE_SCAN_CAMERA_REQUEST_CODE = 4 //扫描二維码请求摄像头权限
private var qrCodeStrSearch: String? = null private var qrCodeStrSearch: String? = null
private val permission = arrayOf(
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
private lateinit var launcherResultQRCode: ActivityResultLauncher<Intent> private lateinit var launcherResultQRCode: ActivityResultLauncher<Intent>
override fun getViewBinding() = ActivityKksSearchBinding.inflate(layoutInflater) override fun getViewBinding() = ActivityKksSearchBinding.inflate(layoutInflater)
@ -79,56 +73,17 @@ class KksSearchActivity : BaseActivityOaToolbarViewBinding<ActivityKksSearchBind
} }
} }
/** private fun intentTOQRCode() {
* 申请权限回调 val intentMHJ = Intent(this, QrCodeActivity::class.java)
* intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
* @param requestCode launcherResultQRCode.launch(intentMHJ)
* @param permissions
* @param grantResults
*/
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String?>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
//扫描二维码
if (QRCODE_SCAN_CAMERA_REQUEST_CODE == requestCode) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
val intent = Intent(this, MipcaActivityCapture::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
launcherResultQRCode.launch(intent)
} else {
//权限拒绝
Toast.makeText(
this,
"权限拒绝,无法打开摄像头,请手动设置开启APP访问摄像头权限",
Toast.LENGTH_SHORT
).show()
}
}
} }
/** /**
* 跳转到扫码界面扫码 * 跳转到扫码界面扫码
*/ */
private fun goScan() { private fun goScan() {
//检查是否有相机权限 intentTOQRCode();
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
) {
val intent = Intent(this, MipcaActivityCapture::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
launcherResultQRCode.launch(intent)
} else {
ActivityCompat.requestPermissions(
this,
permission,
QRCODE_SCAN_CAMERA_REQUEST_CODE
)
}
} }
//创建一个ActivityResultLauncher //创建一个ActivityResultLauncher
@ -139,7 +94,7 @@ class KksSearchActivity : BaseActivityOaToolbarViewBinding<ActivityKksSearchBind
val resultCode = it.resultCode val resultCode = it.resultCode
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
if (data != null) { if (data != null) {
val qrCodeStr: String = data.getStringExtra("result").toString() val qrCodeStr = data.getStringExtra("code") ?: ""
showLog(qrCodeStr) showLog(qrCodeStr)
if(!TextUtils.isEmpty(qrCodeStr)){ if(!TextUtils.isEmpty(qrCodeStr)){
if(qrCodeStr.startsWith("KK:",false)){ if(qrCodeStr.startsWith("KK:",false)){

@ -0,0 +1,185 @@
package com.rehome.dywoa.ui.activity
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Rect
import android.graphics.RectF
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.camera.core.ImageCapture
import androidx.camera.view.LifecycleCameraController
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.rehome.dywoa.databinding.ActivityQrCodeBinding
import com.rehome.dywoa.Listener.QRCodeAnalyser
import com.rehome.dywoa.base.BaseActivityOaToolbarViewBinding
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
/**
* date:2025/02/13 10:05:28
* author:HuangWenfei
* description:二维码扫描
*/
class QrCodeActivity : BaseActivityOaToolbarViewBinding<ActivityQrCodeBinding>() {
private lateinit var lifecycleCameraController: LifecycleCameraController
private lateinit var cameraExecutor: ExecutorService
private val CAMERA_REQUEST_CAMERA_SCAN: Int = 88 //请求码
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// binding = ActivityQrCodeBinding.inflate(layoutInflater)
// setContentView(binding.root)
// initController()
// }
override fun getViewBinding() = ActivityQrCodeBinding.inflate(layoutInflater)
override fun getToolbar()= binding.toolbarView.toolbar
override fun initView() {
initToolbar("二维码/条码扫描")
setLeftOnClickListener { finish() }
checkPermission()
//initController()
}
override fun initData() {
}
private fun checkPermission(){
//检测摄像头权限
if (!context.packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {
binding.frCamera.visibility=View.GONE
Toast.makeText(
context,
"权限拒绝,请手动设置开启APP访问摄像头权限",
Toast.LENGTH_LONG
).show()
return
}
//动态权限申请
if (ContextCompat.checkSelfPermission(
context,
Manifest.permission.CAMERA
) != PackageManager.PERMISSION_GRANTED
) {
binding.frCamera.visibility=View.GONE
//权限请求
ActivityCompat.requestPermissions(
this,
arrayOf<String>(Manifest.permission.CAMERA),
CAMERA_REQUEST_CAMERA_SCAN
)
} else {
//已授权,打开摄像头扫描
initController()
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (CAMERA_REQUEST_CAMERA_SCAN == requestCode) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
binding.frCamera.visibility=View.VISIBLE
//已授权,打开摄像头扫描
initController()
} else {
binding.frCamera.visibility=View.GONE
//权限拒绝
Toast.makeText(
this,
"权限拒绝,请手动设置开启APP访问摄像头权限",
Toast.LENGTH_SHORT
).show()
}
}
}
@SuppressLint("ClickableViewAccessibility", "UnsafeOptInUsageError")
private fun initController() {
cameraExecutor = Executors.newSingleThreadExecutor()
lifecycleCameraController = LifecycleCameraController(this)
lifecycleCameraController.bindToLifecycle(this)
lifecycleCameraController.imageCaptureFlashMode = ImageCapture.FLASH_MODE_AUTO
lifecycleCameraController.setImageAnalysisAnalyzer(
cameraExecutor,
QRCodeAnalyser { barcodes, imageWidth, imageHeight ->
if (barcodes.isEmpty()) {
return@QRCodeAnalyser
}
initScale(imageWidth, imageHeight)
val list = ArrayList<RectF>()
val strList = ArrayList<String>()
barcodes.forEach { barcode ->
barcode.boundingBox?.let { rect ->
val translateRect = translateRect(rect)
list.add(translateRect)
// Log.e(
// "ztzt", "left${translateRect.left} +" +
// " top${translateRect.top} + right${translateRect.right}" +
// " + bottom${translateRect.bottom}"
// )
// Log.e("ztzt", "barcode.rawValue${barcode.rawValue}")
strList.add(barcode.rawValue ?: "No Value")
}
}
judgeIntent(strList)
binding.scanView.setRectList(list)
})
binding.previewView.controller = lifecycleCameraController
}
private fun judgeIntent(list: ArrayList<String>) {
val sb = StringBuilder()
list.forEach {
sb.append(it)
//sb.append("\n")
}
intentToResult(sb.toString())
}
private fun intentToResult(result: String) {
val resultIntent = Intent()
val bundle = Bundle()
bundle.putString("code", result)
resultIntent.putExtras(bundle)
setResult(RESULT_OK, resultIntent)
finish();
}
private var scaleX = 0f
private var scaleY = 0f
private fun translateX(x: Float): Float = x * scaleX
private fun translateY(y: Float): Float = y * scaleY
//将扫描的矩形换算为当前屏幕大小
private fun translateRect(rect: Rect) = RectF(
translateX(rect.left.toFloat()),
translateY(rect.top.toFloat()),
translateX(rect.right.toFloat()),
translateY(rect.bottom.toFloat())
)
//初始化缩放比例
private fun initScale(imageWidth: Int, imageHeight: Int) {
//Log.e("ztzt", "imageWidth${imageWidth} + imageHeight${imageHeight}")
scaleY = binding.scanView.height.toFloat() / imageWidth.toFloat()
scaleX = binding.scanView.width.toFloat() / imageHeight.toFloat()
//Log.e("ztzt", "scaleX${scaleX} + scaleY${scaleY}")
}
}

@ -0,0 +1,89 @@
package com.rehome.dywoa.weiget
import android.animation.ObjectAnimator
import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View
import androidx.core.content.ContextCompat
import com.rehome.dywoa.R
/**
* Author:HuangWenfei
* description: 二维码扫描
* date2025/02/13
*/
class ScanView(context: Context, attrs: AttributeSet) : View(context, attrs) {
private val circlePaint = Paint() //二维码圆圈画笔
private var rectList: ArrayList<RectF>? = null //二维码数组
private var scanLine: Bitmap//横线
private var isShowLine = true//是否显示扫描线
private var animator: ObjectAnimator? = null
private var floatYFraction = 0f
set(value) {
field = value
invalidate()
}
init {
circlePaint.apply {
this.style = Paint.Style.FILL
this.color = ContextCompat.getColor(
context, android.R.color.holo_green_dark
)
}
scanLine = BitmapFactory.decodeResource(resources, R.drawable.scan_light)
getAnimator().start()
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
parseResult(canvas)
if (isShowLine) {
canvas.drawBitmap(scanLine, (width - scanLine.width) / 2f, height * floatYFraction, circlePaint)
}
}
private fun getAnimator(): ObjectAnimator {
if (animator == null) {
animator = ObjectAnimator.ofFloat(
this,
"floatYFraction",
0f,
1f
)
animator?.duration = 3000
animator?.repeatCount = -1 //-1代表无限循环
}
return animator!!
}
private fun parseResult(canvas: Canvas?) {
rectList?.let { list ->
if (list.isEmpty()) {
return
}
list.forEach {
canvas?.drawCircle(
it.left + (it.right - it.left) / 2f,
it.top + (it.bottom - it.top) / 2f,
50f,
circlePaint
)
}
}
}
fun setRectList(list: ArrayList<RectF>?) {
rectList = list
rectList?.let {
if (it.isNotEmpty()) {
isShowLine = false
getAnimator().cancel()
invalidate()
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#00ffffff" />
<stroke
android:width="2dp"
android:color="#FF00FF00" />
<corners
android:bottomLeftRadius="1px"
android:bottomRightRadius="1px"
android:topLeftRadius="1px"
android:topRightRadius="1px" />
</shape>

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.activity.QrCodeActivity">
<include
android:id="@+id/toolbarView"
layout="@layout/layout_base" />
<FrameLayout
android:id="@+id/fr_camera"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/scan_bg"
android:orientation="vertical">
<com.rehome.dywoa.weiget.ScanView
android:id="@+id/scanView"
android:layout_width="250dp"
android:layout_height="250dp"
android:background="@android:color/transparent" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textSize="16sp"
android:textColor="#666666"
android:textStyle="bold"
android:text="@string/scan_text"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>

@ -102,4 +102,7 @@
<string name="the_second_step_tip_desc">密码长度不能小于8位且必须为大小写字母、数字和特殊字符组成</string> <string name="the_second_step_tip_desc">密码长度不能小于8位且必须为大小写字母、数字和特殊字符组成</string>
<string name="common_code_input_hint">输入验证码(必填)</string> <string name="common_code_input_hint">输入验证码(必填)</string>
<string name="common_code_send">发送验证码</string> <string name="common_code_send">发送验证码</string>
<string name="scan_text">将二维码/条码放入框内即可扫描</string>
<string name="shanke_sign">签到</string>
<string name="shan_please_sign">请扫描二维码进行签到</string>
</resources> </resources>

@ -11,5 +11,5 @@ android {
} }
dependencies { dependencies {
implementation libs.androidx.appcompat.v170 implementation libs.androidx.appcompat
} }

@ -1,36 +1,86 @@
[versions] [versions]
agentwebCore = "v5.1.1-androidx"
agp = "8.8.0" agp = "8.8.0"
androidxAppcompatVersion = "1.1.0" androidxLocalbroadcastmanager = "1.1.0"
annotationVersion = "1.8.2" annotationVersion = "1.9.1"
appcompatVersion = "1.7.0" appupdate = "4.2.6"
bcpkixJdk15on = "1.67"
circleimageview = "3.1.0"
commonsCodecCommonsCodec2 = "1.15"
crashreport = "4.1.9.3"
eventbus = "3.3.1"
glide = "4.11.0" glide = "4.11.0"
hutoolAllVersion = "5.8.5"
kotlin = "1.9.24" kotlin = "1.9.24"
coreKtx = "1.10.1" coreKtx = "1.15.0"
junit = "4.13.2" junit = "4.13.2"
junitVersion = "1.1.5" junitVersion = "1.2.1"
espressoCore = "3.5.1" espressoCore = "3.6.1"
appcompat = "1.6.1" appcompat = "1.7.0"
material = "1.10.0" library = "1.0.4"
activity = "1.8.0" lifecycleLivedataKtx = "2.6.2"
constraintlayout = "2.1.4" lifecycleViewmodelKtx = "2.6.2"
recyclerview = "1.3.0" loggingInterceptor = "4.9.0"
material = "1.12.0"
activity = "1.10.0"
constraintlayout = "2.2.0"
multidex = "2.0.1"
orgEclipsePahoClientMqttv3Version = "1.2.4"
orgEclipsePahoAndroidServiceVersion = "1.1.1"
photoviewer = "0.50"
pictureselector = "v3.10.7"
recyclerview = "1.4.0"
retrofit = "2.9.0"
smarttable = "2.2.0"
squareupPicasso = "2.5.2" squareupPicasso = "2.5.2"
barcodeScanning = "16.1.1"
supportV4 = "28.0.0"
xui = "1.2.1"
[libraries] [libraries]
androidx-appcompat-v170 = { module = "androidx.appcompat:appcompat", version.ref = "appcompatVersion" } agentweb-core = { module = "io.github.justson:agentweb-core", version.ref = "agentwebCore" }
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" }
androidx-lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "lifecycleLivedataKtx" }
androidx-localbroadcastmanager-localbroadcastmanager = { module = "androidx.localbroadcastmanager:localbroadcastmanager", version.ref = "androidxLocalbroadcastmanager" }
androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" } androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" }
annotation = { module = "androidx.annotation:annotation", version.ref = "annotationVersion" } annotation = { module = "androidx.annotation:annotation", version.ref = "annotationVersion" }
appcompat-v110 = { module = "androidx.appcompat:appcompat", version.ref = "androidxAppcompatVersion" } appupdate = { module = "io.github.azhon:appupdate", version.ref = "appupdate" }
bcpkix-jdk15on = { module = "org.bouncycastle:bcpkix-jdk15on", version.ref = "bcpkixJdk15on" }
bcprov-jdk15on = { module = "org.bouncycastle:bcprov-jdk15on", version.ref = "bcpkixJdk15on" }
camerax = { module = "io.github.lucksiege:camerax", version.ref = "pictureselector" }
circleimageview = { module = "de.hdodenhof:circleimageview", version.ref = "circleimageview" }
cn-hutool-all = { module = "cn.hutool:hutool-all", version.ref = "hutoolAllVersion" }
com-google-mlkit-face-detection2 = { module = "com.google.mlkit:face-detection", version.ref = "barcodeScanning" }
com-squareup-picasso-picasso = { module = "com.squareup.picasso:picasso", version.ref = "squareupPicasso" } com-squareup-picasso-picasso = { module = "com.squareup.picasso:picasso", version.ref = "squareupPicasso" }
com-squareup-retrofit2-converter-gson5 = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
commons-codec-commons-codec4 = { module = "commons-codec:commons-codec", version.ref = "commonsCodecCommonsCodec2" }
compiler = { module = "com.github.bumptech.glide:compiler", version.ref = "glide" }
compress = { module = "io.github.lucksiege:compress", version.ref = "pictureselector" }
crashreport = { module = "com.tencent.bugly:crashreport", version.ref = "crashreport" }
eventbus = { module = "org.greenrobot:eventbus", version.ref = "eventbus" }
glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" } glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" }
junit = { group = "junit", name = "junit", version.ref = "junit" } junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
library = { module = "it.sephiroth.android.library.imagezoom:library", version.ref = "library" }
logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "loggingInterceptor" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" } material = { group = "com.google.android.material", name = "material", version.ref = "material" }
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
barcode-scanning = { module = "com.google.mlkit:barcode-scanning", version.ref = "barcodeScanning" }
paho-org-eclipse-paho-android-service = { module = "org.eclipse.paho:org.eclipse.paho.android.service", version.ref = "orgEclipsePahoAndroidServiceVersion" }
paho-org-eclipse-paho-client-mqttv3 = { module = "org.eclipse.paho:org.eclipse.paho.client.mqttv3", version.ref = "orgEclipsePahoClientMqttv3Version" }
photoviewer = { module = "com.github.wanglu1209:PhotoViewer", version.ref = "photoviewer" }
pictureselector = { module = "io.github.lucksiege:pictureselector", version.ref = "pictureselector" }
recyclerview-v7 = { module = "com.android.support:recyclerview-v7", version.ref = "supportV4" }
smarttable = { module = "com.github.huangyanbin:SmartTable", version.ref = "smarttable" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
support-v4 = { module = "com.android.support:support-v4", version.ref = "supportV4" }
ucrop = { module = "io.github.lucksiege:ucrop", version.ref = "pictureselector" }
xui = { module = "com.github.xuexiangjys:XUI", version.ref = "xui" }
[plugins] [plugins]
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }

@ -12,11 +12,10 @@ android {
} }
dependencies { dependencies {
implementation libs.appcompat.v110 implementation libs.androidx.appcompat
implementation libs.annotation implementation libs.annotation
implementation libs.androidx.recyclerview implementation libs.androidx.recyclerview
//noinspection UseTomlInstead implementation libs.library
implementation 'it.sephiroth.android.library.imagezoom:library:1.0.4'
compileOnly libs.glide compileOnly libs.glide
compileOnly libs.com.squareup.picasso.picasso compileOnly libs.com.squareup.picasso.picasso
} }

@ -11,6 +11,6 @@ android {
} }
dependencies { dependencies {
implementation 'com.android.support:support-v4:28.0.0' implementation libs.support.v4
implementation 'com.android.support:recyclerview-v7:28.0.0' implementation libs.recyclerview.v7
} }
Loading…
Cancel
Save