2016-05-25 1 views
0

L'extrait de code suivant semble être la réponse comment inclure les bibliothèques natives avec Android Studio:ce qui est la magie de nativeLibsToJar

task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') { 
    destinationDir file("$buildDir/native-libs") 
    baseName 'native-libs' 
    extension 'jar' 
    from fileTree(dir: 'libs', include: '**/*.so') 
    into 'lib/' 
} 

tasks.withType(Compile) { 
    compileTask -> compileTask.dependsOn(nativeLibsToJar) 
} 

Il semble emballer simplement le * .so dans * .jar. Mais je ne comprends vraiment pas:

  • Pourquoi est-il nécessaire d'envelopper dans un * .jar?
  • Lors de la modification de quelque chose dans mes bibliothèques natives, je peux voir les modifications prises en compte dans mon application, le processus de construction Gradle génère toujours "...: app: nativeLibsToJar UP-TO-DATE ...". Donc, je suppose que cette tâche n'est pas relancée. Mais quand cette tâche encapsule le * .so dans * .jar que comment est-il possible de les re-emballer sans réexécuter cette tâche?

Je suis reconnaissant pour toutes les explications :)

Répondre

0

C'est vraiment drôle - j'ai trouvé cela comme solution tant de fois:

task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') { 
    destinationDir file("$buildDir/native-libs") 
    baseName 'native-libs' 
    extension 'jar' 
    from fileTree(dir: 'libs', include: '**/*.so') 
    into 'lib/' 
} 

Mais il peut être supprimé car il ne fait rien utile (peut-être il l'a fait dans les anciennes versions de build).

Le vrai tour est fait par sourceSets.main.jniLibs.srcDir 'src/main/libs/' //integrate your libs from libs instead of default dir 'jniLibs