zoukankan      html  css  js  c++  java
  • 用NDK生成so给第三方用

     参考了https://blog.csdn.net/zi413293813/article/details/50074239 然后自己重新整理补充

    我用的ndk-r10d

    ndk下载地址http://developer.android.com/sdk/ndk/index.html

    eclipse 开发环境

    1、用eclipse创建一个android项目

    2、选中项目右键->Properties->Builders->New->选中Program 点击OK->各种配置文字太难描述直接上图

    配置了ndk-build 的路径还有刚刚创建的那个android项目

    打勾

    Specify Resources 浏览找到刚刚创建的android项目就可以了,项目配置就这些

    在src目录先创建一个class文件,内容如下

    public class JniClient {
        static public native String AddStr(String strA, String strB);
        static public native int AddInt(int a, int b);
    }
    

    找到JniClient.java(刚刚创建的那个类)所在位置,右键打开cmd或者powershell 执行命令javac JniClient.java

    在项进入到src磁盘目录右键打开cmd或者powershell 执行命令 javah com.example.mtest.JniClient (这个需要根据自己项目实际路径而定)

    这样就生成了com_example_mtest_JniClient.h 头文件内容就不展示了,最前面连接地址里面有

    然后手动创建一个com_example_mtest_JniClient.c 最前面连接地址里面有 ,编辑器有问题贴不出来

    把这个头文件和源文件剪切到 jni 目录(项目根目录下 没有就自己创建)

    在jni目录里面添加一个Android.m

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE :=_SRC_FILES := com_example_mtest_JniClient.c
    include $(BUILD_SHARED_LIBRARY)

    以及Application.mk

    #使用STL库
    APP_STL := gnustl_static
    #兼容老的语法,使一些错误降为警告
    APP_CPPFLAGS += -fpermissive
    #选择平台,如果都需要生成用空格隔开
    APP_ABI := armeabi armeabi-v7a 

    刷新项目就会在lib目录生成对应的 so 文件

    下面写一下如何使用刚刚生成的so库

    重新新建一个android 项目 我这里用的是cocos2d-x的一个游戏项目 

    把生成的so放到新的android项目的jni目录下

    在这个新项目Android.mk里面添加如下内容

     include $(CLEAR_VARS)
    LOCAL_MODULE := libTestNdk
    LOCAL_SRC_FILES := TestNdk/$(TARGET_ARCH_ABI)/libTestNdk.so
    include $(PREBUILT_SHARED_LIBRARY)

    LOCAL_STATIC_LIBRARIES += libTestNdk

    还不能直接使用,回到第一个创建的android项目 把JniClient.java这个文件打成一个jar包

    我是在src目录下powershell里面执行jar -cvf mtest.jar comexamplemtestJniClient.class

    生成mtest.jar包 ,不过bin目录里面好像有自动生成

    把这个jar包放入第二个项目lib里面,在appactivity里面添加如下代码

    然后在onCreate()方法里面调用

    在手机上运行项目可以看到如下输出

    .748: I/System.out(5703): ...abelmou...HelloWorld from JNI !

    说明调用成功,写得有点乱方便自己回顾

  • 相关阅读:
    消息队列之kafka
    注册中心ZooKeeper
    消息队列之RocketMQ集群部署
    消息队列之RocketMQ简介及单机部署
    消息队列之RabbitMQ
    消息队列简介
    debian10入门(切换root用户,更改网卡配置,及更新apt源配置)
    实体间的关系
    MySQL数据库的基础使用命令大全
    ReletiveLayout布局的一些常用属性
  • 原文地址:https://www.cnblogs.com/abelmou/p/8992176.html
Copyright © 2011-2022 走看看