Múltiples módulos nativos en Android Studio

Tengo una base de código C ++ que está actualmente configurado en Visual Studio (para ejecutar en Windows), con múltiples proyectos con interdependencias. Estoy tratando de llevarlo a Android Studio, para que funcione en Android. Estoy familiarizado con Visual Studio y C ++, pero bastante nuevo en Android Studio Gradle y CMake.

Mi (posiblemente equivocada) expectativa es tratar y tratar los proyectos de Android Studio como Visual Studio Solutions y Android Studio Módulos como Visual Studio Projects. Dado que mi base de código utiliza varios proyectos en Visual Studio, estoy tratando de crear múltiples módulos en Android Studio, cada uno con sus propios archivos build.gradle y CMakeLists.txt .

El problema es que no puedo obtener una sección de código (módulo AS) para vincular con el otro. Estoy compilando estas diferentes secciones como STATIC usando add_library() (pienso tener un módulo que crea una biblioteca SHARED , para cargar en Java).

Puedo obtener fácilmente el include_directories("../OtherModule/src/") para trabajar a través de include_directories("../OtherModule/src/") . Sin embargo, no puedo conseguir que vincular. No puedo encontrar el archivo target_link_libraries() o similar) al que enlazar (a través de target_link_libraries() o equivalente). Cuando extraigo el archivo .arr de un módulo dado, no veo ningún .so o cualquier cosa.

Me doy cuenta de que podría simplemente poner toda la base de código bajo un Módulo (usando una build.gradle y una CMakeLists.txt o una red de CMakeLists.txt usando add_subdirectory() ). No sé si esto está bien, o si tomaría más / menos tiempo para construir.

Estoy seguro de que podría haber varias maneras de configurar esto, y podría ser sólo una cuestión de preferencia. Toda la investigación que he hecho hasta ahora sólo ha encontrado estrictamente añadir código nativo al mismo módulo con código Java – hacer cosas básicas de puente nativo JNI. No he sido capaz de encontrar un solo artículo sobre Múltiples Módulos nativos enlazando juntos.

Espero que alguien con más experiencia con desarrollo nativo en Android pueda ayudarme. ¡Gracias!

TL: DR: Escenario simplificado: (Sin estar relacionado con el puente nativo de JNI) Tengo dos Módulos en Android Studio, ambos con sólo código nativo. Me gustaría tener cada módulo tiene su propio build.gradle y CMakeLists.txt , creando sus propias bibliotecas STATIC . Un módulo depende del otro y debe establecer los directorios correctos de inclusión y enlace. ¡¿Como hacer?! ¿Esto es correcto (o debería haber sólo un módulo con código nativo)?

Hice una pregunta relacionada aquí . Me parece que AS …

  1. … no vincula realmente la biblioteca-módulo final a menos que sea SHARED (permite "sub-bibliotecas" estáticas dentro del módulo); Considere la posibilidad de hacer la biblioteca final compartida – tendrá que System.loadLibrary() que específicamente en Java sin embargo.
  2. … no le permite instalar archivos en otros lugares (por ejemplo, desde su módulo nativo a su aplicación de Android). set_target_properties( jniwrapper PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../libnative/build/intermediates/cmake/${BUILD_TYPE}/obj/${ANDROID_ABI}/libnative.so ) recorriendo la biblioteca a través de set_target_properties( jniwrapper PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../libnative/build/intermediates/cmake/${BUILD_TYPE}/obj/${ANDROID_ABI}/libnative.so ) y estableciendo BUILD_TYPE en Build.gradle. No demasiado elegante.

En general, esto no parece ser un caso de uso recomendado en AS …

  • Acceda a los datos de activos APK de Android directamente en c ++ sin Asset Manager y copiando
  • Android: los sockets nativos no eliminan el modo de suspensión 3G en el primer intento
  • OpenGL en Android: ¿Algún conflicto al llamar a funciones de OpenGL en Java y C ++?
  • ¿Cómo puedo crear un borde diagonal en React Native?
  • Reaccionar nativo con Genymontion lanzando simultáneamente Excepción
  • Error de código nativo en libwebviewchromium.so
  • React-native run-android DeviceException No se pudo crear ADB Bridge
  • Herramientas de prueba de rendimiento para aplicaciones móviles nativas en iOS y Android
  • Cómo guardar la entrada en el calendario nativo (Android e iOS) en reaccionar nativo?
  • ¿Es posible crear elementos de interfaz de usuario con el NDK? - falta de especificaciones en documentos Android
  • Android: incluye funciones nativas de StageFright en mi propio proyecto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.