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

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

(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.

https://blog.csdn.net/rationalgo/article/details/107773025 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。。。

9、CMake直接编译so可能会导致:

java.lang.UnsatisfiedLinkError: Bad JNI version returned from JNI_OnLoad in "XXXXXXXXX": 0

10、遇到Android studio 出现WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 1 in。。。类似警告,参考如下解决:

https://blog.csdn.net/jiao_mrswang/article/details/79820228

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值