• strongswan开源客户端项目排错运行


    1、引言

            开源项目不少人都听说过,并且对于许多人来说开源项目似乎代表着某种高大上的深奥东西,但其实开源项目没有想象中这么难,只要仔细琢磨,理清楚逻辑,那么开源项目其实也和你平常写的项目差不多,无非就是耦合度更高一些罢了。在开源项目中其实改写不是最难的一块,如何让项目正确运行起来才是关键,这里就以strongswan开源客户端为例,带大家一起把这个项目运行起来。

    2、项目简单介绍

            strongswan是基于安卓开发的VPN开源客户端程序,目前已经实现了最新版本的ikev2VPN隧道通信技术的支持,双证书验证加上本地密码的多重数据校验方式,保证了数据的更安全传输,稳定性也堪称业界顶尖,是目前深受推崇的安卓VPN客户端之一。

    3、主要问题

            在这个项目导入后主要遇见的问题就是ndk的配置和静态链接库的添加,这里我是直接使用已经编译好的静态链接库,由于strongswan客户端的静态链接库使用的编译环境和方式比较复杂,windows系统中无法编译成功,所以使用已经编译好的库上手更快,但是如果要更改底层核心功能,那就必须在linux系统上配置相关环境进行编译,使用到的资源放在下面网盘中,请自取,文件一个G左右。

    1. 链接:https://pan.baidu.com/s/1cBTOLesZU93MXnmne2IcgQ?pwd=bd5o
    2. 提取码:bd5o
    3. 复制这段内容后打开百度网盘手机App,操作更方便哦

    4、操作步骤

    4.1、导入项目配置NDK路径

            从网盘中下载项目,将压缩包解压,解压后的文件夹中android.zip字样的压缩包就是项目源码,将其放在合适位置,打开为一个单独的项目,待加载好各项数据后在local.properties文件中配置NDK路径,ndk版本请使用和我相同的版本,并用我提供的NDK替换本地同名ndk,这个操作很关键,不这样做无法运行项目。配置后ndk路径后同步一下。如下图所示:

    4.2、添加后缀

            在app目录下的build.gradle文件中两个NDK命令行调用那里添加.cmd文件后缀,操作完保存同步一下,如下图所示:

    4.3、添加静态库

            在下载的文件夹中把静态库复制粘贴在项目中,如下图所示:

    4.4、修改Android.mk文件

            复制下方内容,在jni目录下找到Android.mk文件,把里面的内容全部替换从下面代码块中的内容

    1. LOCAL_PATH := $(call my-dir)
    2. APP_ALLOW_MISSING_DEPS :=true
    3. include $(CLEAR_VARS)
    4. # copy-n-paste from Makefile.am
    5. LOCAL_SRC_FILES := \
    6. android_jni.c \
    7. backend/android_attr.c \
    8. backend/android_creds.c \
    9. backend/android_fetcher.c \
    10. backend/android_dns_proxy.c \
    11. backend/android_private_key.c \
    12. backend/android_scheduler.c \
    13. backend/android_service.c \
    14. charonservice.c \
    15. kernel/android_ipsec.c \
    16. kernel/android_net.c \
    17. kernel/network_manager.c \
    18. vpnservice_builder.c
    19. ifneq ($(strongswan_USE_BYOD),)
    20. LOCAL_SRC_FILES += \
    21. byod/imc_android_state.c \
    22. byod/imc_android.c
    23. endif
    24. # build libandroidbridge -------------------------------------------------------
    25. LOCAL_C_INCLUDES += \
    26. $(strongswan_PATH)/src/libipsec \
    27. $(strongswan_PATH)/src/libcharon \
    28. $(strongswan_PATH)/src/libstrongswan
    29. ifneq ($(strongswan_USE_BYOD),)
    30. LOCAL_C_INCLUDES += \
    31. $(strongswan_PATH)/src/libimcv \
    32. $(strongswan_PATH)/src/libtncif \
    33. $(strongswan_PATH)/src/libtnccs \
    34. $(strongswan_PATH)/src/libtpmtss \
    35. $(strongswan_PATH)/src/libtls
    36. endif
    37. LOCAL_CFLAGS := $(strongswan_CFLAGS) \
    38. -DPLUGINS='"$(strongswan_CHARON_PLUGINS)"'
    39. ifneq ($(strongswan_USE_BYOD),)
    40. LOCAL_CFLAGS += -DPLUGINS_BYOD='"$(strongswan_BYOD_PLUGINS)"'
    41. endif
    42. LOCAL_MODULE := libandroidbridge
    43. LOCAL_MODULE_TAGS := optional
    44. LOCAL_ARM_MODE := arm
    45. LOCAL_PRELINK_MODULE := false
    46. LOCAL_LDLIBS := -llog
    47. LOCAL_SHARED_LIBRARIES := libstrongswan libipsec libcharon
    48. ifneq ($(strongswan_USE_BYOD),)
    49. LOCAL_SHARED_LIBRARIES += libimcv libtncif libtnccs libtpmtss
    50. endif
    51. include $(BUILD_SHARED_LIBRARY)

    4.5、配置gradle的jdk版本

            在下图中所示位置修改gradle的jdk配置为jdk11,没有就再安装一个。

    5、最终运行效果

     6、后续修改建议

            如果要研究源码,直接把不同位置分别注释掉,查看效果,这样就能分析出哪里才是关键源码。

  • 相关阅读:
    PHP和Mysql前后端交互效果实现
    android 在后台任务栏隐藏应用程序
    保险代理人快速提升展业,应该从什么方向入手?
    如何制作 GitHub 个人主页
    PCB板的技术详解和叠构剖析
    你好GPT-4o——对GPT-4o发布的思考与看法
    OpenCV-Python学习(13)—— OpenCV 多边形填充与绘制(cv.fillPoly、cv.polylines)
    掌握苏宁API,一键获取商品详情,解锁无尽商业可能
    springboot项目获取包下有RestController注解的class
    bash调试方法总结
  • 原文地址:https://blog.csdn.net/qq_56819189/article/details/136112107