2014-01-21 7 views
28

プロジェクト構造使ってAndroidのライブラリプロジェクトにファイルを.soを追加することができます。どのように私はGradleの0.7+

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

図書館プロジェクト がコンパイルJNI LIBSのフォルダを持っています

jniLibs.srcDirs = ['libs'] 

そして、私はhttps://android.googlesource.com/platform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/ndkSanAngeles/build.gradleしかし、AndroidのライブラリプロジェクトがproductFlavoursをサポートして、そのような組み立ては、Co」​​で失敗するなどしていない例でアプリごとにbuild.gradleのアンドロイド要素に以下を追加しようとしましたULDのAndroidライブラリプロジェクトにNDKサポートを追加する方法はあります「

productFlavors { 
    x86 { 
     ndk { 
      abiFilter "x86" 
     } 
    } 
    arm { 
     ndk { 
      abiFilters "armeabi-v7a", "armeabi" 
     } 
    } 
} 

をプロジェクトに引数[dghdhd]のための方法のproductFlavorsを()探してみませんか?このスレッドによると

答えて

55

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

は、私は次のように追加ライブラリプロジェクトの場合:

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

のlibsフォルダには、内部の「armeabi-v7a」というフォルダを持っていたし、このように私だけでは御馳走を働いたターゲットです。

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

+2

とてもシンプルで、私は2日間これで苦労していました。あなたは私を救った! –

+1

@ ferdy182、これはすばらしいニュースです!私はそれが助けてうれしい! –

+1

"armeabi"フォルダしか持たない古いプロジェクトをビルドしようとしたときに、.soファイルが見つかりませんでした。それらを "armeabi-v7a"フォルダにコピーすることでこの問題が解決されました。なぜそれが "armeabi"に戻らないのかは分かりませんが、それはGradleです! – pents90

0

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

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

+0

幸いにも、それは私の問題を解決するのに役立ちませんでした。修正はより簡単でした。 –

10

新規の例android experimental gradle plugin


要件:

  • のAndroidメーカー1.5+
  • のGradle-2.10
  • のGradle-実験:0.6.0-ALPHA5

1)あなた単純にすべての共有ネイティブライブラリを配置することができますn main/jniLibsフォルダー(デフォルト)。

プロジェクト構造

ルートフォルダ/アンドロイドプロジェクト

ルートフォルダ/ android_project /アプリ/ srcに/メイン/ jniLibs/x86の

ルートフォルダ/ android_project /アプリ/ srcに/メイン/ jniLibs/armeabi-v7a

ルートフォルダ/ android_project/app/src/main/jniLibs/...

Gradleがデバイスに自動的にアップロードします。

次に、ライブラリをアプリケーションにロードできます。

static { 
    System.loadLibrary("mylibrary"); 
} 

2)また、カスタムの場所にあるすべての共有のネイティブライブラリを置くことができます。

bin/android/Debugディレクトリへのパスを持つ例。

この場合、build.gradleファイルでライブラリの場所を手動で設定する必要があります。

プロジェクト構造

ルートフォルダ/アンドロイドプロジェクト

ルートフォルダ/ binに/アンドロイド/デバッグ/ jniLibs/x86の

ルートフォルダ/ binに/アンドロイド/デバッグ/ jniLibs/armeabi- v7a

ルートフォルダ/ binに/アンドロイド/デバッグ/ jniLibs/...

ルートフォルダ/ android_project /アプリ/ build.gradle

apply plugin: 'com.android.model.application' 

model { 
    android { 
     sources { 
      main { 
       jni { 
        source { 
         srcDirs = [] 
        } 
       } 

       jniLibs { 
        source { 
         srcDirs "/../../bin/android/Debug/jniLibs" 
        } 
       } 
      } 
     } 
    } 
} 
+0

これはもう分かりませんか? jniLibsは今では作成されていないと思いますか? – bph

+0

デフォルトはapp/libsだと思っていますが(100%は確実ではありません) – bph

1

私は、Android Studioの2.1で働いている、と私は私のbuild.gradleにソースやsourceSetsエントリを追加することが明らかな効果がなかったことがわかりました。代わりに、私は以下が必要であることを発見しました:

関連する問題