记录一次Android jni方式调用python简单调试过程中遇到的问题

记录一次Android jni方式调用python简单调试过程中遇到的问题,第1张

概述此次主要以如下两个方案为主:(1)Android与Python爱之初体验https://www.jianshu.com/p/aba8a1ae783e(2)Android平台的Python——JNI方案(二)http://www.coder55.com/article/8963 或者 https://blog.csdn.net/yingshukun/article/details/78571884 1、Android选择DNK出现“ND

此次主要以如下两个方案为主:

(1)AndroID与Python爱之初体验

https://www.jianshu.com/p/aba8a1ae783e

(2)AndroID 平台的Python——JNI方案(二)

http://www.coder55.com/article/8963 或者 https://blog.csdn.net/yingshukun/article/details/78571884

 

1、AndroID选择DNK出现“NDK does not contain any platforms”可以用如下方案解决

https://blog.csdn.net/hiphopxiao/article/details/112220228

选择低版本NDK

2、编译过程中遇到缺少crystax依赖编译不过,在androID.mk中加入

# Include libcrystax.soinclude $(CLEAR_VARS)LOCAL_MODulE := crystaxLOCAL_SRC_fileS := $(CRYSTAX_PATH)/sources/crystax/libs/$(TARGET_ARCH_ABI)/libcrystax.soLOCAL_EXPORT_CFLAGS := -I $(CRYSTAX_PATH)/crystax/include/include $(PREBUILT_SHARED_liBRARY)

3、编译过程中遇到x86编译不过,如果是缺少IEeefp.h依赖,可以注释掉pyport.h中的325行即可解决编译问题。

#ifdef HAVE_IEEEFP_H
#include <IEeefp.h>  /* needed for 'finite' declaration on some platforms */
#endif

改为:

#ifdef HAVE_IEEEFP_H
//#include <IEeefp.h>  /* needed for 'finite' declaration on some platforms */
#endif

4、pyatomic.h编译不过的问题,可参考如下链接修改:

https://bugs.python.org/msg321697

typedef struct _Py_atomic_address {
    _Atomic voID * _value;
} _Py_atomic_address;

改为

typedef struct _Py_atomic_address {
    _Atomic (voID *) _value;
} _Py_atomic_address;

5、androID studio 4.1.2, gradle 4.0.1和6.1.1,ndk版本19,minsdk 14.

build.gradle中加入

sourceSets {    main {        jnilibs.srcDirs = ['src/main/libs']    }}

6。参考原文所参考的项目https://github.com/joaoventura/pybridge补全AssetExtractor类的代码。

7、参考原文所参考的项目https://github.com/joaoventura/pybridge

jni-test.c中

snprintf(paths, sizeof(paths), "%s:%s/stdlib.zip", pypath, pypath);

改为:

snprintf(paths, sizeof(paths), "%s:%s/stdlib.zip:%s/modules", pypath, pypath, pypath);

8、将test.py、stdlib.zip(crystax中的sources\python\3.5\libs)和modules(crystax中的sources\python\3.5\libs)拷贝到asserts下的pothon中,否则可能会导致出现如下类似log:

Py_Initialize()出错,可能的log,AndroID 5和以下:

 A/libc: Fatal signal 6 。。。

AndroID 6以上:

出现 A/libc: Fatal signal 11。。。

 

总结

以上是内存溢出为你收集整理的记录一次Android jni方式调用python简单调试过程中遇到的问题全部内容,希望文章能够帮你解决记录一次Android jni方式调用python简单调试过程中遇到的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1037143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存