Android 创建 SO 文件
创建工程,新建一个类,该类需要有一个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 文件的更多相关文章
- android 创建 xml文件
android创建xml文件的方法. 要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限. <uses-permission android:name= ...
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
- 自动帮助创建android资源xml文件的网站
自动帮助创建android资源xml文件的网站 http://android-holo-colors.com/ stack overflow上一个seekbar的例子: http://stackove ...
- Android:创建文件或文件夹以及获取sd卡根目录
目录结构: 功能,可以根据录入的目录或者文件夹生成相应的文件或者文件夹 首先需要添加一个权限: <uses-permission android:name="android.permi ...
- bat如何创建多级文件夹(在android设备中)
在android设备中要创建多个或者多级文件夹时,手动去创建费时费力(有点傻),一个bat文件就能很好的实现这个功能. 1.首先创建同级多个文件夹且在该文件夹下生成一个文件 @echo off ech ...
- Android创建文件夹及文件并写入数据
package elwin.fei.mobileaudio; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- Android Studio:layout-sw600dp文件夹中创建activity_main.xml
1.右键res文件夹,新建Android resource directory文件夹 2.在resource type中选择layout 3.将Directory name命名为layout-sw6 ...
- Android上传文件至服务器(上)
每一次都不能上首页,真悲催..管理员让我上一次首页? 很多时候我更愿意一个人写代码,与其在垃圾代码上改改改,我更愿意直接重构. 整洁的代码简单直接.整洁的代码如同优美的散文.整洁的代码从不隐藏设计者的 ...
- Android入门(九)文件存储与SharedPreferences存储
原文链接:http://www.orlion.ga/578/ Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储.SharedPreference存储以及数据库存储.当然, ...
随机推荐
- ListView中CheckBox错乱解决
思路: ListView在复用的时候会出现很多问题,CheckBox状态会出现错乱,解决思路: 1.使用Map集合的键值对的形式来存放position位置上CheckBox的状态 2.监听CheckB ...
- CKEditor插件开发
以前做过一个教育项目,是有关在线考试的.其中对编辑器CKEditor做了扩充,增加了插入客观题.主观题.选择题和判断题的功能.这里记述下CKEditor插件开发的过程. CKEditor以前叫FCKE ...
- Mautic-2.2.0 (Ubuntu 16.04)
平台: Ubuntu 类型: 虚拟机镜像 软件包: mautic-2.2.0 business intelligence commercial ecommerce mautic open-source ...
- Linux命令之查看日志等实时文件命令(less 、tail)使用
一.less的使用 1)less 文件名,即可快速打开文件 2)相关查看搜索 3)利用键盘向上向下箭头键盘上的向上和向下箭头,点击一次向下简单,文件内容往下读取一行:点击一次向上箭头,文件内容,往上 ...
- 51nod 1366 贫富差距
题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个国家有N个公民,标记为0,1,2,...,N-1,每个公民有一个存款额.已知每个公 ...
- 网页打开速度优化——HTTP请求头及响应头
no-cache:不缓存过期的资源 no-store:不缓存 最近看了<图解HTTP>这本书,书上讲到了这两者的区别: no-cache从字面意义上很容易误解为不缓存,但是no-cache ...
- Fiddler-3 Fiddler抓包-手机端配置
电脑端可以通过Fiddler监听手机端的http请求.需要两个步骤:首先配置Fiddler,再配置手机端. 1 配置 Fiddler 允许远程设备连接: 菜单Tools - Telerik Fiddl ...
- Android 中间白色渐变到看不见的线的Drawable
用gradient <gradient android:startColor="#00ffffff" android:centerColor="#ffffff&qu ...
- url获取MVC域,action,controller的方法
域:filterContext.RequestContext.RouteData.DataTokens["area"] 控制器:filterContext.RequestConte ...
- Dijkstra单源最短路径,POJ(2387)
题目链接:http://poj.org/problem?id=2387 Dijkstra算法: //求某一点(源点)到另一点的最短路,算法其实也和源点到所有点的时间复杂度一样,O(n^2); 图G(V ...