欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android NDK开发学习教程

程序员文章站 2022-05-25 15:49:57
使用ndk-build 工具进行交叉编译 重点需要 android.mk和application.mk 配合否则没法进行下一步 假如你已经搭建好ndk-build 工具的下载和环境的配置 下面进行一...

使用ndk-build 工具进行交叉编译
重点需要 android.mk和application.mk 配合否则没法进行下一步
假如你已经搭建好ndk-build 工具的下载和环境的配置
下面进行一些笔录

1.在需要调用native 方法的类中写native 方法如
:public class mainactivity extends appcompatactivity {
    public static   native  int cout(int a);//申明native 方法
    static {
    system.loadlibrary(“jnidemo”);//加载libjnidemo
}
    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        int cout = cout(5);//调用native
           }

}

2,生成头文件.h如 在app/src/main/java下执行

javah -jni 类全名

//第二部生成头文件
        //amituodembp:ndk_learn qundui$ cd app/src/main/java
//        amituodembp:java qundui$ javah -jni com.example.qundui.ndkonesampledemo.mainactivity
//        amituodembp:java qundui$
        // build 是在main 下

3 在main下创建jni 目录存放.h和.c文件.mk配置文件

copy 生成的头文件如:com.example.qundui.ndkonesampledemo.mainactivity.h
/* do not edit this file - it is machine generated */
#include 
/* header for class com_example_qundui_ndkonesampledemo_mainactivity */

#ifndef _included_com_example_qundui_ndkonesampledemo_mainactivity
#define _included_com_example_qundui_ndkonesampledemo_mainactivity
#ifdef __cplusplus
extern "c" {
#endif
/*
 * class:     com_example_qundui_ndkonesampledemo_mainactivity
 * method:    count
 * signature: (i)i
 */
jniexport jint jnicall java_com_example_qundui_ndkonesampledemo_mainactivity_count
  (jnienv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif
android.mk文件:
local_path := $(call my-dir)
  include $(clear_vars)
  local_module := jnidemo
  local_src_files :=jnidemo.c
  include $(build_shared_library)
application.mk文件:】
app_abi := all

app_platform := android-22
.c文件:
//
#include
#include 
jniexport jint jnicall java_com_example_qundui_ndkonesampledemo_mainactivity_count
  (jnienv * env, jclass cls, jint num){
  return num * num+200;
  }

4》在app/src/main/下执行ndk-build生成.so
5.   sourcesets{
        main {
            jni.srcdirs = []
            jnilibs.srcdirs = ['src/main/libs']
        }
    }
注意在android{}里面。