创建工程,新建一个类,该类需要有一个static初始化块中调用System.loadLibrary("${soName}"),还需要有用native修饰的方法声明(无需实现),一个例子:

package club.seliote.sodemo;

public class MyJni {

    static {
// MySo是so库的名字
System.loadLibrary("MySo");
} public native static String getString(); }

Build -> Make Project即可在Project\app\build\intermediates\classes\debug${packageName}${className}.class找到class文件

在Project/app/src/main上右键,新建一个JNI文件夹

打开AS的Terminal,路径切换至project/app/src/main/java下,执行javah -jni -classpath ${buildClassesDubugDir} ${packageName}.${className},比如javah -jni -classpath E:\Code\Android\SoDemo\app\build\intermediates\classes\debug club.seliote.sodemo.MyJni,这将会在jni文件夹下生成.h文件

在jni文件夹下创建一个C/CPP文件,名称随意,这里用的main,然后在其中实现.h文件中要求的方法(可以直接将.h文件内容复制过来然后修改,还需要注意这里C与CPP的语法是不同的),一个例子:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>;
/* Header for class club_seliote_sodemo_MyJni */ #ifndef _Included_club_seliote_sodemo_MyJni
#define _Included_club_seliote_sodemo_MyJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: club_seliote_sodemo_MyJni
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_club_seliote_sodemo_MyJni_getString(JNIEnv *env, jclass jobj) {
return env->NewStringUTF("Hello jni world!");
} #ifdef __cplusplus
}
#endif
#endif

jni文件夹下新建Android.mk文件,内容是:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := ${libraryName}
LOCAL_SRC_FILES := ${cppFileName}
include $(BUILD_SHARED_LIBRARY)

一个例子:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := MySo
LOCAL_SRC_FILES := main.cpp
include $(BUILD_SHARED_LIBRARY)

jni文件夹下新建Application.mk,内容是APP_ABI := all

在Project Structure中配置NDK Path,之后在Terminal中切换至jni文件夹执行C:/Android/Ndk/ndk-build.cmd,即可生成so文件(app/src/main下的libs与obj文件夹内容)

在app/build.gradle的android节点中加入:

sourceSets {
main() {
jniLibs.srcDirs = ['src/main/libs']
jni.srcDirs = []
}
}

在Java代码中使用类似于((TextView)this.findViewById(R.id.text_view)).setText(MyJni.getString());进行调用

Android 创建 SO 文件的更多相关文章

  1. android 创建 xml文件

    android创建xml文件的方法. 要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限. <uses-permission android:name= ...

  2. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  3. 自动帮助创建android资源xml文件的网站

    自动帮助创建android资源xml文件的网站 http://android-holo-colors.com/ stack overflow上一个seekbar的例子: http://stackove ...

  4. Android:创建文件或文件夹以及获取sd卡根目录

    目录结构: 功能,可以根据录入的目录或者文件夹生成相应的文件或者文件夹 首先需要添加一个权限: <uses-permission android:name="android.permi ...

  5. bat如何创建多级文件夹(在android设备中)

    在android设备中要创建多个或者多级文件夹时,手动去创建费时费力(有点傻),一个bat文件就能很好的实现这个功能. 1.首先创建同级多个文件夹且在该文件夹下生成一个文件 @echo off ech ...

  6. Android创建文件夹及文件并写入数据

    package elwin.fei.mobileaudio; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  7. Android Studio:layout-sw600dp文件夹中创建activity_main.xml

    1.右键res文件夹,新建Android resource directory文件夹 2.在resource type中选择layout  3.将Directory name命名为layout-sw6 ...

  8. Android上传文件至服务器(上)

    每一次都不能上首页,真悲催..管理员让我上一次首页? 很多时候我更愿意一个人写代码,与其在垃圾代码上改改改,我更愿意直接重构. 整洁的代码简单直接.整洁的代码如同优美的散文.整洁的代码从不隐藏设计者的 ...

  9. Android入门(九)文件存储与SharedPreferences存储

    原文链接:http://www.orlion.ga/578/ Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储.SharedPreference存储以及数据库存储.当然, ...

随机推荐

  1. 属性动画 常用属性及View常用方法

    View类中,常用于属性动画的属性: translationX and translationY: These properties control where the View is located ...

  2. python 修改xml文件

    在百度知道里面有人问了这么一个问题: 有一个xml文件:<root>text <a/> <a/> ...这里省略n个<a/> <root>想 ...

  3. SQLSERVER 2008 R2 事务日志已满

    方法一: USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName ...

  4. [SVN]TortoiseSVN工具培训1─为什么要用SVN?

    你是否有经历过以下情况: SVN的使用理由/好处:

  5. C#多线程Thread

    在项目中经常用到线程Thread,先做个简单记录,后面再完善下,方便以后参考.本人技术有限,如有不同见解之处,欢迎博友批评指正. 执行的线程Thread分无参数的,一个参数,多个参数的.直接看代码吧. ...

  6. LoadRunner性能测试之常见函数及参数的说明和作用

       

  7. Installing xgboost and cmake, mingw64 and mingw

    Problem: installing the xgboost to get the python package for later importing

  8. Selenium入门11 滚动条控制(通过js)

    这一节要有js基础.做web端的UI自动化必须要有html,css,javascript前端基础. 滚动条控制: 1 移动垂直滚动条 document.documentElement.scrollTo ...

  9. Linux MySQL 5.1源码安装

    安装必备的软件 yum install ncurses-devel -y yum install pcre pcre-devel -y yum install gcc* -y   解压缩 tar -z ...

  10. Poj(2560),最小生成树,Prim

    题目链接:http://poj.org/problem?id=2560 只想说“全都是套路”,关键建图. #include <stdio.h> #include <string.h& ...