2016-05-25 13 views
0

Der folgende Codeausschnitt scheint die Antwort zu sein, wie native Bibliotheken mit Android Studio enthalten:was ist die Magie der 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) 
} 

Es scheint einfach die .so in * .jar * zu packen. Aber ich verstehe es wirklich nicht:

  • Warum ist es notwendig, es in eine * .jar wickeln?
  • Wenn ich etwas in meinen nativen Bibliotheken ändere, kann ich sehen, dass die Änderungen in meiner Anwendung wirksam werden. Auch der Gradle-Erstellungsprozess gibt immer "...: app: nativeLibsToJar UP-TO-DATE ..." aus. Ich nehme an, dass diese Aufgabe nicht erneut ausgeführt wird. Aber wenn diese Aufgabe die * .so in * .jar umschließt, als wie ist es möglich, sie neu zu wickeln, ohne diese Aufgabe erneut auszuführen?

Ich bin dankbar für jede Erklärung :)

Antwort

0

das wirklich komisch - ich fand diese als Lösung so oft:

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/' 
} 

Aber es kann entfernt werden, da es tut nichts nützlich (vielleicht in älteren Build-Versionen).

Der eigentliche Trick ist durch sourceSets.main.jniLibs.srcDir 'src/main/libs/' //integrate your libs from libs instead of default dir 'jniLibs

getan