hch
2023-11-19 a458ea510569c1c8ef0ca67b8af21ccf9447c9a3
SdkProject/library/build.gradle
@@ -1,19 +1,59 @@
plugins {
    id 'com.android.library'
    id 'com.google.gms.google-services'
}
def rootPath = rootProject.getRootDir().getAbsolutePath()
def channelPath = "${rootPath}/channel/${CHANNEL_NAME}"
def applyGradle(String path) {
    path = "${path}.gradle"
    File file = file(path)
    if (file.exists())
        apply from: path
}
applyGradle("${rootPath}/utils")//工具脚本
applyGradle("${channelPath}/build")//渠道脚本
applyGradle("${channelPath}/deps")//渠道的远程依赖脚本
Properties localProp = loadProperties('local')//本地配置
Properties channelProp = loadProperties("${channelPath}/config")//渠道所属的配置
def outPutPath = localProp.getProperty("OUTPUT_PATH")//工程sdk输出路径
//当前渠道所应用的插件名
def plugins = channelProp.getProperty("PLUGINS").split(';')
//插件脚本
plugins.each {
    applyGradle("${rootPath}/plugins/${it}/build")
    applyGradle("${rootPath}/plugins/${it}/deps")
}
//渠道需要覆盖主目录的java文件
def channelJavaFiles = getAllFiles(new ArrayList<File>(), "${channelPath}/java")
android {
    compileSdkVersion 29
    buildToolsVersion "30.0.2"
    compileSdkVersion 30
    buildToolsVersion "30.0.3"
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
        multiDexEnabled true
    }
    flavorDimensions "version"
    productFlavors {
        merger {
            dimension "version"
        }
    }
    buildTypes {
@@ -26,14 +66,161 @@
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    packagingOptions {exclude 'META-INF/rxjava.properties'}
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
    //合并资源
    sourceSets {
        main {
            java {
                //剔除主目录下,渠道重复的类
                channelJavaFiles.each {
                    def tag = "java\\"
                    def str = it.getAbsolutePath()
                    def str1 = str.substring(0, str.indexOf(tag))
                    def str2 = str.substring(str1.length() + tag.length(), str.length())
                    exclude str2
                }
            }
        }
        merger {
            java {
                srcDirs "${channelPath}/java"
            }
            jniLibs.srcDirs "${channelPath}/libs"
            res.srcDirs "${channelPath}/res"
            manifest {
                File file = file("${channelPath}/AndroidManifest.xml")
                if (file.exists())
                    srcFile "${channelPath}/AndroidManifest.xml"
            }
            //合并插件
            plugins.each {
                def pluginPath = "${rootPath}/plugins/${it}"
                java.srcDirs "${pluginPath}/java"
                jniLibs.srcDirs "${pluginPath}libs"
                res.srcDirs "${pluginPath}/res"
                //清单只能合并一个,所有插件的清单需要手动复制到对应的渠道里
            }
        }
    }
}
android.libraryVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "library-${buildType.name}-${CHANNEL_NAME}.aar"
    }
}
//拷贝清单文件
task copyDebugManifest(type: Copy) {
    from zipTree("build/outputs/aar/library-debug-${CHANNEL_NAME}.aar")
    include "AndroidManifest.xml"
    into "${outPutPath}\\${CHANNEL_NAME}\\debug"
}
//拷贝清单文件
task copyManifest(type: Copy) {
    dependsOn 'copyDebugManifest'
    from zipTree("build/outputs/aar/library-release-${CHANNEL_NAME}.aar")
    include "AndroidManifest.xml"
    into "${outPutPath}\\${CHANNEL_NAME}\\release"
}
//拷贝debug aar
task copyDebugSdk(type: Copy) {
    from "build/outputs/aar/"
    include "library-debug-${CHANNEL_NAME}.aar"
    into "${outPutPath}\\${CHANNEL_NAME}\\debug\\libs\\"
}
task copyReleaseSdk(type: Copy) {
    from "build/outputs/aar/"
    include "library-release-${CHANNEL_NAME}.aar"
    into "${outPutPath}\\${CHANNEL_NAME}\\release\\libs\\"
}
task deleteSdk() {
    delete "${outPutPath}\\${CHANNEL_NAME}\\debug"
    delete "${outPutPath}\\${CHANNEL_NAME}\\release"
}
//执行打包任务以及拷贝到外部
task assembleAndCopySdk() {
    dependsOn 'assemble'
    dependsOn deleteSdk
    dependsOn copyDebugSdk
    dependsOn copyReleaseSdk
    tasks.findByName('deleteSdk').mustRunAfter 'assembleMerger'
    tasks.findByName('copyDebugSdk').mustRunAfter 'deleteSdk'
    tasks.findByName('copyReleaseSdk').mustRunAfter 'deleteSdk'
    //导出所有外部引用
    String content = ""
    def deps = file("${channelPath}\\deps.gradle")
    deps.eachLine { line ->
        if (line != null)
            content += line + "\n"
    }
    plugins.each {
        deps = file("${rootPath}/plugins/${it}/deps.gradle")
        if(deps.exists()){
            deps.eachLine { line ->
                if (line != null)
                    content += line + "\n"
            }
        }
    }
    def dir = new File("${outPutPath}\\${CHANNEL_NAME}")
    def libraries = new File("${outPutPath}\\${CHANNEL_NAME}\\deps.gradle")
    dir.mkdir()
    if (libraries.exists())
        libraries.delete()
    if (!libraries.exists())
        libraries.createNewFile()
    libraries.text = content
}
dependencies {
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'androidx.annotation:annotation:1.0.0'
    testImplementation 'junit:junit:4.13.2'
    //noinspection GradleCompatible
//    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation files('libs/unity-classes.jar')
}
//    implementation 'com.github.pqpo:Log4a:1.4.2@aar'
    implementation fileTree(dir: "../channel/${CHANNEL_NAME}/libs/", include: ['*.jar'])
    plugins.each {
        implementation fileTree(dir: "${rootPath}/plugins/${it}/libs/", include: ['*.jar'])
    }
    implementation fileTree(dir: 'libs', include: ['*.jar'], exclude: ['unity-classes.jar'])
    compileOnly files('libs/unity-classes.jar')
    implementation('androidx.appcompat:appcompat:1.0.0') {
        force = true
    }
    //sdk所需依赖
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0'
    //firebase
    implementation(platform("com.google.firebase:firebase-bom:32.2.2"))
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.firebase:firebase-auth'
    // google
    implementation 'com.google.android.gms:play-services-auth:20.6.0'
    // facebook
    implementation 'com.facebook.android:facebook-login:16.2.0'
    implementation 'androidx.activity:activity-compose:1.3.1'
    // google 支付
    implementation 'com.android.billingclient:billing:6.0.1'
    implementation 'androidx.fragment:fragment:1.3.2'
    // adjust (V1.0.2新增)
    implementation 'com.adjust.sdk:adjust-android:4.33.5'
    implementation 'com.android.installreferrer:installreferrer:2.2'
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
    implementation 'com.google.android.gms:play-services-appset:16.0.2'
}