在没有Android Studio的情况下为Android创建(Cmake)C / C ++库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在没有Android Studio的情况下为Android创建(Cmake)C / C ++库相关的知识,希望对你有一定的参考价值。

我的目标是创建一个用C / C ++制作的外部库,我可以在我的android项目中导入它。

我知道如何导入,我知道如何使用JNI,Cmake等在项目内部用C / C ++创建库。但这不是我的目标。

为此,我使用小步骤,首先使用简单的库:

gmath.c

#include "gmath.h"

#if defined(__GNUC__) && __GNUC__ >= 4
#define GMATH_EXPORT __attribute__((visibility("default")))
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
#define GMATH_EXPORT __attribute__((visibility("default")))
#else
#define GMATH_EXPORT
#endif

GMATH_EXPORT unsigned gpower(unsigned n) {
    return 44;
}

gmath.h

#ifndef __POWER_HPP__
#define __POWER_HPP__
/*
 * return pow(2, n)
*/
#ifdef __cplusplus
extern "C"
#endif // __cplusplus
       unsigned gpower(unsigned n);

#endif //__POWER_HPP__

我正在使用创建库:cmake -DCMAKE_TOOLCHAIN_FILE= /Users/vcanato/Library/Android/sdk/cmake/3.6.4111459/android.toolchain.cmake -DCMAKE_MAKE_PROGRAM= /Users/vcanato/Library/Android/sdk/ndk-bundle/ -DANDROID_ABI="arm64-v8a"

CMake的

cmake_minimum_required(VERSION 3.4.1)

set(CMAKE_VERBOSE_MAKEFILE on)

set(CMAKE_TOOLCHAIN_FILE "/Users/vcanato/Library/Android/sdk/cmake/3.6.4111459/android.toolchain.cmake")
set(ANDROID_NDK "/Users/vcanato/Library/Android/sdk/ndk-bundle/")

add_library(gmath STATIC src/gmath.c)

set(distribution_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../distribution")
set_target_properties(gmath
                  PROPERTIES
                  ARCHIVE_OUTPUT_DIRECTORY
                  "${distribution_DIR}/gmath/lib/${ANDROID_ABI}")

问题是,当我使用lipo -info libgmath.aby终端时,它会显示不同的ABI:

enter image description here

如何使用权限参数将此外部库构建到android?

答案

使用来自ndk的cmake工具链,而不是sdk:

cmake -DCMAKE_TOOLCHAIN_FILE= /Users/vcanato/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake  -DCMAKE_MAKE_PROGRAM= /Users/vcanato/Library/Android/sdk/ndk-bundle/ -DANDROID_ABI="arm64-v8a"

以上是关于在没有Android Studio的情况下为Android创建(Cmake)C / C ++库的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下为Android中的TextView设置不同的字体[重复]

Android studio导入项目时的问题(Re-download dependencies and sync project (requires network))

如何使用Android Studio解决抖动中的gradle错误?

如何在没有 android studio 的情况下签署 android apk

我可以使用其他软件而不是 android studio 来运行 react native 应用吗

markdown 在没有Android Studio的情况下运行Android Emulator