android中view使用头文件,Android Studio NDK使用一

这里使用手工编译的方式,Android Studio版本3.5.x。

1. 下载配置好NDK

7db0f8ac380432c3b77a8db271849ad0.png

167ccd86722e4a2b4190d852669bebe2.png

2. 配置NDK环境变量

afa378f853ae4deff74119406bb5b462.png

95a6ff5e8a000c7dce5a27fdc27fddf2.png

353f382b206eac1aa7d9396bb6bc4ebd.png

打开命令行,输入ndk-build, 如果有以下输出,则配置正确。

910ccc154ee26f0e14b645fe6bc2917f.png

3. 打开Android Studio, 使用AS生成库的头文件(手工写也可以但是麻烦)

新建一个默认空项目:

cefc3960d0391ea46838763e39f02b47.png

96c3bfd93c50b893e34eb82bce880751.png

新建一个类:

56ebcd8ddc4db4b2d9e9d0db659f986e.png

3909ed91d6f5f29d7e77c9377bb1f4e4.png

新建类后,修改代码如下:

public class funkey {

public native void func1();//测试1,无返回值

public native int func2();//测试2,返回int

public native String func3();//测试3..

}

生成所需要的头文件又两种方法:

1.手工编译:

在命令行中切换到funkey.java所在目录   cd D:\workspace\ndkx02\app\src\main\java\cn\appnet\ndkx02

javac funkey.java     (注:这里需要提前将java路径写入到系统环境变量里面)

68d2ea55435d44e47c4ccfc7f448d15f.png

生成 funkey.class.

进入:D:\workspace\ndkx02\app\src\main\java> 执行命令: javah -jni cn.appnet.ndkx02.funkey

生成  cn_appnet_ndkx02_funkey.h

f49948b86ff8cde46bd4232ec087aaee.png

2.使用External Tool脚本

ae0202a951734fadfe2c81631fc2f2f5.png

839420ff8f5ca10c0579494f73523fb9.png

Name:  NDK-PreBuild (这个可以随便写)

Description:  javah javac  ( 这个可以随便写)

Program:  $JDKPath$\bin\javah.exe

Arguments:  -classpath . -jni -d d:\NDK\jni $FileClass$

Working directory: $ModuleFileDir$\src\main\Java

保存后,在类名右键选择 NDK-Prebuild, 然后就会在D:\NDK\jni下生成头文件

f1fecc9c039811534fc1f06f63ba9d91.png

ff4a8b55f06907a7f16cfbfa230fed9c.png

以上的ndkx02工程,只是为了制作这个头文件,后面使用会新建一个工程。

下面编写和编译库文件:

1. 在d:\ndk\jni下新建 Android.mk  和 funkey.c

4776c9dde51e8b802e22bb6ef34ae55a.png

Android.mk 内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := funkey

LOCAL_SRC_FILES := funkey.c

LOCAL_LDLIBS = -llog

include $(BUILD_SHARED_LIBRARY)

Application.mk  (这个文件可以不写)

APP_PLATFORM := android-16

funkey.c内容如下:

#include #include "cn_appnet_ndkx02_funkey.h"

JNIEXPORT void JNICALL Java_cn_appnet_ndkx02_funkey_func1(JNIEnv *env, jclass jclazz)

{

return;

}

JNIEXPORT jint JNICALL Java_cn_appnet_ndkx02_funkey_func2(JNIEnv *env, jclass jclazz)

{

return 1;

}

JNIEXPORT jstring JNICALL Java_cn_appnet_ndkx02_funkey_func3(JNIEnv *env, jclass jclazz)

{

return (*env)->NewStringUTF(env, "M_OK");

}

进入命令行切换到:d:\ndk\jni下

d:\NDK\jni>ndk-build

Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16.

[arm64-v8a] Compile        : funkey <= funkey.c

[arm64-v8a] SharedLibrary  : libfunkey.so

[arm64-v8a] Install        : libfunkey.so => libs/arm64-v8a/libfunkey.so

[armeabi-v7a] Compile thumb  : funkey <= funkey.c

[armeabi-v7a] SharedLibrary  : libfunkey.so

[armeabi-v7a] Install        : libfunkey.so => libs/armeabi-v7a/libfunkey.so

[x86] Compile        : funkey <= funkey.c

[x86] SharedLibrary  : libfunkey.so

[x86] Install        : libfunkey.so => libs/x86/libfunkey.so

[x86_64] Compile        : funkey <= funkey.c

[x86_64] SharedLibrary  : libfunkey.so

[x86_64] Install        : libfunkey.so => libs/x86_64/libfunkey.so

下面是使用库:

2cf0ceea46d86ab5932f55e3d4a5a13b.png

04d141d52c1ad78001d0d161dcef12ce.png

将刚才编译出的库放入如下路径:D:\workspace\nkd001\app\libs

2d4db3adc42c064fa163b82cf2110535.png

新建类funkey, 包名需要和上一个工程文件相同 cn.appnet.ndkx02

funkey.java

package cn.appnet.ndkx02;

public class funkey {

static {

System.loadLibrary("funkey");

}

public native void func1();

public native int func2();

public native String func3();

}

加入:

sourceSets {

main {

jniLibs.srcDirs = ['libs']

}

}

c908d353b3a83288344f83f569818a9a.png

a0ef63124500a5f3e3f8c77bfe04ea38.png

修改MainActivity.java

package cn.app.nkd001;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import cn.appnet.ndkx02.*;

public class MainActivity extends AppCompatActivity {

funkey fk = new funkey();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void OnBtnClick1(View view){

fk.func1();

}

public void OnBtnClick2(View view){

int iResult = fk.func2();

System.out.println(iResult);

}

public void OnBtnClick3(View view){

String strResult = fk.func3();

System.out.println(strResult);

}

}

修改activity_main.xml

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值