1、eclipse項目遷移到android studio後so文件配置問題
android
一、app
android {
......
task copyNativeLibs(type: Copy) {
from fileTree(dir:
'libs'
, include:
'*/*.so'
) into
'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn
'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders =
new
HashSet()
pkgTask.jniFolders.add(
new
File(projectDir,
'build/native-libs'
))
println pkgTask.jniFolders
}
}
1.copyNativeLibs,他的做用就是把dir中的so文件拷貝的主項目(例如app)的build/native-libs目錄下;eclipse
2.compileTask.dependsOn copyNativeLibs 把1中的task依賴於編譯任務,這樣每次在編譯前,就是把1中的copyNativeLibs方法執行;
gradle
3.clean.dependsOn 'cleanCopyNativeLibs'這行腳本容易理解,把clean build/native-libs 依賴於gradlew clean;
ui
4.tasks.withType,在這塊腳本中須要注意理解兩點:code
a.以前咱們經過1把咱們須要的so文件都拷貝到主項目(app)的build/native-libs中;ip
b.jniFolders,個人理解是打包時默認的jni文件目錄。把默認的jniFolders修改爲咱們本身指定的目錄,即build/native-libs,從而so文件便可以被打入apk中。it
有關多module的so文件加載:io
多module項目,某個子moudle可能須要jni支持,一樣也面臨so文件打包問題。編譯
1.直接把全部子module的so文件都拷貝到主項目的libs中;
2.子module中的build.gradle一樣包含上述腳本,把build/native-libs修改爲主項目的絕對路徑;
3.修改copyNativeLibs,這裏既然作so文件的拷貝操做,那我直接把子module的dir加入,下面是對應的腳本;
android {
......
task copyNativeLibs(type: Copy) {
def libPath = project(
':lib'
).projectDir.absolutePath +
'/libs'
println libPath
from fileTree(dir:
'libs'
, include:
'*/*.so'
) into
'build/native-libs'
from fileTree(dir: libPath, include:
'*/*.so'
) into
'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn
'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders =
new
HashSet()
pkgTask.jniFolders.add(
new
File(projectDir,
'build/native-libs'
))
println pkgTask.jniFolders
}
}
說明:
a.project(':lib')中的lib是須要jni支持的子module,這裏書寫子module的具體名稱,能夠參照setttings.gradle;
b.libPath獲取到子moudle下存放so文件的libs絕對目錄;
c.多個子module一樣方法處理;
2、android studio新建項目so文件配置問題:
1.在「src/main」目錄中新建名爲「jniLibs」的目錄;
二、在「jniLibs」目錄中新建名爲「armeabi」的目錄;
3. 將so文件複製、粘貼到「armeabi」目錄內。