apply plugin: 'com.android.application' apply plugin: "com.tencent.android.tpns" static def appName() { return "AoleyunDeviceInfo" } static def releaseTime() { return new Date().format("yyyyMMdd-HHmmss", TimeZone.getDefault()) } android { //Android Studio 4.0 之后使用这个,但是会把jar打包进apk // gradle.projectsEvaluated { // tasks.withType(JavaCompile) { // Set fileSet = options.bootstrapClasspath.getFiles() // List newFileList = new ArrayList<>(); // //JAVA语法,可连续调用,输入参数建议为相对路径 // newFileList.add(new File("libs/framework.jar")) // //最后将原始参数添加 // newFileList.addAll(fileSet) // options.bootstrapClasspath = files( // newFileList.toArray() // ) // } // } compileSdkVersion 29 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.aoleyun.sn" //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 22 targetSdkVersion 29 multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { //选择要添加的对应 cpu 类型的 .so 库。 abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' // 还可以添加 'armeabi' , 'x86', 'x86_64', 'mips', 'mips64' } } lintOptions { checkReleaseBuilds false } dexOptions { jumboMode true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } //多版本 productFlavors { //新平台正式 cube { flavorDimensions "default" versionCode 20 versionName "2.9" /*********************************极光推送************************************/ manifestPlaceholders = [ XG_ACCESS_ID : "1500026372", XG_ACCESS_KEY: "AR7A1L5M0LPH", // JPUSH_PKGNAME: "com.aoleyun.sn", // JPUSH_APPKEY : "79c64ef41b8728ad6aa29af1", //JPush上注册的包名对应的appkey. // JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. // channel_value: "newly", ] /*********************************极光推送end************************************/ buildConfigField "String", "ROOT_URL", '"https://led.aoleyun.cn/api/"' buildConfigField "String", "SCREEN_BASE_URL", '"https://led.aoleyun.cn:2018/"' buildConfigField "String", "SCREEN_URL", '"https://led.aoleyun.cn:2018/wm/is_online"' buildConfigField "String", "WebsocketURL", '"wss://led.aoleyun.cn:2018"' } //新平台测试 beta { versionNameSuffix "-beta" flavorDimensions "default" versionCode 1 versionName "1.0" /*********************************极光推送************************************/ manifestPlaceholders = [ XG_ACCESS_ID : "1500026372", XG_ACCESS_KEY: "AR7A1L5M0LPH", // JPUSH_PKGNAME: "com.aoleyun.sn", // JPUSH_APPKEY : "79c64ef41b8728ad6aa29af1", //JPush上注册的包名对应的appkey. // JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. // channel_value: "beta", ] /*********************************极光推送end************************************/ buildConfigField "String", "ROOT_URL", '"https://led.aoleyun.cn/api/"' buildConfigField "String", "SCREEN_BASE_URL", '"https://led.aoleyun.cn:2018/"' buildConfigField "String", "SCREEN_URL", '"https://led.aoleyun.cn:2018/wm/is_online"' buildConfigField "String", "WebsocketURL", '"wss://led.aoleyun.cn:2018"' } } sourceSets { //测试版的图标 beta.res.srcDirs = ['src/beta/res'] // newly.res.srcDirs = ['src/beta/res'] } //签名 signingConfigs { alldocube { storeFile file("keystore/zhanxun.keystore") storePassword "123456" keyAlias "zhanxun" keyPassword "123456" v1SigningEnabled true v2SigningEnabled true } alldocubeDebug { storeFile file("keystore/zhanxunUserdebug.keystore") storePassword "123456" keyAlias "zhanxunUserdebug" keyPassword "123456" v1SigningEnabled true v2SigningEnabled true } } // Disable release builds for now // android.variantFilter { variant -> // if (variant.buildType.name.endsWith('zhanRuiRelease')) { // variant.setIgnore(variant.getFlavors().get(0).name.equals('official') || variant.getFlavors().get(0).name.equals('zhongyou')) // } // if (variant.buildType.name.endsWith('zhanRuiDebug')) { // variant.setIgnore(variant.getFlavors().get(0).name.equals('official') || variant.getFlavors().get(0).name.equals('zhongyou')) // } // if (name.contains("MTKnewly")) { // variant.setIgnore(variant.buildType.name.endsWith("zhanRuiRelease") || variant.buildType.name.endsWith("zhanRuiDebug") || variant.buildType.name.endsWith("zhanRuiUserdebug") // || variant.buildType.name.endsWith("zhanRuiUserdebugReleas")) // } // if (name.endsWith("newlyDebug") || name.endsWith("newlyRelease")) { // variant.setIgnore(!name.contains("MTK")) // } // //// // Icon recents is Go only //// if (name.contains("WithQuickstepIconRecents") && !name.contains("l3go")) { //// variant.setIgnore(true) //// } // } buildTypes { debug { buildConfigField "String", "platform", '"ZhanRui"' manifestPlaceholders = [ AMAP_KEY: "6e339305206eeb43f2b4cc1f31751f89" ] debuggable true versionNameSuffix "-debug" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //Zipalign优化 zipAlignEnabled true applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null) { def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" output.outputFileName = fileName } } } signingConfig signingConfigs.alldocube } release { buildConfigField "String", "platform", '"ZhanRui"' manifestPlaceholders = [ AMAP_KEY: "6e339305206eeb43f2b4cc1f31751f89" ] //混淆 minifyEnabled false //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //Zipalign优化 zipAlignEnabled true applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null) { def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" output.outputFileName = fileName } } } signingConfig signingConfigs.alldocube } //userdebug rom使用这个版本 alldocubeDebug.initWith(debug) alldocubeDebug { buildConfigField "String", "platform", '"ZhanRui"' manifestPlaceholders = [ AMAP_KEY: "6e339305206eeb43f2b4cc1f31751f89" ] debuggable true versionNameSuffix "-debug" signingConfig signingConfigs.alldocubeDebug } alldocubeDebugReleas.initWith(release) alldocubeDebugReleas { buildConfigField "String", "platform", '"ZhanRui"' manifestPlaceholders = [ AMAP_KEY: "6e339305206eeb43f2b4cc1f31751f89" ] signingConfig signingConfigs.alldocubeDebug } } externalNativeBuild { cmake { path file('CMakeLists.txt') } } } dependencies { // implementation fileTree(dir: "libs", include: ["*.jar"]) compileOnly files('libs/framework.jar') implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' //BindView implementation 'com.jakewharton:butterknife:10.1.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0' //OkHttp implementation 'com.squareup.okhttp3:okhttp:4.9.1' //Retrofit implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0' //RxJava implementation 'io.reactivex.rxjava3:rxjava:3.0.0' implementation 'io.reactivex.rxjava3:rxandroid:3.0.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.uber.autodispose:autodispose:1.3.0" //implementation "com.uber.autodispose:autodispose-android-archcomponents:1.3.0" //Google implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.google.zxing:core:3.4.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.13.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.13.1' // debugImplementation because LeakCanary should only run in debug builds. debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8.1' //fastjson implementation 'com.alibaba:fastjson:1.2.79' //极光推送 // implementation 'cn.jiguang.sdk:jpush:4.3.0' // 此处以JPush 3.5.6 版本为例。 // implementation 'cn.jiguang.sdk:jcore:2.9.0' // 此处以JCore 2.2.8 版本为例。 //高德地图定位 implementation 'com.amap.api:location:5.1.0' //MMKV implementation 'com.tencent:mmkv-static:1.2.12' //腾讯移动推送 TPNS implementation 'com.tencent.tpns:tpns:1.3.1.1-release' // //RxHttp // implementation 'com.github.liujingxing.rxhttp:rxhttp:2.6.5' // //implementation 'com.squareup.okhttp3:okhttp:4.9.1' //rxhttp v2.2.2版本起,需要手动依赖okhttp // annotationProcessor 'com.github.liujingxing.rxhttp:rxhttp-compiler:2.6.5' // //生成RxHttp类,纯Java项目,请使用annotationProcessor代替kapt // implementation 'com.github.liujingxing.rxlife:rxlife-coroutine:2.1.0' //管理协程生命周期,页面销毁,关闭请求 // //rxjava2 (RxJava2/Rxjava3二选一,使用asXxx方法时必须) // //implementation 'io.reactivex.rxjava2:rxjava:2.2.8' // //implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // implementation 'com.github.liujingxing.rxlife:rxlife-rxjava2:2.1.0' //管理RxJava2生命周期,页面销毁,关闭请求 //工具类 implementation 'com.blankj:utilcodex:1.31.0' //Aria implementation 'com.arialyy.aria:core:3.8.15' annotationProcessor 'com.arialyy.aria:compiler:3.8.15' //压缩文件解压 implementation 'org.zeroturnaround:zt-zip:1.14' //更换字体框架 implementation 'uk.co.chrisjenx:calligraphy:2.3.0' //Java WebSocket implementation "org.java-websocket:Java-WebSocket:1.5.2" //状态栏透明 implementation 'com.gitee.zackratos:UltimateBarX:0.8.0' // // 基础依赖包,必须要依赖 // implementation 'com.gyf.immersionbar:immersionbar:3.0.0' // // fragment快速实现(可选) // implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' // // kotlin扩展(可选) // implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0' implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.24' } 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" } } //https://www.pianshen.com/article/93481144911/ //https://blog.csdn.net/dhl_1986/article/details/102856026 //https://blog.csdn.net/zhonghe1114/article/details/80923730 //https://blog.csdn.net/u014175785/article/details/116235760 //使用系统编译后的framework.jar }