Android StudioはどうやってNDKと一体化しますか?
テキスト https://baidumap.wordpress.com/2014/12/25/android-studioどのようにndkと一体化しますか
nativeライブラリ(.soファイル)をあなたのAPKパッケージに統合します。
以前の方法は.soを.jarのカバンに入れます。今は簡単です。
Src/main/ディレクトリの下で、jniLibsディレクトリを作成して、対応するABIサブディレクトリ(x 86、mips、armeabi-v 7 a、armeabi)を作成します。最後に、対応するsoファイルを対応するディレクトリに入れてください。soファイルはすべてappleにまとめられます。
jniLibsというディレクトリがあなたに合わない場合(あなたが作成する可能性があります。そしてファイルを他のところに置いてください。)、あなたはbuild.gradleの中で位置を指定できます。
潔癖症の人は、各アーキテクチャのために単独でAPKを生成するのが好きです。そうすると、APKの体積は比較的小さいです。
abilifilterという属性を使うことができます。この属性はデフォルトではallに設定されています。すべてのプラットフォームのです。そして、全部appkに包装します。
build.gradleのandroidの項目の下にいくつかのものを追加します。
http://www.flakor.cn/2014-02-07-198.html
http://www.nsdev.org/blog/2014/01/01/including-native-libraries-in-your-apk
http://stackoverflow.com/questions/21096819/jni-and-gradle-in-android-studio
nativeライブラリ(.soファイル)をあなたのAPKパッケージに統合します。
以前の方法は.soを.jarのカバンに入れます。今は簡単です。
Src/main/ディレクトリの下で、jniLibsディレクトリを作成して、対応するABIサブディレクトリ(x 86、mips、armeabi-v 7 a、armeabi)を作成します。最後に、対応するsoファイルを対応するディレクトリに入れてください。soファイルはすべてappleにまとめられます。
jniLibsというディレクトリがあなたに合わない場合(あなたが作成する可能性があります。そしてファイルを他のところに置いてください。)、あなたはbuild.gradleの中で位置を指定できます。
android {
...
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
}
}
モジュールディレクトリの下のbuild.gradleで、プロジェクトディレクトリの下のbuild.gradleにはandroid{”という項目がありません。潔癖症の人は、各アーキテクチャのために単独でAPKを生成するのが好きです。そうすると、APKの体積は比較的小さいです。
abilifilterという属性を使うことができます。この属性はデフォルトではallに設定されています。すべてのプラットフォームのです。そして、全部appkに包装します。
build.gradleのandroidの項目の下にいくつかのものを追加します。
android{
...
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
mips {
ndk {
abiFilter "mips"
}
}
armv7 {
ndk {
abiFilter "armeabi-v7a"
}
}
arm {
ndk {
abiFilter "armeabi"
}
}
fat
}
}
異なるアーキテクチャのために異なるバージョン番号を設定します。import java.util.regex.Pattern
android {
...
defaultConfig{
versionCode getVersionCodeFromManifest()
}
...
productFlavors {
x86 {
versionCode Integer.parseInt("6" + defaultConfig.versionCode)
ndk {
abiFilter "x86"
}
}
mips {
versionCode Integer.parseInt("4" + defaultConfig.versionCode)
ndk {
abiFilter "mips"
}
}
armv7 {
versionCode Integer.parseInt("2" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi-v7a"
}
}
arm {
versionCode Integer.parseInt("1" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi"
}
}
fat
}
}
def getVersionCodeFromManifest() {
def manifestFile = file(android.sourceSets.main.manifest.srcFile)
def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
def matcher = pattern.matcher(manifestFile.getText())
matcher.find()
return Integer.parseInt(matcher.group(1))
}
dk-buildを呼び出しますか?もしあなたのプロジェクトディレクトリの下にjni/ディレクトリがあれば、buildシステムはndk-buildを呼び出して自動的に生成します。soファイルの現在の実装は、jniディレクトリの下のAndroid.mkというmakefileを無視して、自動的に新しいプロジェクトを作成します。これは本当に便利です。しかし、大工事にとっては、Makefileが提供する機能が必要です。build.gradleファイルで禁止できます。android{
...
sourceSets.main.jni.srcDirs = [] //disable automatic ndk-build call
}
参考資料http://www.flakor.cn/2014-02-07-198.html
http://www.nsdev.org/blog/2014/01/01/including-native-libraries-in-your-apk
http://stackoverflow.com/questions/21096819/jni-and-gradle-in-android-studio