Android-编译后apk中存在Kotlin文件

Leg*_*man 5 android gradle dex kotlin android-proguard

我有一个同时包含Java和Kotlin文件的android项目。

编译后,当我解压缩生成的apk文件时,可以在其程序包路径中看到我项目的所有Kotlin文件。但是,Java文件不存在。

如何解决此问题,并阻止Koltin文件被添加到apk中?

谢谢

未压缩的APK内容的屏幕截图

我的build.gradle:

buildscript {
    ext.kotlin_version ='1.2.71'
    储存库{
        jcenter()
        maven {url'https://maven.fabric.io/public'}
        谷歌()
    }
    依赖项{
        classpath'com.android.tools.build:gradle:3.1.3'
        类路径“ org.jetbrains.kotlin:kotlin-gradle-plugin:$ kotlin_version”
    }
}

应用插件:“ com.android.application”
应用插件:“ kotlin-android”
应用插件:“ kotlin-android-extensions”
应用插件:“ kotlin-kapt”
应用插件:“ com.google.gms.google-services”

储存库{
    专家{url“ https://jitpack.io”}
    mavenCentral()
    jcenter()
    flatDir {
        dirs'libs'
    }
}

依赖项{
    实现fileTree(dir:'libs',包括:'* .jar')
    / *一堆依赖项* /
}

android {

    compileSdkVersion 27
    buildToolsVersion '27 .0.3'

    defaultConfig {

        minSdkVersion 19
        targetSdkVersion 27

        multiDexEnabled是

        setOutputPath applicationVariants,goevent [“ outputDir”],goevent [“ outputName”]
        setOutputPath testVariants,goevent [“ outputDir”],goevent [“ outputNameTest”]
    }

    dataBinding {
        启用=真
    }

    包装选项{
        排除“ META-INF / DEPENDENCIES”
        排除“ META-INF /许可”
        排除“ META-INF / NOTICE”
        排除“ main / AndroidManifest.xml”
        pickFirst'META-INF / maven / com.squareup.okio / okio / pom.properties'
        pickFirst'META-INF / maven / com.squareup.okio / okio / pom.xml'
    }

    sourceSets {
        主要{
            manifest.srcFile'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            asset.srcDirs = ['资产']
            jniLibs.srcDirs = ['libs']
        }

        androidTest.setRoot('tests')
        debug.setRoot('build-types / debug')
        release.setRoot('build-types / release')
    }

    signingConfigs {
        发布 {

            //获取签名文件
            文件signFile = rootProject.file('signing.properties')

            //读取签名属性文件
            属性properties =新的Properties()
            properties.load(新的FileInputStream(signFile))


            如果(properties ['signingKeystorePath'] &&属性['signingKeystorePassword'] &&属性['signingKeyAlias'] &&属性['signingKeyPassword']){
                字符串toolsPath = System.getenv(“ TOOLS”)
                if(toolsPath!= null){
                    storeFile文件(toolsPath +属性['signingKeystorePath'])
                    storePassword属性['signingKeystorePassword']
                    keyAlias属性['signingKeyAlias']
                    keyPassword属性['signingKeyPassword']
                }

            }其他{

                //如果签名文件不存在或未设置属性
                如果(project.hasProperty(“ signingKeystorePath”)){
                    storeFile文件(“ $ signingKeystorePath”)
                    storePassword签名密钥库密码
                    keyAlias签名
                    keyPassword签名KeyPassword
                }

            }
        }
    }
    lintOptions {
        abortOnError false
    }

    buildTypes {
        发布 {
            minifyEnabled是
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard.pro'
                    signingConfig signingConfigs.release
            zipAlignEnabled是
        }
    }

    dexOptions {
        jumboMode = true
    }
}

def setOutputPath(variant,dir,name){
    variants.all {variant->
        variant.outputs.all {输出->
            def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                    .relativize(rootDir.toPath())。toFile()

            output.outputFileName =新文件(“ $ relativeRootDir / $ dir”,名称)
        }
    }
}

Leg*_*man 5

终于找到了问题:

我不得不resources.srcDirs = ['src']从资料集中删除

这是复制src文件夹下包含的所有非Java文件