生成动态库so的方法|解决NDK r5b引用静态库失效的问题|在NDK的Nactive代码中使用Android Log的方法|生成Native java头文件

一、生成动态库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

运行成功后,会生成com_enleo_tmpcPlayer4Droid_tmpcPlayer4Droid.h文件。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值