apply plugin: 'com.android.application' def appName() { return "XwadOSNeutral" } def releaseTime() { return new Date().format("yyyyMMdd_HHmmss", TimeZone.getDefault()) } android { compileSdkVersion 29 defaultConfig { applicationId "com.xwad.os" //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 23 targetSdkVersion 29 versionCode 26 versionName "1.2.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true vectorDrawables.useSupportLibrary = true compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } ndk { //根据需要 自行选择添加的对应cpu类型的.so库。 abiFilters 'armeabi-v7a', 'arm64-v8a' // 还可以添加 'armeabi', 'x86', 'x86_64', 'mips', 'mips64' } dataBinding { enabled true } lintOptions { checkReleaseBuilds false // Or, if you prefer, you can continue to check for errors in release builds, // but continue the build even when errors are found: abortOnError false } aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false packagingOptions { // 根据错误信息,排除具体的重复文件 exclude 'META-INF/DEPENDENCIES' // 如果还有其他类似冲突(如NOTICE, LICENSE文件),可以一并排除 exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } manifestPlaceholders = [ AMAP_KEY: "db082446a68db8e3ffdc8277313c2e6a" ] } externalNativeBuild { cmake { path file('CMakeLists.txt') } } signingConfigs { tuixin { storeFile file("keystore/tuixin.jks") storePassword "123456" keyAlias "universal" keyPassword "123456" v2SigningEnabled false } } buildTypes { debug { versionNameSuffix "-debug" minifyEnabled false //Zipalign优化 zipAlignEnabled true buildConfigField "String", "platform", '"tuixin"' signingConfig signingConfigs.tuixin applicationVariants.all { variant -> variant.outputs.each { output -> if (outputFile != null) { // def app_name = getResValues().get("app_name").value def fileName = "${appName()}_${variant.versionCode}_V${variant.versionName}_${releaseTime()}_${buildType.name}.apk" output.outputFileName = fileName } } } } release { minifyEnabled false //Zipalign优化 zipAlignEnabled true //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //签名 signingConfig signingConfigs.tuixin buildConfigField "String", "platform", '"tuixin"' // 将release版本的包名重命名,加上版本及日期 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = "" if (outputFile != null) { // def app_name = getResValues().get("app_name").value def fileName = "${appName()}_${variant.versionCode}_V${variant.versionName}_${releaseTime()}_${buildType.name}.apk" output.outputFileName = new File(outputFile, fileName) } } } } } } dependencies { // implementation fileTree(dir: 'libs', include: ['*.jar']) compileOnly files('libs/framework.jar') implementation project(path: ':niceimageview') implementation project(path: ':FlycoTabLayoutZ_Lib') implementation project(path: ':verification-view') implementation project(path: ':PhotoPreview') //保持1.3.1 更新会报错 implementation 'androidx.appcompat:appcompat:1.3.1' //2.0.4以上无法预览 implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation "androidx.recyclerview:recyclerview:1.2.1" // For control over item selection of both touch and mouse driven selection implementation "androidx.recyclerview:recyclerview-selection:1.1.0" implementation "androidx.viewpager2:viewpager2:1.0.0" // Java language implementation implementation "androidx.fragment:fragment:1.4.1" implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.multidex:multidex:2.0.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation "androidx.room:room-runtime:2.4.3" annotationProcessor "androidx.room:room-compiler:2.4.3" //内存泄漏检测 debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14' //磁盘缓存 implementation 'com.jakewharton:disklrucache:2.0.2' //Java WebSocket implementation "org.java-websocket:Java-WebSocket:1.5.3" //glide implementation 'com.github.bumptech.glide:glide:4.13.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.13.1' //RxJava implementation 'io.reactivex.rxjava3:rxjava:3.0.0' implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' // implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0" //Gson implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.google.zxing:core:3.5.0' //生命周期管理 implementation 'com.trello.rxlifecycle4:rxlifecycle:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-android:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-components-preference:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2' implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0' implementation 'com.jeremyliao:live-event-bus-x:1.7.3' //MMKV implementation 'com.tencent:mmkv-static:1.2.14' //bugly implementation 'com.tencent.bugly:crashreport:4.1.9.2' //阿里云推送 implementation 'com.aliyun.ams:alicloud-android-push:3.8.0' //高德地图定位 implementation 'com.amap.api:location:5.1.0' //状态栏透明 implementation 'com.gitee.zackratos:UltimateBarX:0.8.0' //指示器 implementation 'com.github.hackware1993:MagicIndicator:1.7.0' // for androidx // implementation 'io.github.h07000223:flycoTabLayout:3.0.0' // implementation 'com.github.liyujiang-gzu:FlycoTabLayout:781b8829a7' implementation 'com.king.view:circleprogressview:1.1.2' //工具类 implementation 'com.blankj:utilcodex:1.31.0' //aria implementation 'com.arialyy.aria:core:3.8.15' annotationProcessor 'com.arialyy.aria:compiler:3.8.15' //videoplayer implementation 'cn.jzvd:jiaozivideoplayer:7.7.0' implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-core:1.0.16' implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-native:1.0.16' //验证码输入 // implementation 'com.jacktuotuo.customview:verificationcodeview:1.0.5' //动态权限框架 implementation 'com.github.getActivity:XXPermissions:18.63' // 吐司框架:https://github.com/getActivity/Toaster implementation 'com.github.getActivity:Toaster:12.6' //autosize会改变第三方view的大小 //https://github.com/JessYanCoding/AndroidAutoSize implementation 'me.jessyan:autosize:1.2.1' //图片选择 implementation 'io.github.lucksiege:pictureselector:v3.11.1' // implementation 'com.github.wanglu1209:PhotoViewer:0.50' // implementation 'com.github.wanggaowan:PhotoPreview:2.5.5' /*jxw依赖*/ // implementation 'io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.3.2' // implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper:3.0.14" implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.47' implementation 'io.github.youth5201314:banner:2.2.3' implementation 'com.google.android.exoplayer:exoplayer:2.9.4' implementation 'com.google.android.exoplayer:exoplayer-core:2.9.4' implementation 'com.tencent.tav:libpag:latest.release' implementation 'com.ufreedom.uikit:FloatingTextLibrary:0.2.0' implementation 'org.apache.httpcomponents:httpcore:4.4.9' implementation 'org.apache.httpcomponents:httpclient:4.5.5' implementation 'org.greenrobot:eventbus:3.3.1' } preBuild { doLast { def imlFile = file(project.name + ".iml") // def imlFile = file("..\\.idea\\modules\\" + project.name + "\\" + rootProject.name + "." + project.name + ".iml") println 'Change ' + project.name + '.iml order' try { def parsedXml = (new XmlParser()).parse(imlFile) def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' } parsedXml.component[1].remove(jdkNode) def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform" println 'what' + sdkString new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK']) groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile)) } catch (FileNotFoundException e) { // nop, iml not found println "no iml found" } } }