Wie erstelle ich ein Android Library Jar mit gradle, ohne den Quellcode öffentlich preiszugeben?

Ich möchte ein Jar aus einem Android-Bibliotheksprojekt erstellen. Es wird folgendermaßen eingerichtet:

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

Ich möchte, dass all dies in einem Jar verpackt wird, ohne jedoch den Quellcode preiszugeben, der in enthalten istPackageSDK.java.

Ich habe meinebuild.gradle Datei wie folgt:

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
}

Wenn ich rennegradlew clean jar Im Projektverzeichnis wird eine Jar-Datei in erstelltProjectName\build\libs namensProjectName.jar. Die Struktur ist wie folgt:

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

Ich hätte gerne für die zusammengestelltPackageSDK.class enthalten sein anstelle derPackageSDK.java Datei beim Ausführen derjar Aufgabe. Was kann ich ändern, um dies zu erreichen?

Bearbeiten:

Per Vorschlag von Ben Manes änderte ich die Konfiguration dersourceSets Zu dem Folgendem:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
        resources {
            srcDir 'src/../lib'
        }
        output {
            classesDir 'build/classes'
            resourcesDir 'build/javaResources'
        }
    }
}

Und dasjar Aufgabe zu Folgendem:

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

Gradle gibt mir jetzt folgende Ausgabe:

Could not find method output() for arguments [build_25r1m0a3etn5cudtt5odlegprd$_run_closure2_closure9_closure10_closure13@138532dc] on source set main.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage