Como criar um jar de biblioteca do Android com gradle sem revelar publicamente o código-fonte?
Eu gostaria de criar um Jar fora de um projeto de biblioteca do Android. Está configurado da seguinte maneira:
ProjectName
\- lib
| \- lib
| \- armeabi
| \- libNativeFirst.so
| \- libNativeSecond.so
\- src
\- main
\- java
\- com.package.sdk
\- PackageSDK.java
Eu gostaria que tudo isso fosse empacotado em um Jar, mas sem revelar o código fonte presente emPackageSDK.java
.
Eu configurei meubuild.gradle
arquivo assim:
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
}
Quando eu corrogradlew clean jar
no diretório do projeto, um arquivo Jar é criado emProjectName\build\libs
chamadoProjectName.jar
. Sua estrutura é a seguinte:
ProjectName.jar
\- lib
| \- armeabi
| \- libNativeFirst.so
| \- libNativeSecond.so
\- com
\- package
\- sdk
\- PackageSDK.java
Eu gostaria para o compiladoPackageSDK.class
para ser incluído em vez doPackageSDK.java
arquivo ao executar ojar
tarefa. O que posso mudar para conseguir isso?
Por sugestão de Ben Manes, eu mudei a configuração dosourceSets
para o seguinte:
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/../lib'
}
output {
classesDir 'build/classes'
resourcesDir 'build/javaResources'
}
}
}
E ajar
tarefa para o seguinte:
task jar(type: Jar) {
from android.sourceSets.main.output
}
Gradle agora está me dando esta saída:
Could not find method output() for arguments [build_25r1m0a3etn5cudtt5odlegprd$_run_closure2_closure9_closure10_closure13@138532dc] on source set main.