一、生成动态库so的方法有两种
1.在Android源码环境中生成so
(1)App由两部分组成:Native实现程序+应用程序+引用静态库,将实现程序拷贝至源码项目,编写Android.mk。
(2)把需要引用的外部静态库拷贝至源码目录
$HOME/android-2.1_r2/out/target/product/generic/obj/STATIC_LIBRARIES/添加静态库文件libDEC264_intermediates/libDEC264.a 。
(3)执行mm后,生成动态库 Install: out/target/product/generic/system/lib/libNetStartRecord.so
2.利用NDK生成so
(1)配置NDK环境,下载android-ndk-r5b,设置PATH环境变量。
(2)在elipse里新建Android项目,在项目内新建jni文件夹,并在文件夹中添加Nactive Code文件和Android.mk文件。
(3)使用终端进入改项目,执行$NDK/ndk-build命令,在项目位置生成obj和libs文件夹。so库文件在libs文件夹里生成了。
二、解决NDK r5b引用静态库失效的问题
如果这个外部的静态库.a不是由NDK生成,那在Android.mk里面,就应该用LOCAL_LDLIBS
来引用该静态库。如下:
LOCAL_LDLIBS := libvoiceengine.a
三、在NDK的Nactive代码中使用Android Log的方法
1.在mk文件加入:LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
2.在cpp文件加入:
#include <android/log.h>
#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, "keymatch", __VA_ARGS__)
3.使用:LOGI("input params Challenge");
四、生成Native java头文件
(1)声明Java Native接口。(定义Java Native接口可以在Android项目的主类里声明,也可以通过使用独立的类来声明。)
static { System.loadLibrary("libtmpcPlayerDemo"); } public native void start_netiq()
package com.enleo.tmpcPlayer4Droid;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class tmpcPlayer4Droid extends Activity implements OnClickListener {
private final static String TAG = "tmpcPlayer4Droid";
// native java
private Button startNetIQBtn;
static
{
System.loadLibrary("libtmpcPlayerDemo");
}
public native void start_netiq();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startNetIQBtn = (Button)findViewById(R.id.startNetIQ);
startNetIQBtn.setOnClickListener(this);
}
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.startNetIQ:
start_netiq();
break;
default:
break;
}
}
}
(2)编译该Android项目,会在bin目录下(<workspace>/tmpcPlayer4Droid/
bin/com/enleo/tmpcPlayer4Droid)生成
tmpcPlayer4Droid.class文件。
定位到包文件夹的同级目录下,运行
javah,注意:“.”号和包名。
javah -classpath . -jni com.enleo.tmpcPlayer4Droid.tmpcPlayer4Droid