Android-使用Android studio 进行NDK-JNI开发实例(一)

来源:互联网 发布:linux 内核源码修改 编辑:程序博客网 时间:2024/06/15 11:02

前言

使用Android studio 进行NDK-JNI开发,在界面上显示Hello NDK-JNI

步骤:

1. 创建工程

2. 配置NDK 路径

local.properties 文件中加入 ndk路径ndk.dir=E\:\\Android-NDK\\android-ndk-r10e(NDK所在文件路径)



3. 在gradle.properties 文件里面添加 android.useDeprecatedNdk=true



4. 修改build.gradle配置 

    工程中共有两个build.gradle配置文件,我们要修改的是在\app\build.gradle这个文件。

defaultConfig里面写入

ndk{ moduleName "hellojni"//生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86"//输出指定三种abi体系结构下的so库。 }



5. 在java代码中写入代码:包括 本地方法和加载so类库(so类库名字)



6. 打开 View-->Tool Windows-->Terminal (或者点击左下角Terminal)



7. 在打开的Terminal中输入命令

进入项目名-->app-->src-->main目录下创建文件夹 

命令--->cd app/src/main 回车

命令--->mkdir jni 回车

进入项目名-->app-->src-->main-->java目录下输入

命令--->cd java 回车

命令--->javah -jni 包名.类名      ( .h生成头文件)



8. 在jni文件夹下创建.c文件




9. 在刚创建的c文件中写入代码



10. 编译运行查看结果:




注:生成的so类库位置如下:


布局代码:
activity_main.xml
<RelativeLayout 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"    tools:context=".MainActivity">    <TextView        android:id="@+id/tv"        android:textSize="50sp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_centerHorizontal="true" /></RelativeLayout>

MainActivity.java
package com.example.yu_longji.android22;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {    static {        //加载打包的so类库        System.loadLibrary("hellojni");    }    //定义本地方法,方法体由c语言实现    public native String getStringNative();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView tv = (TextView)findViewById(R.id.tv);        tv.setText(getStringNative());    }}



2 1