当前位置: 首页 > 知识库问答 >
问题:

Android-Kotlin文件编译后出现在apk中

蔡理
2023-03-14

我有一个android项目,其中既有Java的文件,也有kotlin的文件。

编译后,当我解压缩生成的apk文件时,我可以在它们的包路径中看到我的项目的所有Kotlin文件。然而,Java的档案并不存在。

我怎样才能修复这个问题,并阻止Koltin文件被添加到apk中?

谢谢

我的建筑。Gradle:

buildscript {
    ext.kotlin_version = '1.2.71'
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.gms.google-services'

repositories {
    maven { url "https://jitpack.io" }
    mavenCentral()
    jcenter()
    flatDir{
        dirs 'libs'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    /* A bunch of dependencies */
}

android {

    compileSdkVersion 27
    buildToolsVersion '27.0.3'

    defaultConfig {

        minSdkVersion 19
        targetSdkVersion 27

        multiDexEnabled true

        setOutputPath applicationVariants, goevent["outputDir"], goevent["outputName"]
        setOutputPath testVariants, goevent["outputDir"], goevent["outputNameTest"]
    }

    dataBinding {
        enabled = true
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'main/AndroidManifest.xml'
        pickFirst 'META-INF/maven/com.squareup.okio/okio/pom.properties'
        pickFirst 'META-INF/maven/com.squareup.okio/okio/pom.xml'
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }

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

    signingConfigs {
        release {

            //Fetch the signing file
            File signFile = rootProject.file('signing.properties')

            //Read the signing properties file
            Properties properties = new Properties()
            properties.load(new FileInputStream(signFile))


            if (properties['signingKeystorePath'] && properties['signingKeystorePassword'] && properties['signingKeyAlias'] && properties['signingKeyPassword']) {
                String toolsPath = System.getenv("TOOLS")
                if(toolsPath != null) {
                    storeFile file(toolsPath + properties['signingKeystorePath'])
                    storePassword properties['signingKeystorePassword']
                    keyAlias properties['signingKeyAlias']
                    keyPassword properties['signingKeyPassword']
                }

            } else {

                //If the signing file doesn't exist or the properties are not set
                if (project.hasProperty("signingKeystorePath")) {
                    storeFile file("$signingKeystorePath")
                    storePassword signingKeystorePassword
                    keyAlias signingKeyAlias
                    keyPassword signingKeyPassword
                }

            }
        }
    }
    lintOptions {
        abortOnError false
    }

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

    dexOptions {
        jumboMode = true
    }
}

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

            output.outputFileName = new File("$relativeRootDir/$dir", name)
        }
    }
}

共有1个答案

红弘盛
2023-03-14

终于找到了问题所在:

我必须从源集中删除资源.srcdirs=['src']

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

 类似资料:
  • 问题内容: 我下载了APK Manager,可以解压缩APK文件。 但它只会解压缩它,不会将.smali文件反编译为.java。 可以将.smali反编译为.java吗? 问题答案: 不,APK管理器反编译 的文件导入和二进制到人类可读的XML。 序列(基于APK Manager 4.9)为 22, 以选择包,然后为 9, 以对其进行反编译。如果按1而不是9,则只需将其打开包装(仅在要交换.png

  • 在一些网站上,我读过“使用一些反编译程序反编译apk是可能的”。(即)从apk文件中获取源代码。 但我想保护我的代码。反编译后不显示加密算法代码或者不想反编译我的apk文件。那有可能吗?请你给点建议好吗?

  • 我在Android studio中创建了一个Android应用程序,并使用Kotlin作为编程语言 现在我的应用程序完成了,我想构建我的应用程序,但构建应用程序后,我的APK文件大小变为35mb<我的可绘制文件夹大小是2mb,我没有任何大文件,但为什么我的应用程序大小是35mb?! 为了生成测试apk版本,我使用了构建- 但是当我使用java语言时,这个大小是7mb!!! 我使用了这些依赖项: 我

  • 我使用以下链接中的说明从Eclipse导出项目并导入到Android Studio:http://developer.Android.com/sdk/installing/migrate.html 当我构建时,我有一个错误: 经过搜索,我找到了一个解决方案:添加 但我不明白为什么我会出现这个错误,为什么我必须应用那个修复程序。有人能解释吗?

  • 本文向大家介绍Android Studio编写AIDL文件后如何实现自动编译生成,包括了Android Studio编写AIDL文件后如何实现自动编译生成的使用技巧和注意事项,需要的朋友参考一下 在目录src/main 下新建了aidl 文件夹之后,在aidl文件夹中也创建了相同的包路径, 创建AIDL文件 XXX.aidl 如果XXX.aidl引用了一个java下的model例如引用了a.b.c

  • 我正在Android Studio将一个Java Android项目转换为Kotlin,但我遇到了一些问题。