01 android ndk入门实例之android.mk编译
前言
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);
}
});
}
}
完成后编译运行项目即可
01 android ndk入门实例之android.mk编译的更多相关文章
- Android NDK入门实例 计算斐波那契数列一生成jni头文件
最近要用到Android NDK,调用本地代码.就学了下Android NDK,顺便与大家分享.下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码.以及比较本地代码 ...
- Android NDK入门实例 计算斐波那契数列二生成.so库文件
上一篇文章输生成了jni头文件,里面包含了本地C代码的信息,提供我们引用的C头文件.下面实现本地代码,再用ndk-build编译生成.so库文件.由于编译时要用到make和gcc,这里很多人是通过安装 ...
- android NDK入门 windows下安装cygwin
一.Android NDK环境简介 Android NDK 是运行于Android 平台上的Native Development Kit 的缩写. Android 应用开发者可以通过NDK 调用C 或 ...
- Android NDK 入门与实践
NDK 是什么 NDK 全称 Native Development Kit,可以让您在 Android 应用中调用 C 或 C++ 代码的工具. NDK 好处 1.NDK 可以生成 .so 文件, 方 ...
- Xamarin android SwipeRefreshLayout入门实例
android SwipeRefreshLayout 是实现的效果就是上滑下拉刷新ListView 获取其他控件数据.基本上每个App都有这种效果.Google提供了一个官方的刷新控件SwipeRef ...
- android -------- NDK 入门指南
NDK介绍 原生开发工具包 (NDK) 是一组可让您在 Android 应用中利用 C 和 C++ 代码的工具. 可用以从您自己的源代码构建,或者利用现有的预构建库. NDK 不适用于大多数初学的 A ...
- Windows下搭建Android NDK开发环境及命令行编译
首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...
- Android NDK学习(二):编译脚本语法Android.mk和Application.mk
一.Android.mk Android.mk分为一下几部分: LOCAL_PATH:= $(call my-dir), 返回当前文件在系统中的路径,Android.mk文件开始时必须定义该变量. i ...
- Android NDK开发实例教程
WINDOWS系统+ Eclipse + NDK+Android 最近开始学习Android平台开发,Android还没有玩转,Java也是刚入门,这又要开始在Android中调用C语言,需要利用ND ...
随机推荐
- springboot~通过面向接口编程对控制反转IOC的理解
IOC,把控制反转到业务端,这句话没什么问题,在springboot框架里,对象的管理是通过spring ioc来实现的,而开发人员的开发原则里总是说"面向接口编程",而为什么要面 ...
- SpringBoot项目 使用Jenkins进行自动化部署 gitlab打tag 生产测试环境使用 含配置中心
脚本 node('master') { def mvnHome = tool 'maven11-free' def gitUrl = "http://gitlab.wdcloud.cc:10 ...
- 更换git远程仓库地址
通过命令直接修改远程仓库地址 git remote 查看所有远程仓库 git remote xxx 查看指定远程仓库地址 git remote set-url origin 你新的远程仓库地址 先删除 ...
- 查询Linux CPU架构
一.背景 Ubuntu上需要安装测试个软件wkhtmltopdf,但是下载时,需要知道系统架构,故做记录 二.查看linux架构 dpkg 命令 dpkg 的命令可用于查看 Debian/ Ubunt ...
- Java 接口 抽象类 抽象方法
abstract class elehousekeeping { //抽象家用电器类 abstract void opermode(); //抽象方法} class TV extends elehou ...
- C++标准模板库(STL)常用介绍
1. 输入输出 C++既可以用C的scanf和printf,也可以用新增的的cin与cout,后者速度慢 1.1 C程序中输入输出 int a; scanf("%d",&a ...
- 领导给了一堆无序杂乱的数据,我写了个Python自动化脚本
这个问题算是群友答疑.如果说同事或者老板给你一堆这样的数据,你估计会抓狂,该怎么处理呢? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. ...
- Pulsar 联合 TiDB 推出大数据场景数据应用分析解决方案
方案概述 大数据时代,各类应用对消息解决方案的要求不仅仅是数据的流动,而是要在持续增长的服务和应用中传输海量数据,进行智能的处理和分析,帮助业务做出更加精准的决策. Pulsar 与 TiDB 联合解 ...
- Android开发之华为手机无法看log日志解决方法(亲测可用华为荣耀6)
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, 转载请说明出处. 在上家公司上班的时候,公司配了华为荣耀6的测试机,发现在eclipse下 无法查看 ...
- Single Shot MultiBox Detector论文翻译【修改】
这几天读了SSD论文的原理部分,看了别人的翻译,发现很多应该都是google直接翻译过来的,有些地方读的不是很通顺,自己就在自己的理解和搜索的基础上对我看的那篇翻译做了一些修改.[原文地址:http: ...