前言

1 环境 android studio2.3 , window系统

2 ndk https://dl.google.com/android/repository/android-ndk-r16-windows-x86_64.zip

3 采用android.mk编译方式

正文

1 正常新建一个android项目
2 右键项目选择Open Moduls Settings
  1)设定好ndk的路径

  

2)指定开启ndk

3 android新加如下文件

具体代码如下
    NdkJniUtils.java

package com.jni.utils;

/**
* Created by user on 2017/11/22.
*/
public class NdkJniUtils { static{
System.loadLibrary("hello-jni");
} public static native String stringFromJni();
}

 hello-jni.c

#include <string.h>
#include <jni.h> jstring
Java_com_jni_utils_NdkJniUtils_stringFromJni( JNIEnv* env,jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}

Android.mk 配置如下

  LOCAL_PATH := $(call my-dir)

  include $(CLEAR_VARS)

  LOCAL_MODULE := hello-jni
  LOCAL_SRC_FILES := hello-jni.c

  include $(BUILD_SHARED_LIBRARY)

Application.mk 配置如下

  APP_ABI := armeabi armeabi-v7a x86 mips

注意:其中如果想生成所有平台的so,可以写成
  APP_ABI := all

4 配置好build.gradle文件,在Android配置中添加如下配置

sourceSets{
main{
jniLibs.srcDirs "src/main/libs" // 指定so的路径
jni.srcDirs = [] // 禁止gradle自己去自动编译ndk,我们使用的方式是cmd中ndk-build方式
}
}

5 写完这些代码后,进入cmd,目录进入到我们的src/main/jni中,执行mk编译

  >>ndk-build

    

    编译完后,在src/main/libs目录中会看到我们生成的so文件

6 编写java层代码

  activity_main.xml布局文件

  

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"> <TextView
android:id="@+id/edv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" /> <Button
android:id="@+id/clickId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="clickBtn"/>
</LinearLayout>

MainActivity 类编写代码

package com.koo.ndkdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import com.jni.utils.NdkJniUtils; public class MainActivity extends AppCompatActivity { TextView ev1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ev1 = (TextView)findViewById(R.id.edv);
Button btn=(Button)findViewById(R.id.clickId);
btn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
String res= NdkJniUtils.stringFromJni();
ev1.setText(res);
}
});
}
}

完成后编译运行项目即可

最新文章

  1. 使用PowerShell 监控运行时间和连接情况
  2. Team Foundation Server 15 功能初探
  3. 【转】arcgis server site 快速恢复与重建
  4. Nginx下Redmine配置
  5. 无状态Web应用集成——《跟我学Shiro》
  6. 理解Socket编程【转载】
  7. C# 数据的加密解密
  8. 使用AngularJS构建大型Web应用
  9. Object-C 函数定义 -- 笔记
  10. mysql存储过程中使用临时表和游标
  11. .net c# 正则表达式 平衡组/递归匹配
  12. J2SE学习小结
  13. bootstrap标准模板
  14. javascript学习笔记(一):词法结构
  15. javascript之页面打印
  16. Linux ①
  17. as无法在vivo上安装程序解决
  18. win10 时间很烦
  19. [转载]AngularJS视图
  20. RocketMQ 安装

热门文章

  1. mac下protobuf配置记录
  2. Jmeter 常用函数(7)- 详解 __time
  3. WordCloud教程(上)
  4. Mybatis入门(三)------日志系统
  5. circos pipeline
  6. 图数据库对比:Neo4j vs Nebula Graph vs HugeGraph
  7. python官网打不开
  8. spring如何创建RESTful Service
  9. 【原创】探索云计算容器底层之Cgroup
  10. 轮廓线DP