美文网首页
Android JNI调用c语言

Android JNI调用c语言

作者: zjl20 | 来源:发表于2021-10-27 15:42 被阅读0次

    配置NDK环境
    1.下载 建议不要最新版可能有坑


    77B366DB-431F-455F-8DFC-CA5A6D72DDDF.png

    export NDK_HOME="/Users/zjl20/Library/Android/sdk/ndk/21.0.6113669"
    export PATH=$PATH:$NDK_HOME
    3.ndk-build验证环境 如下成功


    20171016164034434.png

    然后参考这几篇文章吧

    https://blog.csdn.net/baidu_34045013/article/details/78994516
    https://blog.csdn.net/qq_37858386/article/details/70820881
    https://blog.csdn.net/yin1031468524/article/details/79888063
    https://blog.csdn.net/niuba123456/article/details/96484961

    注意2点
    第一 使用javah生成对应.h头文件
    需要编译的是.class文件 .class文件位置如下图
    先build整个工程 得到build目录下面的.class文件

    E2EA23B2-F17A-49CB-A70D-99416E86A9C9.png

    编译命令javah -jni com.example.administrator.ndk_crypto.Crypto

    第二 生成so文件命令ndk-build报错 类似如下

    Android NDK: The armeabi ABI is no longer supported. Use armeabi-v7a.
    Android NDK: NDK Application 'local' targets unknown ABI(s): armeabi
    Android NDK: Please fix the APP_ABI definition in C:/Users/yinjb/AppData/Local/Android/Sdk/ndk-bundle/build//../build/core/default-application.mk

    说明armeabi 不支持了 改成armeabi-v7a 改如下2个地方

    application.mk中的
    APP_CFLAGS += -Wno-error=format-security
    APP_ABI := armeabi-v7a
    APP_PLATFORM := android-19
    APP_ALLOW_MISSING_DEPS=true

    build.gradle中的
    ndk {
    moduleName "Crypto"
    abiFilters "armeabi-v7a"
    }

    so 文件存私密数据,且防止 so文件未知应用盗用
    https://www.cnblogs.com/VindyLeong/p/5363667.html

     有时候我们需要在客户端 存放一些 保密的数据,比如 服务端的IP 端口,接口的地址,授权的key 等等,如果我们直接写在java中,别人反编译就能看到,那么我们可以把这些数据 存在  so文件中,这样别人就不可能会看到了,顺便 so里面验证 app的签名 来防止别人盗用so文件,     
    

    你的签名文件不会被别人拿到 也就拿不到你的签名 就拿不到你放在so文件中的所有东西
    ( 服务端的IP 端口,接口的地址,授权的key 等等)

    相关文章

      网友评论

          本文标题:Android JNI调用c语言

          本文链接:https://www.haomeiwen.com/subject/xtlpaltx.html