【问题标题】:Trying to run Python on Android - With cmake尝试在 Android 上运行 Python - 使用 cmake
【发布时间】:2017-10-03 20:46:51
【问题描述】:

我知道这是一个长镜头。

因此,使用这个GitHub Python 项目,我目前能够在带有实验版 gradle 的 Android 构建上运行 Python。我们正在尝试升级到主线 gradle 和最新的 Android Studio,因此我们正在尝试使用 cMake 构建我们所有的 NDK 东西。我们拥有一切以便它运行,但是一旦我们启动 Python,它就会说它无法导入 _socket。

我们在项目中拥有所有相同的资产和 Python,我们已经包含了所有共享库,以便编译和链接。有什么想法是我无法导入套接字的东西吗?我假设这是一个它试图导入和运行的 c 模块,但无法理解它找不到它会有什么不同。

cmake_minimum_required(VERSION 3.4.1)
project(workflow)

set(CMAKE_ANDROID_STL_TYPE gnustl_shared)
set(CMAKE_SYSTEM_VERSION 23)

# configure directory variables for use throughout this file
set(distribution_dir ${CMAKE_SOURCE_DIR}/../jniLibs)
set(jni_src_dir ${CMAKE_SOURCE_DIR}/../jni)

# set all our include directories (header locations)
include_directories(${jni_src_dir}/asr/inc
                    ${jni_src_dir}/ext/android/audioin/inc
                    ${jni_src_dir}/asr
                    ${jni_src_dir}/python
                    ${jni_src_dir}/pdd
                    ${jni_src_dir}/pdd/os
                    ${jni_src_dir}
)

# define the 3rd party libraries to include in this project
# this includes all Nuance stuff, and our custom built python lib
add_library(libgenericdca SHARED IMPORTED)
set_target_properties(libgenericdca PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libgenericdca.so)
add_library(libvocon3200_sem SHARED IMPORTED)
set_target_properties(libvocon3200_sem PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon3200_sem.so)
add_library(libpal_audio SHARED IMPORTED)
set_target_properties(libpal_audio PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libpal_audio.so)
add_library(libpal_core SHARED IMPORTED)
set_target_properties(libpal_core PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libpal_core.so)
add_library(libpython35m SHARED IMPORTED)
set_target_properties(libpython35m PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libpython3.5m.so)
add_library(libvocon3200_asr SHARED IMPORTED)
set_target_properties(libvocon3200_asr PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon3200_asr.so)
add_library(libvocon3200_base SHARED IMPORTED)
set_target_properties(libvocon3200_base PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon3200_base.so)
add_library(libvocon3200_gram2 SHARED IMPORTED)
set_target_properties(libvocon3200_gram2 PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon3200_gram2.so)
add_library(libvocon3200_platform SHARED IMPORTED)
set_target_properties(libvocon3200_platform PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon3200_platform.so)
add_library(libvocon3200_pron SHARED IMPORTED)
set_target_properties(libvocon3200_pron PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon3200_pron.so)
add_library(libvocon3200_sem3 SHARED IMPORTED)
set_target_properties(libvocon3200_sem3 PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon3200_sem3.so)
add_library(libvocon_ext_heap SHARED IMPORTED)
set_target_properties(libvocon_ext_heap PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon_ext_heap.so)
add_library(libvocon_ext_stream SHARED IMPORTED)
set_target_properties(libvocon_ext_stream PROPERTIES IMPORTED_LOCATION ${distribution_dir}/${ANDROID_ABI}/libvocon_ext_stream.so)

# set various C and CXX(++) flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNDEBUG")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions")

# recursive wildcard search to find all the right cpp and c source files to compile
file(GLOB_RECURSE source_files ${jni_src_dir}/asr/*.cpp
                               ${jni_src_dir}/ext/android/audioin/src/*.c
                               ${jni_src_dir}/asr/*.cpp
                               ${jni_src_dir}/pdd/*.cpp
                               ${jni_src_dir}/pdd/os/*.cpp
                               ${jni_src_dir}/*.cpp)
SET( workflow_source ${source_files})

# finally, set up our workflow library and attach the source files above (this causes cmake to compile the sources)
add_library(workflow SHARED ${workflow_source})
# set our workflow library to be C++
SET_TARGET_PROPERTIES (workflow PROPERTIES LINKER_LANGUAGE CXX)

# lastly, set to link against the 3rd party libs above
target_link_libraries(workflow
                      android
                      libgenericdca
                      libvocon3200_sem
                      libpal_audio
                      libpal_core
                      libpython35m
                      libvocon3200_asr
                      libvocon3200_base
                      libvocon3200_gram2
                      libvocon3200_platform
                      libvocon3200_pron
                      libvocon3200_sem3
                      libvocon_ext_heap
                      libvocon_ext_stream
                      log
                      atomic)

【问题讨论】:

  • 发布项目结构和 Android CMAKE
  • Marcos,我已经发布了结构和cmake。感谢您的观看。
  • @MarcosVasconcelos 不确定您是否看到我添加到帖子中。任何帮助将不胜感激。
  • 我做了,短期内没有发现任何问题,但此编辑将使其他人能够提供帮助

标签: android python android-studio gradle cmake


【解决方案1】:

Android Studio 3 和 Gradle 4.1 大约在同一时间发布。现在通过使用这两种方法,我可以毫无问题地构建和运行 Python。

我假设 Gradle 4.1 版本有一些更改解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 2021-10-02
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多