プロジェクト構造:
アプリプロジェクト->ライブラリプロジェクトに依存
ライブラリプロジェクトには、コンパイル済みのjni libsのフォルダがあります
jniLibs.srcDirs = ['libs']
そして、サンプルアプリ https://Android.googlesource.com/に従ってbuild.gradleのAndroid要素に以下を追加しようとしましたplatform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/ndkSanAngeles/build.gradle ただしAndroidライブラリプロジェクトはproductFlavoursをサポートしていないため、アセンブルは失敗します「プロジェクトの引数[dghdhd]のメソッドproductFlavors()が見つかりませんでした」
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
arm {
ndk {
abiFilters "armeabi-v7a", "armeabi"
}
}
}
Androidライブラリプロジェクトにndkサポートを追加する方法はありますか?
最終的には、製品フレーバーを使用する必要はありませんでした。
ライブラリプロジェクトの場合、以下を追加しました。
Android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
Libsフォルダーには「armeabi-v7a」と呼ばれるフォルダーがあり、これが私の唯一のターゲットであるため、うまく機能しました。
Ndkファイル(.so)は、Androidライブラリプロジェクトを使用しているプロジェクトAndroidプロジェクトに伝播されます。
新しい Android Experimental gradle plugin の例.
要件:
1)デフォルトでは、すべての共有ネイティブライブラリをmain/jniLibsフォルダーに単純に配置できます。
プロジェクト構造
ルートフォルダ/ Android project
ルートフォルダー/ Android_project/app/src/main/jniLibs/x86
ルートフォルダー/ Android_project/app/src/main/jniLibs/armeabi-v7a
ルートフォルダー/ Android_project/app/src/main/jniLibs/...
Gradleは自動的にそれらをデバイスにアップロードします。
次に、ライブラリをアプリケーションにロードできます。
static {
System.loadLibrary("mylibrary");
}
2)すべての共有ネイティブライブラリをカスタムの場所に置くこともできます。
bin/Android/Debugディレクトリへのパスを使用した例.
その場合、build.gradleファイルでライブラリの場所を手動で設定する必要があります。
プロジェクト構造
ルートフォルダ/ Android project
ルートフォルダー/ bin/Android/Debug/jniLibs/x86
ルートフォルダー/ bin/Android/Debug/jniLibs/armeabi-v7a
ルートフォルダー/ bin/Android/Debug/jniLibs/...
ルートフォルダー/ Android_project/app/build.gradle
apply plugin: 'com.Android.model.application'
model {
Android {
sources {
main {
jni {
source {
srcDirs = []
}
}
jniLibs {
source {
srcDirs "/../../bin/Android/Debug/jniLibs"
}
}
}
}
}
}
このスレッドによると:
https://groups.google.com/forum/#!topic/adt-dev/nQobKd2Gl_8
.soファイルをライブラリプロジェクトに追加できないことは、プラグインのv0.8で修正されたバグでした。
私はAndroid Studio 2.1で作業していますが、source.sourcesetsエントリをbuild.gradleに追加しても明らかな効果はないことがわかりました。代わりに、次のものが必要であることがわかりました。
Android {
defaultConfig {
ndk {
moduleName "libmp3lame"
}
}