當前位置:編程學習大全網 - 源碼下載 - android 怎麽把多個so文件編譯成jar

android 怎麽把多個so文件編譯成jar

壹***分為2步:

1.在Java中編寫要調用的靜態方法和需要加載的庫,並生成頭文件。

2.配置gradle

3.配置Android.mk文件和application.mk文件

下面壹步步的走:

首先需要在Java類中聲明要調用的方法,以及要加載的庫,我們在包下新建壹個jniUtil類,如下所示

[plain]?view plain?copy

public?class?jniUtil?{?

//要加載的庫,生成的庫格式為:lib+庫名.so?

?static{?System.loadLibrary("hello-jni");?}?

//要調用的本地方法,在c文件中該方法名稱格式為:java_包名_類名_方法名?

?public?static?native?String?stringFromJNI();?

}?

註意:在編譯時該類中不能有漢字,包括註釋,否則會出現編碼GBK的不可映射字符錯誤。

接下來就是利用external Tools生成頭文件.h,這裏可參考點擊打開鏈接

然後就會在main目錄下生成Jni文件夾,並且包含.h文件。下面就是編寫C文件,或者可以拷貝已經寫好的C文件放置在該jni文件夾中.

2.配置gradle

我們這裏不用gradle 去編譯,而是只讓他去加載已經生成的so庫,改用android.mk 去編譯(稍後配置android.mk)

在app的build.gradle 下的android 標簽下添加:

[plain]?view plain?copy

sourceSets?{?

main?{?

jni.srcDirs?=?[]//禁止gradle?自動編譯,使用已經編譯好的So庫?

jniLibs.srcDirs?=?['src/main/jniLibs','libs']//指向要使用的庫文件//的路徑,前邊的是自己項目的,後邊的是第三方的so?

}?

}?

從上面可以看出,我們生成的庫是放在

src/main/jniLibs

目錄下面的,那麽這個是如何配置呢?還是在該gradle下面配置ndk的編譯腳本,註意放在android標簽外面:

[plain]?view plain?copy

tasks.withType(JavaCompile)?{?

compileTask?->?compileTask.dependsOn?CopyToJniLibs?

}?

task?ndkBuild(type:?Exec,?description:?'Compile?JNI?source?via?NDK')?{?

Properties?properties?=?new?Properties()?

properties.load(project.rootProject.file('local.properties').newDataInputStream())?

def?ndkDir?=?properties.getProperty('ndk.dir')?

commandLine?"$ndkDir/ndk-build.cmd",?"NDK_PROJECT_PATH=$projectDir.absolutePath\\build",?"APP_BUILD_SCRIPT=$projectDir.absolutePath\\src\\main\\jni\\Android.mk",?"NDK_APPLICATION_MK=$projectDir.absolutePath\\src\\main\\jni\\Application.mk"?

//妳自己的mk文件目錄?

}?

在ndkbuild完成後把生成的so文件復制到jniLibs,這裏和上面配置的加載so文件路徑要壹致哦

[plain]?view plain?copy

task?CopyToJniLibs(type:?Copy,?dependsOn:?'ndkBuild',?description:?'copy?the?native?libs?to?jniLibs')?{?

from?fileTree(dir:?file(buildDir.absolutePath?+?'/libs'),?include:?'**/*.so')?

into?file('src/main/jniLibs')?

}?

新建Android.mk和application.mk,這裏我把Android.mk和application.mk放在jni文件夾下了,具體可以自己修改。默認生成的SO文件會在build下面的libs中,我們拷貝出來放到src/main/jniLibs下面。

3.配置Android.mk和Application.mk

  • 上一篇:sxe 註入問題
  • 下一篇:五A風景區都什麽標準?現在國內有多少個5A風景區?
  • copyright 2024編程學習大全網