2016-12-19 8 views
3

Android Studio 2以降では、CMakeを使ってネイティブビルドスクリプトを書くことができます。そして、サポートされているすべてのアーチを自動的に作成します。これは素晴らしいことです。Android Studioがネイティブコード用に異なるアーチを構築する方法

ただし、インターネット上のすべてのライブラリソースコードがCMakeによってビルドされているわけではありません。それらのほとんどはまだ古いmakeシステムを使用しています。

私はmakeビルドシステムを使用しているライブラリを持っています。そして私は異なるarchsでビルドすることができました。 AndroidスタジオのCMakeビルドシステムに、どのバージョンのライブラリをリンクしたいのですか?

私はhttps://developer.android.com/ndk/guides/cmake.htmlをチェックしますが、変数のようなARCHはありません。

ライブラリをいくつかの場所にドロップするだけで、AndroidスタジオのCMakeがそれを受け取ることができますか?

+2

あなたが「のABIを指定します」というセクションを見ました:https://developer.android.com/studio/projects/add-native-code.html –

+0

は有望に見えます。ありがとう。 – davidshen84

答えて

1

ライブラリを各arch用にコンパイルしたので、それらをapp/src/main/jniLibs/{arch}に格納することができます(例:armeabi/armeabi-v7a/arm64-v8a )。あなたのアプリbuild.gradleへの投稿の

productFlavoursは、コンパイルバリアントを構成するために使用されます。この方法で、すでにコンパイルされたライブラリを適切にリンクすることができます。

android.ndk { 
     moduleName = "your_library_jni" 
     cppFlags.add("-fexceptions") 
     cppFlags.add("-std=c++11") 
     cppFlags.add("-I" + file("src/main/jni").absolutePath) 
     } 

android.productFlavors { 
     create("armeabi") { 
      ndk.with{ 
       abiFilters.add("armeabi") 

       File curDir = file('./') 
       curDir = file(curDir.absolutePath) 
       String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi/" 

       ldLibs.add(libsDir + "libyour_module.so") 

      } 
     } 
     create("armv7-v7a") { 
      ndk.with { 
       abiFilters.add("armeabi-v7a") 

       File curDir = file('./') 
       curDir = file(curDir.absolutePath) 
       String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi-v7a/" 

       ldLibs.add(libsDir + "libyour_module.so") 

      } 
     } 
     create("arm64-v8a") { 
      ndk.with{ 
       abiFilters.add("arm64-v8a") 

       File curDir = file('./') 
       curDir = file(curDir.absolutePath) 
       String libsDir = curDir.absolutePath + "/src/main/jniLibs/arm64-v8a/" 

       ldLibs.add(libsDir + "libyour_module.so") 

      } 
     } 
    } 
関連する問題