¿Cómo crear un Android Library Jar con gradle sin revelar públicamente el código fuente?
Me gustaría crear un Jar fuera de un proyecto de biblioteca de Android. Se configura de la siguiente manera:
ProjectName
\- lib
| \- lib
| \- armeabi
| \- libNativeFirst.so
| \- libNativeSecond.so
\- src
\- main
\- java
\- com.package.sdk
\- PackageSDK.java
Me gustaría que todo esto fuera empaquetado en un Jar, pero sin revelar el código fuente presente enPackageSDK.java
.
Configuré mibuild.gradle
archivo así
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
}
Cuando corrogradlew clean jar
en el directorio del proyecto, se crea un archivo jar enProjectName\build\libs
llamadoProjectName.jar
. Su estructura es la siguiente:
ProjectName.jar
\- lib
| \- armeabi
| \- libNativeFirst.so
| \- libNativeSecond.so
\- com
\- package
\- sdk
\- PackageSDK.java
Me gustaría para el compiladoPackageSDK.class
para ser incluido en lugar de laPackageSDK.java
archivo al ejecutar eljar
tarea. ¿Qué puedo cambiar para lograr esto?
Según la sugerencia de Ben Manes, cambié la configuración de lasourceSets
a lo siguiente:
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/../lib'
}
output {
classesDir 'build/classes'
resourcesDir 'build/javaResources'
}
}
}
Y eljar
Tarea a lo siguiente:
task jar(type: Jar) {
from android.sourceSets.main.output
}
Gradle ahora me está dando esta salida:
Could not find method output() for arguments [build_25r1m0a3etn5cudtt5odlegprd$_run_closure2_closure9_closure10_closure13@138532dc] on source set main.