Android导入第三方静态库.a,编译成动态库.so。
> NDK编译SO库
eclipse中android NDK开发环境的搭建及编译SO库 - http://blog.csdn.net/wangzhen209/article/details/50312633
Eclipse下用NDK编译生成so文件- http://blog.csdn.net/devilnov/article/details/41543975
在Eclipse+SDK IDE中,配置Window-->Preferences-->Android-->NDK,在NDK Location中输入之前android-ndk-r10d的全路径
AndroidStudio 编译C/C++文件生成SO文件- http://blog.csdn.net/krubo1/article/details/50547681
Android NDK 生成、调用so文件- http://blog.csdn.net/pomme_qixiaohu/article/details/8597993
AndroidStudio 编译C/C++文件生成SO文件- http://blog.csdn.net/krubo1/article/details/50547681
NDK开发- http://blog.csdn.net/a396901990/article/category/6305704
Android之NDK开发:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html
> NDK环境的配置.
Eclipse中配置NDK R10环境- http://blog.csdn.net/mole/article/details/42520185
AndroidStudio如何配置NDK/JNI开发环境-http://blog.csdn.net/aplixy/article/details/51429305
Android Studio NDK开发环境搭建-http://jingyan.baidu.com/article/456c463b4a52460a58314402.html
添加环境变量NDK_ROOT 为:D:\Android\android-ndk-r10d
在环境变量 PATH 下追加 :%NDK_ROOT%;
然后在CMD窗口中输入ndk-build -version,检测是否安装成功
NDK执行命令:
D:\> cd D:\ide\android-ndk-r10b\samples\hello-jni\jni
D:\ide\android-ndk-r10b\samples\hello-jni\jni>ndk-build
> 编写JNI HelloWord例子,在D盘下建了个Android工程,及编译SO
JNI入门教程之HelloWorld篇- http://blog.csdn.net/mingjava/article/details/180946
一步一步学习androidNDK编程(hello world)- http://blog.csdn.net/mockingbirds/article/details/45132551
下面开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++或Eclipse工具:
1. 我们在硬盘上建立一个UninstallNative目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示:
在Android工程中编写UninstallNative.java文件
package com.desaco.uninstallfeedback.native_method;
public class UninstallNative {
//com.desaco.uninstallfeedback.native_method.UninstallNative
static {
System.loadLibrary("uninstall_app_feedback");
}
public native String userFeedback();
}
注意我们的userFeedback()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("uninstall_app_feedback")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的uninstall_app_feedback.dll(如果在其他的操作系统可能是其他的形式,比如uninstall_app_feedback.so)
2.切换到 D:\workpalce_fun\UninstallFeedback\src\com\desaco\uninstallfeedback\native_method目录下,打开cmd窗口(已经配置好了JDK环境),生成class文件:
生成class文件命令: javac UninstallNative.java 生成UninstallNative.class文件
3.JDK自带了javah命令可以实现,也可以用eclipse中ant 脚本去生成一个.h的头文件,假设工程目录下有bin文件夹,bin存放编译好的class文件,生成JNI .h头文件
Android工程目录D:\workpalce_fun\UninstallFeedback\bin\classes;生成.h文件命令: D:\workpalce_fun\UninstallFeedback\bin\classes>
javah -jni com.desaco.uninstallfeedback.native_method.UninstallNative
注意:com.desaco.uninstallfeedback.native_method是包名,UninstallNative是类名.
com_desaco_uninstallfeedback_native_method_UninstallNative.h文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_desaco_uninstallfeedback_native_method_UninstallNative */
#ifndef _Included_com_desaco_uninstallfeedback_native_method_UninstallNative
#define _Included_com_desaco_uninstallfeedback_native_method_UninstallNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_desaco_uninstallfeedback_native_method_UninstallNative
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_desaco_uninstallfeedback_native_1method_UninstallNative_displayHelloWorld
(JNIEnv *, jobject);
/*
* Class: com_desaco_uninstallfeedback_native_method_UninstallNative
* Method: userFeedback
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_desaco_uninstallfeedback_native_1method_UninstallNative_userFeedback
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
JNI是一门复杂,有趣且富有挑战性的技术,以后将说明如何在java语言和Native语言之间进行交互。
4.接下在src目录下编辑所需要到的my_function.c文件
#include <jni.h>
#include <stdio.h>
#include "com_desaco_uninstallfeedback_native_method_UninstallNative.h"
JNIEXPORT void JNICALL Java_com_desaco_uninstallfeedback_native_1method_UninstallNative_displayHelloWorld
(JNIEnv *env, jobject obj)
{
printf("HelloWorld JNI!\n");
return;
}
JNIEXPORT void JNICALL Java_com_desaco_uninstallfeedback_native_1method_UninstallNative_userFeedback
(JNIEnv *env, jobject obj){
}