此次主要以如下两个方案为主:
(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.so
include $(CLEAR_VARS)
LOCAL_MODULE := crystax
LOCAL_SRC_FILES := $(CRYSTAX_PATH)/sources/crystax/libs/$(TARGET_ARCH_ABI)/libcrystax.so
LOCAL_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。。。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。