博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SnakeGo : JNI, Android.mk and ndk-build
阅读量:4705 次
发布时间:2019-06-10

本文共 1598 字,大约阅读时间需要 5 分钟。

 

    忽然想给SnakeGo加段'高大上'的代码 -- 使用JNI调用.so的Native函数...(似乎完全不需要...)

    工作中一直在用Native方式, 但只是改改C/C++, 再改改Java, 然后通过Maven把一切都搞定了, 想想自己应该一直都是纸上谈兵, 完全没敲过, 于是敲下, 留贴记录.

 

    1. 创建个Android的app工程, 带个默认的MainActivity类;

    2. 在类中添加个Native函数;

public class MainActivity extends Activity {    public native int getNumber(int i);}

    3. 通过javah生存JNI接口文件;

>javah -classpath "JNITest\bin\classes";"sdk\platforms\android-19\android.jar"  -o JNITest.h jie.android.jnitest.MainActivity
/* * Class:     jie_android_jnitest_MainActivity * Method:    getNumber * Signature: (I)I */JNIEXPORT jint JNICALL Java_jie_android_jnitest_MainActivity_getNumber(JNIEnv *, jobject, jint);

    4. 创建相应的C源文件;

#include 
#include "include/JNITest.h"JNIEXPORT jint JNICALL Java_jie_android_jnitest_MainActivity_getNumber(JNIEnv *env, jobject obj, jint value){ return (value + 10);}

    5. 编写默认makefile文件Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := JNITestLOCAL_SRC_FILES := JNITest.c empty.cinclude $(BUILD_SHARED_LIBRARY)

 

    6. 使用ndk编译;

D:\Studio\GIT_ROOT\JNITest\jni>ndk-build cleanClean: JNITest [armeabi]Clean: stdc++ [armeabi]D:\Studio\GIT_ROOT\JNITest\jni>ndk-build"Compile thumb : JNITest_lib <= JNITest.c"Compile thumb : JNITest_lib <= empty.cSharedLibrary  : libJNITest.soInstall        : libJNITest_lib.so => libs/armeabi/libJNITest.so

 

    7. Java中加载.so及调用;

static {	System.loadLibrary("JNITest");}
TextView tv = (TextView)MainActivity.this.findViewById(R.id.textView1);tv.setText("i = " + getNumber(2));

 

    一气敲完, 运行正常...但每次都要这样一步一步的自己完成这些固定步骤吗? 该有啥方便的法子, 我去Google下了..

 

转载于:https://www.cnblogs.com/codejie/p/3773070.html

你可能感兴趣的文章
NYOJ--32--SEARCH--组合数
查看>>
gulpfile 压缩模板
查看>>
【34.14%】【BZOJ 3110】 [Zjoi2013]K大数查询
查看>>
【 henuacm2016级暑期训练-动态规划专题 A 】Cards
查看>>
第五篇:白话tornado源码之褪去模板的外衣
查看>>
设备常用框架framework
查看>>
bootstrap模态框和select2合用时input无法获取焦点(转)
查看>>
MockObject
查看>>
BZOJ4516: [Sdoi2016]生成魔咒(后缀自动机)
查看>>
查看手机已经记住的WIFI密码
查看>>
最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
查看>>
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
adb shell am 的用法
查看>>
iOS10 UI教程视图和子视图的可见性
查看>>
FindChildControl与FindComponent
查看>>
中国城市json
查看>>
android下载手动下载Android SDK
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
leetcode133 - Clone Graph - medium
查看>>