web-dev-qa-db-ja.com

gradle 0.7+を使用して.soファイルをAndroidライブラリプロジェクトに追加するにはどうすればよいですか

プロジェクト構造:

アプリプロジェクト->ライブラリプロジェクトに依存

ライブラリプロジェクトには、コンパイル済みの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サポートを追加する方法はありますか?

34
Alec Holmes

最終的には、製品フレーバーを使用する必要はありませんでした。

ライブラリプロジェクトの場合、以下を追加しました。

Android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }        
}

Libsフォルダーには「armeabi-v7a」と呼ばれるフォルダーがあり、これが私の唯一のターゲットであるため、うまく機能しました。

Ndkファイル(.so)は、Androidライブラリプロジェクトを使用しているプロジェクトAndroidプロジェクトに伝播されます。

66
Alec Holmes

新しい Android Experimental gradle plugin の例.


要件:

  • Android Studio 1.5+
  • gradle-2.10
  • gradle-experimental:0.6.0-alpha5

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"
                    }
                }
            }
        }
    }
}
11
Maks

このスレッドによると:

https://groups.google.com/forum/#!topic/adt-dev/nQobKd2Gl_8

.soファイルをライブラリプロジェクトに追加できないことは、プラグインのv0.8で修正されたバグでした。

0
Scott Barta

私はAndroid Studio 2.1で作業していますが、source.sourcesetsエントリをbuild.gradleに追加しても明らかな効果はないことがわかりました。代わりに、次のものが必要であることがわかりました。

Android {
    defaultConfig {
        ndk {
            moduleName "libmp3lame"
        }
    }
0
Jerry Agin