Android JNI adolescente Cmake (estudio de Android)

origen

La vida no es sólo el presente, sino también la poesía y la distancia. Si eres un novato y quieres convertirte en un gran dios admirado por miles de personas, entonces también podrías fijarte una pequeña meta primero, por ejemplo, vivirla durante 200 años primero y luego pedir prestado otros 500 años del cielo. Bueno, cuando lo escuché por primera vez, mi corazón se estremeció sin parar, como si nos tuviéramos en la vida anterior, pero en esta vida hemos esperado mucho, mucho tiempo. El guión de operación multiplataforma, estilo simple, cmake en la adolescencia, vigorosa vitalidad y vitalidad, la gente no puede evitar sentirse fascinada por él.

introducir

¿Qué es Cmake? El gigante Baidu dijo:
CMake es una herramienta de instalación multiplataforma que puede describir la instalación (proceso de compilación) de todas las plataformas con oraciones simples. Puede generar varios archivos MAKE o archivos de proyecto, y puede probar las funciones compatibles de C++, de forma similar a la creación automática en UNIX. CMake puede compilar, crear, generar adaptadores (contenedores) y compilar en cualquier orden. CMake admite compilaciones en el lugar (archivos binarios y código fuente en el mismo árbol de directorios) y compilaciones fuera de lugar (archivos binarios en otros directorios), por lo que es fácil compilar desde el mismo árbol de directorios de código fuente Construya varios archivos binarios . CMake también admite la construcción de bibliotecas estáticas y dinámicas. El nombre "CMake" es la abreviatura de "marca multiplataforma".
En pocas palabras, para nosotros, es generar así.

Preparación

Para cmake, el soporte llegó un poco tarde y no comenzó hasta después de la versión 2.2. Por lo tanto, si tiene una versión anterior de as, actualícela. Si tiene algún inconveniente, comuníquese con el servicio de atención al cliente de Google. Una vez completada la actualización, abra SDKManager y todavía hay algunos complementos pequeños que deben instalarse. Por ejemplo, el complemento cmake, no puede instalarlo si no lo instala. Si, si dice si, lo siento, no hay un si aquí. Por ejemplo, el complemento NDK, en palabras oficiales, el kit de desarrollo nativo, le permite usar código C y C++ para Android y proporciona muchas bibliotecas de plataforma. Por ejemplo, complemento LLDB, código nativo de depuración, opcional, recomendado.
Consulta el mapa de situación
La imagen de arriba está tomada del documento del sitio web oficial, verifique los elementos requeridos de forma independiente. Si te resulta molesto, revísalos todos con un clic y espera pacientemente durante tres días y tres noches. Te apoyaré con todas mis manos y pies.

comienza el viaje

Murió antes de dejar al maestro, ah bah, esto, esto, volvamos al tema y comencemos nuestro viaje de hola jni. Un objetivo (el proyecto admite cmake), dos caminos. Para uno de los accesos directos, cree un nuevo proyecto y marque la casilla de verificación Incluir compatibilidad con C++. Por este camino, no hay nada que explicar, siguiente paso, siguiente paso.
Incluir casilla de verificación de compatibilidad con C++
El otro es apoyar cmake en proyectos existentes en varios pasos.
Paso 1. Cree un directorio bajo el directorio src/main y asígnele el nombre cpp. Este nombre es arbitrario, siempre que te guste. Coloque el código que debe importarse en el directorio creado, no sea aleatorio aquí y no se emocione.
Paso 2. Cree un script de compilación de CMake, un archivo de texto sin formato, llamado CMakeLists.txt, este nombre tiene un formato fijo, no se permite el temperamento. En cuanto a dónde colocar este archivo, depende de usted.
mi elección
Paso 3. En el archivo build.gradle en el módulo de la aplicación, proporcione soporte para cmake.

android{
    ...
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }
}

La primera configuración declara que el método Native Build es cmake y especifica la ruta del script cmake.

android{
    ...
    defaultConfig{
      ...
      externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
            }
        }
    }
}

Yo, no te lo pierdas cuando pases. La segunda configuración establece las condiciones para la compilación de cmake, como el estándar c11++. Lo mismo es externalNativeBuild, aquí está el dominio defaultConfig y la ruta cmake es el dominio de Android. A veces pienso, por qué no combinar los dos en uno, y hay que escribirlo dos veces, lo cual es un dolor de cabeza, y no lo entiendo aquí.

La clave del viaje, chacer configuración

La documentación de cmake, E-text, hace que las personas se emborrachen y sean incapaces de liberarse. Hay tan pocas API, que son más importantes.
Importante 1. add_library, generar lib. Para nosotros, System.loadLibrary("xxx"), donde xxx es nuestra lib. Los ejemplos son los siguientes:

# 创建一个 lib,静态 or 动态,可创建多个
add_library( # lib名称
             JniDemo

             # lib类型
             SHARED

             # .c/cpp目录
             jni_dynamic.cpp )

Importante 2. set_target_properties, que se usa para usar la biblioteca integrada, como .a. Los ejemplos son los siguientes:

# 添加自己的 lib 库
add_library( libHello
             SHARED
             # 由于.a 已经属于已经构建好的库,使用 IMPORTED 标志,告诉 cmake 不需要编译了
             IMPORTED )

set_target_properties(
                    #名称
                    libHello

                    # 指定要定义的参数.
                    PROPERTIES IMPORTED_LOCATION

                    # 导入 lib 的路径
                    ${CMAKE_SOURCE_DIR}/sources/${ANDROID_ABI}/libHello.a)

Importante 3. find_library, encuentra lib. Los ejemplos son los siguientes:

# 搜索 NDK 指定 lib
find_library( # lib 路径变量的名称。
              log-lib

              # 查找指定 lib 名称
              log )

Importante 4. target_link_libraries, vincule todas las librerías para generar nuevas librerías, los ejemplos son los siguientes:

# 链接库
target_link_libraries( # 指定目标 lib
                       JniDemo

                       # 自己的 lib
                       libHello

                       # NDK log lib  //这里放 find 的路径 ${log-lib} 也是可以
                       log )

Hablemos de estos pocos por el momento, básicamente debería ser casi suficiente. Si es así, no dude en consultar la documentación de cmake, creo que le gustará. Hay una cosa que mencionar aquí, con respecto a los cuatro puntos anteriores, dos de ellos son los más importantes. El punto clave 1 es generar lib y construir un puente entre java y c/c++. El punto clave 4 es vincular todas las bibliotecas para crear una biblioteca ejecutable completa. Estos dos básicamente pueden resolver el problema. En cuanto a los dos puntos clave redundantes, en aras de una estructura más clara, es simplemente intuitivo.

Comparte la alegría del viaje.

En este punto, jni ha llegado a su fin. En cuanto a lo que pensé antes, puede considerarse como un final feliz y gratificante. La razón por la que tomo jni tan en serio es porque estoy dispuesto y me gusta. Sin duda, sería gratificante si pudiera usar esto a cambio de mi conocimiento y comprensión de jni. Si no, no tengo nada que lamentar.
Se adjunta un ticket de github para llevarlo a experimentar la inmensidad del mundo

Supongo que te gusta

Origin blog.csdn.net/youyi300200/article/details/73477654
Recomendado
Clasificación