Android studio JNI开发的三种方式

                                                     记录
第一种




                  第一步: 创建natice本地方法
                  第二步: 在工程App模块目录下创建jni文件夹
                  第三步: 在jin文件夹中创建.c结尾的c文件,编写c代码,在c语言中定义在Java代码中创建的本地方法(natice方法)
                    ,要按照jni的规范定义方法(Java_包名_类名_natice方法名,其中包名中的点用_代替)
                  第四步: 在jni文件夹中创建Android.mk文件,文件内容如下
                  LOCAL_PATH := $(call my-dir)


                  include $(CLEAR_VARS)


                  LOCAL_MODULE    := hello  #指定生成的库名 lib库名.so
                  LOCAL_SRC_FILES := hello.c #指定要编译的C语言源文件  多个空格排开

                  include $(BUILD_SHARED_LIBRARY) #指定生成库类型(静态库  动态库  独立程序) 动态库
                  第五步: 在src文件夹下创建Application.mk,内容如下
                  APP_ABI := all  #指定生成库平台
                  第六步: 编译c代码生成so库,到c代码所在的目录里面按住shift点击鼠标右键,
                    选中在此处打开命令窗口(首先你要把ndk-build配置到环境变量中),执行ndk-build,
                    会自动生成Application.mk配置的so库
                  第七步: 在App模块下配置jinLibs的路径执行libs
                      sourceSets{
                    main{
                                        jniLibs.srcDirs=[“libs”]
                                      }
                                    }
                   第八步: 静态代码块加载
                    Static{
                                            System.laodLibrany(“hello”)
                                  }
                  第九步:运行
第二种  






    第一步: 创建natice本地方法
    第二步: 选中APP模块点击鼠标依次选择new->folder->JNI folder->finish
会在main目录下生成一个jni文件夹
    第三步: 在jin文件夹中创建.c结尾的c文件,编写c代码,在c语言中定义在Java代码中创建的本地方法(natice方法),
    要按照jni的规范定义方法(Java_包名_类名_natice方法名,其中包名中的点用_代替)
    第四步: 在模块的build.gradle deflautConfig标签中配置库名和指定生成的平台
      ndk{
      moduleName “hello”//生成的库名
      abiFilters “armeabi”,”armeabi-v7a”,”x86”//生成的平台
      }
    第五步: 静态代码块加载
Static{
             System.laodLibrany(“hello”)
        }
    第六步:运行
第三种(Cmake)as版本2.2之后才可以使用




    第一步: 创建natice本地方法
第二步:在main下面创建cpp文件夹,再在cpp文件夹中穿件c源文件
按jni规范编写被java调用的方法
第三步:创建CMakelists.txt文件,里面配置了生成的库名和连接的库名还有c代码的路径(CMakelists.txt生成方式
    ,要新建一个项目一定要选中include c++ suppot,选中之后创建的工程中就会有CMakelists.txt文件,
    并且还有Google给出的例子)
第四步: 选中模块点击鼠标右键,选中link c++ progect with gradle之后弹出Cmake对话框,选择CMake方式,
    再找到模块下生成的CMakeLists.txt之后ok
    如果报错了检查CMakeLists.txt是否配置错了,如果没有报错就添加成功了,会在build.gradle生成externalNativeBuild标签
第五步:配置生成的so库平台,在deflautConfig标签下面创建externalNativeBuild标签
      externalNativeBuild{
    cmake{
        abiFilters “armeabi”,”armeabi-v7a”,”x86”//生成的平台
        }
      }
    配置完成用静态代码块的方式加载so库
        Static{
           System.laodLibrany(“hello”)
        }
可能出现的错误




    1, No implementation found for
意思是函数没有实现,
                            1,检查c中的方式是否正确(按jni规范)
2,是否静态加载了库,库名是否写错


    2, > Error: Your project contains C++ files but it is not using a supported native build system.
    Consider using CMake or ndk-build integration with the stable Android Gradle plugin:
大概意思是你的ndk不是最新的
1,下载一个最新版本的ndk
2,在gradle.properties中配置
Android.useDeprecatedNdk=true(允许使用过时ndk)









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值