2017-07-10 2 views
2

J'essaie de générer une bibliothèque statique en utilisant CMAKE et Android Studio (2.3.2). Voici à quoi ressemble mon CMakeLists.txt. Je suis incapable de générer un fichier .a, cependant lorsque je change la bibliothèque en SHARED, le fichier CMakeTestModule.so est généré lorsque je fais "Build-> Rebuild Project". Est-il nécessaire pour moi d'ajouter/définir un drapeau pour construire des bibliothèques STATIC.CMake génère une bibliothèque SHARED mais pas une bibliothèque STATIC

cmake_minimum_required(VERSION 3.4.1) 
project (CMakeTestProject) 

include_directories(
    src/main/cpp/ 
) 

add_library(
    CMakeTestModule 
    STATIC 
    src/main/cpp/CMakeTestModule.cpp 
) 

add_executable(
    CMakeTestModule_test 
    src/main/cpp/CMakeTestModule_test.cpp 
) 

target_link_libraries(CMakeTestModule_test CMakeTestModule) 

C'est ce que mon build.gradle ressemble:

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 16 
    buildToolsVersion "25.0.0" 

    defaultConfig { 
     minSdkVersion 8 
     targetSdkVersion 8 

     externalNativeBuild { 
      cmake { 
       abiFilters 'armeabi' 
      } 
     } 
    } 

    externalNativeBuild { 
     cmake { 
      path 'CMakeLists.txt' 
     } 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 
+0

Cela pourrait être un problème Android NDK, non cmake. Jetez un coup d'œil à [BUILD_STATIC_LIBRARY] (https://developer.android.com/ndk/guides/android_mk.html) –

+0

Il existe plusieurs résultats lorsque vous recherchez ['gradle cmake build static library'] (https: // www.google.com/search?q=gradle+cmake+build+static+library) –

+0

@SteveLorimer J'utilise CMake pour construire mes trucs ndk, je ne sais pas comment utiliser BUILD_STATIC_LIBRARY dans CMake. – savi

Répondre

0

Je résolu ce problème en spécifiant la cible dans le build.gradle. Quelque chose comme ci-dessous. Puisque apk n'utilise que des fichiers .so, nous devons mentionner les cibles pour les bibliothèques statiques et les exécutables.

apply plugin: 'com.android.library' 

android { 
compileSdkVersion 16 
buildToolsVersion "25.0.0" 

defaultConfig { 
    minSdkVersion 8 
    targetSdkVersion 8 

    externalNativeBuild { 
     cmake { 
      abiFilters 'armeabi' 
     } 
     targets "CMakeTestModule_test", "CMakeTestModule" 
    } 
} 

externalNativeBuild { 
    cmake { 
     path 'CMakeLists.txt' 
    } 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 

}

+0

cela n'a pas fonctionné pour moi quand j'ai essayé de construire une bibliothèque statique – famagusta