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

如何使用gradle创建一个Android库Jar而不公开泄露源代码?

景令秋
2023-03-14
ProjectName
    \- lib
    |   \- lib
    |       \- armeabi
    |           \- libNativeFirst.so
    |           \- libNativeSecond.so
    \- src
        \- main
            \- java
                \- com.package.sdk
                    \- PackageSDK.java

我设置了build.gradle文件,如下所示:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            resources {
                srcDir 'src/../lib'
            }
        }
    }
}

task jar(type: Jar) {
    from android.sourceSets.main.allSource
}

当我在项目目录中运行gradlew clean Jar时,将在projectname\build\libs中创建一个名为projectname.Jar的Jar文件。其结构如下:

ProjectName.jar
    \- lib
    |   \- armeabi
    |       \- libNativeFirst.so
    |       \- libNativeSecond.so
    \- com
        \- package
            \- sdk
                \- PackageSDK.java

在执行jar任务时,我希望包含已编译的packagesdk.class文件,而不是packagesdk.java文件。我可以改变什么来实现这一点?

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
        resources {
            srcDir 'src/../lib'
        }
        output {
            classesDir 'build/classes'
            resourcesDir 'build/javaResources'
        }
    }
}
task jar(type: Jar) {
    from android.sourceSets.main.output
}

Gradle现在给我的输出是:

在源集Main上找不到参数[build_25r1m0a3etn5cudtt5odlegprd$_run_closure2_closure9_closure10_closure13@138532dc]的方法output()。

共有1个答案

公良鸿禧
2023-03-14

注:答案经过编辑。请参阅下文07/28/2014更新。

这是我最终想出的一个解决方案。可能有更好的办法可用,但我还没有找到。

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            resources {
                srcDir 'src/../lib'
            }
        }
    }
}

task clearJar(type: Delete) {
    delete 'build/libs/ProjectName.jar'
}

task makeJar(type: Copy) {
    from('build/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'ProjectName.jar')
}

makeJar.dependsOn(clearJar, build)

运行gradlew makejar将在build/libs目录中创建一个projectname.jar。这个罐子的结构是这样的:

ProjectName.jar
    \- lib
    |   \- armeabi
    |       \- libNativeFirst.so
    |       \- libNativeSecond.so
    \- com
        \- package
            \- sdk
                \- PackageSDK.class
task clearJar(type: Delete) {
    delete 'build/outputs/ProjectName.jar'
}

task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('build/outputs/')
    include('classes.jar')
    rename ('classes.jar', 'ProjectName.jar')
}
 类似资料:
  • 问题内容: 我正在使用gradle构建的开源项目。我想生成一个(project)-sources.jar文件,可以将其加载到我的IDE(IntelliJ IDEA)中并通过该项目进行调试。我知道如何生成文件(如果可以生成的话)。 我浏览了该项目可用的gradle任务,但没有一个可以生成source jar文件。 为该项目生成源jar文件的最简单方法是什么? 将源添加到包含已编译的类文件的jar文件

  • 我正在与一个开源项目一起工作,这个项目是用Gradle构建的。我想生成一个(project)-sources.jar文件,我可以将该文件加载到我的IDE(IntelliJ IDEA)中,并通过项目进行调试。我知道如何加载文件,如果我可以生成它。 我查看了该项目的可用gradle任务,没有一个生成sources jar文件。 为这个项目生成sources jar文件的最简单的方法是什么? 将源代码添

  • 你知道我该怎么做吗?

  • 我使用以下步骤文件创建了gradle项目的jar库(即没有主类)- 这是在没有主类的情况下构建jar的正确方法吗?因为当我尝试将其导入另一个Gradle项目时,我会出错。假设jar文件名为test。罐子 我将jar添加到src/libs/test.jar 内置。我添加了gradle依赖项实现文件树(dir:'libs',include:['*.jar']) 右键单击测试。震击器- 文件- 仍在获取

  • 我有一个多模块Spring-Boot应用程序的问题。 我有一个用于服务的模块,核心模块。和一个用于视图相关类的模块,即Web-Module。这两个都在父模块中,在父模块中我添加了依赖项,如“spring-boot-starter”,这两个模块都可以使用。 现在谈到问题: 我希望使用嵌入式Tomcat运行Web模块,并将核心模块作为Web模块中的依赖项。 在其他Spring项目中,我只需要包含mav