apply plugin: 'com.android.application'

RES_PATH = RES_PATH.replace("\\", "/")
COCOS_ENGINE_PATH = COCOS_ENGINE_PATH.replace("\\", "/")

buildDir = "${RES_PATH}/proj/build/${project.name ==~ /^[_a-zA-Z0-9-]+$/ ? project.name : 'CocosGame'}"
android {
    compileSdkVersion PROP_COMPILE_SDK_VERSION.toInteger()
    buildToolsVersion PROP_BUILD_TOOLS_VERSION
    ndkPath PROP_NDK_PATH
    namespace NAME_SPACE

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        applicationId APPLICATION_ID
        minSdkVersion PROP_MIN_SDK_VERSION
        targetSdkVersion PROP_TARGET_SDK_VERSION
        versionCode 100
        versionName "1.0.0"

        externalNativeBuild {
            cmake {
                targets "cocos"
                arguments "-DRES_DIR=${RES_PATH}", "-DANDROID_STL=c++_static", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_NEON=TRUE"
            }
            ndk { abiFilters PROP_APP_ABI.split(':') }
        }
    }

    sourceSets.main {
        java.srcDirs "../src", "src"
        res.srcDirs "../res", 'res', "${RES_PATH}/proj/res"
        jniLibs.srcDirs "../libs", 'libs'
        manifest.srcFile "AndroidManifest.xml"
        assets.srcDirs "${RES_PATH}/data", "src/main/assets"
        jniLibs {
            // Vulkan validation layer
            // srcDir "${android.ndkDirectory}/sources/third_party/vulkan/src/build-android/jniLibs"
        }
    }

    externalNativeBuild {
        cmake {
            version "3.22.1"
            path "../CMakeLists.txt"
            buildStagingDirectory "${RES_PATH}/proj/build"
        }
    }

    signingConfigs {

        release {
            if (project.hasProperty("RELEASE_STORE_FILE") && !RELEASE_STORE_FILE.isEmpty()) {
                storeFile file(RELEASE_STORE_FILE)
                storePassword RELEASE_STORE_PASSWORD
                keyAlias RELEASE_KEY_ALIAS
                keyPassword RELEASE_KEY_PASSWORD
            }
        }
    }

    def appName = URLDecoder.decode("${PROP_APP_NAME}" , "UTF-8")

    buildTypes {
        release {
            debuggable false
            jniDebuggable false
            renderscriptDebuggable false
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            if (project.hasProperty("RELEASE_STORE_FILE")) {
                signingConfig signingConfigs.release
            }

            externalNativeBuild {
                cmake {
                    // switch HIDE_SYMBOLS to OFF to skip compilation flag `-fvisibility=hidden`
                    arguments "-DHIDE_SYMBOLS=ON"
                }
            }

            if (!Boolean.parseBoolean(PROP_IS_DEBUG)) {
                getIsDefault().set(true)
            }

            resValue  "string", "app_name", "${appName}"

            buildConfigField "String", "ATMOB_CENTRAL_APP_KEY", "\"$atmob_central_app_key\""
            buildConfigField "String", "GRAVITY_ACCESS_TOKEN", "\"$gravity_access_token\""
            buildConfigField "String", "TEST_CHANNEL", "\"$test_channel\""
            buildConfigField "String", "YIDUN_PRODUCT_ID", "\"$yidun_product_id\""
            buildConfigField "String", "YIDUN_REGISTER_BUSINESS_ID", "\"$yidun_register_business_id\""
            buildConfigField "String", "WECHAT_APP_ID", "\"$wechat_app_id\""
            buildConfigField "String", "ALIPAY_APP_ID", "\"$alipay_app_id\""
            buildConfigField "String", "PROD_SERVER_HOST", "\"$prod_server_host\""
            buildConfigField "String", "TEST_SERVER_HOST", "\"$test_server_host\""
        }

        debug {
            debuggable true
            jniDebuggable true
            renderscriptDebuggable true
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            if (project.hasProperty("RELEASE_STORE_FILE")) {
                signingConfig signingConfigs.release
            }

            externalNativeBuild {
                cmake {
                    // switch HIDE_SYMBOLS to OFF to skip compilation flag `-fvisibility=hidden`
                    arguments "-DHIDE_SYMBOLS=ON"
                }
            }

            if (!Boolean.parseBoolean(PROP_IS_DEBUG)) {
                getIsDefault().set(true)
            }

            resValue  "string", "app_name", "${appName}-debug"

            buildConfigField "String", "ATMOB_CENTRAL_APP_KEY", "\"$atmob_central_app_key\""
            buildConfigField "String", "GRAVITY_ACCESS_TOKEN", "\"$gravity_access_token\""
            buildConfigField "String", "TEST_CHANNEL", "\"$test_channel\""
            buildConfigField "String", "YIDUN_PRODUCT_ID", "\"$yidun_product_id\""
            buildConfigField "String", "YIDUN_REGISTER_BUSINESS_ID", "\"$yidun_register_business_id\""
            buildConfigField "String", "WECHAT_APP_ID", "\"$wechat_app_id\""
            buildConfigField "String", "ALIPAY_APP_ID", "\"$alipay_app_id\""
            buildConfigField "String", "PROD_SERVER_HOST", "\"$prod_server_host\""
            buildConfigField "String", "TEST_SERVER_HOST", "\"$test_server_host\""
        }
    }

    buildFeatures {
        buildConfig = true
    }

    configurations.configureEach {
        resolutionStrategy {
            // don't cache changing modules at all
            cacheChangingModulesFor 10, 'seconds'
        }
    }


    applicationVariants.configureEach { variant ->
        def date = new Date().format("YYMMddHHmmss")
        variant.outputs.configureEach {
            def fileName = "${defaultConfig.applicationId}" +
                    "-v${defaultConfig.versionName}" +
                    "-${variant.buildType.name}" +
                    "-${date}" +
                    ".apk"
            outputFileName = fileName
        }
    }
}

dependencies {
    implementation fileTree(dir: '../libs', include: ['*.jar', '*.aar'])
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    implementation fileTree(dir: "${COCOS_ENGINE_PATH}/cocos/platform/android/java/libs", include: ['*.jar'])
    implementation project(':libservice')
    implementation project(':libcocos')
    if (Boolean.parseBoolean(PROP_ENABLE_INPUTSDK)) {
        implementation 'com.google.android.libraries.play.games:inputmapping:1.1.0-beta'
        implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.10"
    }
    implementation "atmob.central:cocos-bridge:0.0.1-SNAPSHOT"
    implementation "androidx.constraintlayout:constraintlayout:2.1.4"
}
