簡體   English   中英

如何在我的C ++ Android Gradle項目中添加“something.a”庫文件?

[英]How do I add a “something.a” library file to my C++ Android Gradle project?

我有一個名為somelibrary/lib/c++/armeabi-v7a/libsomelibrary.a 如何將其添加到Android項目中的Gradle文件中?

顯然該庫還包含somelibrary/include/somelibrary/*.h下的標題, somelibrary/include/somelibrary/*.h很簡單,因為我可以添加一行cppFlags.addAll(['-I' + file('somepath/somelibrary/include')])到我的build.gradle

但是我如何將.a文件添加到項目中,以便鏈接適用於所有二進制格式,不僅是armeabi-v7a而且還有arm64-v8a,armeabi和x86? 該庫包含所有這些二進制格式的.a文件版本。 除此之外,它還包含兩個不同的c ++標准庫的版本:“c ++”和“gnustl”。 我沒有庫的源代碼。

它取決於gradle版本使用的內容,如果是build:gradle-experimental:0.7.3'

在app build.gradle文件中:

  • 首先定義庫存儲庫

     repositories { libs(PrebuiltLibraries) { your_lib { headers.srcDir "${your_lib_path}/include" binaries.withType(StaticLibraryBinary) { staticLibraryFile = file("${your_lib_path}/your_library.a") } } } } 
  • 定義你的ndk模塊

      android.ndk { moduleName = "your_ndk_module" platformVersion = 9 toolchain "gcc" debuggable true cppFlags.add("-fexceptions") cppFlags.add("-std=c++11") stl = "gnustl_static" } 
  • 定義庫源

     android.sources { main { jni { dependencies { library "your_lib" linkage "static" } } } } 
  • 定義您的產品口味

      android.productFlavors { create("arm") { ndk.abiFilters.add("armeabi") ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString()) ndk.ldLibs.addAll(["your_lib"]) } create("arm7") { ndk.abiFilters.add("armeabi-v7a") ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString()) ndk.ldLibs.addAll(["your_lib"]) } create("arm8") { ndk.abiFilters.add("arm64-v8a") ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString()) ndk.ldLibs.addAll(["your_lib"]) } } 

整碼:

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

def your_lib_path = file(project(':app').projectDir).absolutePath + "/your_lib_path"
model {
    repositories {
        libs(PrebuiltLibraries) {
            your_lib {
                headers.srcDir "${your_lib_path}/include"
                binaries.withType(StaticLibraryBinary) {
                    staticLibraryFile = file("${your_lib_path}/your_library.a")
                }
            }
      }
  }
  //define your ndk-module: 
  android.ndk {
       moduleName = "your_ndk_module"
       platformVersion = 9
       toolchain "gcc"
       debuggable true
       cppFlags.add("-fexceptions")
       cppFlags.add("-std=c++11")
       stl = "gnustl_static" // Which STL library to use: gnustl or stlport
       }
  //define your android sources
  android.sources {
       main {
           jni {
               dependencies {
                   library "your_lib" linkage "static"
               }
           }
       }
   }

//define your product flavours: 
android.productFlavors {
        // for detailed abiFilter descriptions, refer to "Supported ABIs" @
        // https://developer.android.com/ndk/guides/abis.html#sa
        create("arm") {
            ndk.abiFilters.add("armeabi")
            ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString())
            ndk.ldLibs.addAll(["your_lib"])

        }
        create("arm7") {
            ndk.abiFilters.add("armeabi-v7a")
            ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
            ndk.ldLibs.addAll(["your_lib"])

        }
        create("arm8") {
            ndk.abiFilters.add("arm64-v8a")
            ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString())
            ndk.ldLibs.addAll(["your_lib"])
        }
    }

  }

您必須根據您的gradle版本修改gradle文件。

希望這可以幫助。

干杯。

垂發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM