我的 so
来源:互联网 发布:java websocket服务器 编辑:程序博客网 时间:2024/06/06 05:01
环境 window + linux
工具 eclipse +源码环境
1.使用eclipse 编写 Java
package com.android.jni;
public class IswJavaNativeInterface {
static {
System.loadLibrary("JNIIsw");
}
/*AES*/
public native byte[] encrypt(byte[] key, byte[] parameters, int len);
public native byte[] decrypt(byte[] key, byte[] parameters, int len);
}
这里面要注意的是,对于so文件名中的lib字段。mk文件中指定生成libJNIIsw.so,但是这里load时要去掉lib。
2.JavaH 生成 头文件(*.h)
javah本事 jdk的一个命令,但是做这一步时折腾了很久,只说一下必须注意的地方:
写好java文件后,用eclipse编译,在bin/classes 下会生成对应的*.class文件(执行javah命令就是依据这个class编译头文件的)
这里要注意的是,必须cd到 ../bin/classes/ 下面
命令必须是 javah classpath . 包名加类名
否则各种失败,解释下 命令行中的 ‘.’,它的意思是 会在../bin/classes/下生成响应的 头文件。
3.以C的方式实现 头文件中的方法
这里要注意的是,C的文件名必须与生成的头文件一致。include <...>时注意 包含相关库
4.编写Android.mk
将 C文件 java文件 头文件 Android.mk 文件放到一起。
在这个过程中遇到了一个 打印 c 的日志的问题。
要想在eclipse打印C 的日志 需要注意两个地方
1>.需要在 C文件里 #include <android/log.h>
期间试了#include <cutils/log.h> #include <utils/Log.h> 都打不出日志。也许在C++里可以,但C里肯定不行
2>.需要在Android.mk里加上
LOCAL_SHARED_LIBRARIES := liblog libcutils
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
这里还有一个小技巧,用eclipse习惯可通过过滤 TAG 来查看 日志,在C里也可以加上TAG
#define LOG_TAG "libenc"
#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
5.放到源码环境下 mm 编译
公司里刚好有编译过得 Androd 源码环境,就用google提供的 编译命令就可编出so库。
6.在源码环境的 ../out/..目录下取出生成的so文件
工具 eclipse +源码环境
1.使用eclipse 编写 Java
package com.android.jni;
public class IswJavaNativeInterface {
static {
System.loadLibrary("JNIIsw");
}
/*AES*/
public native byte[] encrypt(byte[] key, byte[] parameters, int len);
public native byte[] decrypt(byte[] key, byte[] parameters, int len);
}
这里面要注意的是,对于so文件名中的lib字段。mk文件中指定生成libJNIIsw.so,但是这里load时要去掉lib。
2.JavaH 生成 头文件(*.h)
javah本事 jdk的一个命令,但是做这一步时折腾了很久,只说一下必须注意的地方:
写好java文件后,用eclipse编译,在bin/classes 下会生成对应的*.class文件(执行javah命令就是依据这个class编译头文件的)
这里要注意的是,必须cd到 ../bin/classes/ 下面
命令必须是 javah classpath . 包名加类名
否则各种失败,解释下 命令行中的 ‘.’,它的意思是 会在../bin/classes/下生成响应的 头文件。
3.以C的方式实现 头文件中的方法
这里要注意的是,C的文件名必须与生成的头文件一致。include <...>时注意 包含相关库
4.编写Android.mk
将 C文件 java文件 头文件 Android.mk 文件放到一起。
在这个过程中遇到了一个 打印 c 的日志的问题。
要想在eclipse打印C 的日志 需要注意两个地方
1>.需要在 C文件里 #include <android/log.h>
期间试了#include <cutils/log.h> #include <utils/Log.h> 都打不出日志。也许在C++里可以,但C里肯定不行
2>.需要在Android.mk里加上
LOCAL_SHARED_LIBRARIES := liblog libcutils
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
这里还有一个小技巧,用eclipse习惯可通过过滤 TAG 来查看 日志,在C里也可以加上TAG
#define LOG_TAG "libenc"
#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
5.放到源码环境下 mm 编译
公司里刚好有编译过得 Androd 源码环境,就用google提供的 编译命令就可编出so库。
6.在源码环境的 ../out/..目录下取出生成的so文件
7.将so文件放入eclipse的lib下参加编译
下面是 Android.mk
=====================================================
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
com_android_jni_IswJavaNativeInterface.c
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES := liblog libcutils
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
LOCAL_PRELINK_MODULE := True
LOCAL_MODULE := libJNIIsw
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)
=====================================================
0 0
- 我的 so
- Oracle中表空间和数据文件的理解--so easy,妈妈再也不用担心我的学习!
- 从源码角度讲讲我对Android和Unity的热更so的理解
- 发布我的第一个java程序。。用java排序so easy
- 分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!
- 我最喜欢的几本书《C++Primer》、《OpenGL编程指南》 and so on
- zzulioj 1841: so easy!麻麻再也不用担心我的数学了! (数学规律)
- zzulioj 1841: so easy!麻麻再也不用担心我的数学了! 【规律】
- zzulioj--1841--so easy!麻麻再也不用担心我的数学了!(数学水题)
- 【郑轻】[1841]so easy!麻麻再也不用担心我的数学了!
- 【zzulioj 1841 so easy!麻麻再也不用担心我的数学了!】
- 【我的Android进阶之旅】Android 如何防止 so库文件被未知应用盗用?
- 我的服务器开发之路-php扩展c语言so
- 自定义so的引用
- so文件的使用
- 生成.so的makefile
- So memorable的广州
- 关于.SO的破解
- hdoj 发工资
- 更改vs2008项目名称
- Android 编程下的代码混淆
- 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)
- 创建一个可执行的python脚本
- 我的 so
- WCF 的 WebGet 方式,可以当url 直接访问服务内方法
- 64-bit Tips
- Lex与Yacc学习(二)之第一个Lex程序
- char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][], and so on
- Android之断点续传下载
- Android 开发学习:新版NDK 使用
- Android.mk详解
- Maximal Rectangle