此次主要以如下两个方案为主:
(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简单调试过程中遇到的问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)