Android NDK 编译、使用动态库

一.安装NDK

1.下载,解压NDK。

2.在Eclipse->窗口->首选项->Android->NDK->NDK Location 填写NDK所在目录,如下图:


二:.在Eclipse新建工程:JNIbuton。

在src下新建一个class:JNIbuttonnative.java,声明为 native 的 Java 函数如下:

package com.example.jnibutton;

public class JNIbuttonnative {
	public static native int print(); 
}
三:.编译JNI。

找到Android项目中bin目录下,会有classes文件夹,Eclipse自动为我们生成的字节码文件就在这个目录下。

在cmd下,进入工程所在目录下的bin\classes\目录,运行javah com.example.jnibutton.JNIbuttonnative,即可生成相应.h头文件,如下图:


运行 javah命令是可能会出现 java不是内部命令这一错误,这是环境变量没有配置好。

PATH环境变量,有以下两种方法都尝试一下:

%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

D:\android\android-ndk-r9d;C:\Program Files\Java\jdk1.8.0_91\bin;

四:.在工程下新建jni文件夹。

1.将上一步生成的.h头文件移到jni目录下。

2.在jni目录下新建Android.mk文件,如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JNIbuttonNative 

LOCAL_SRC_FILES := JNI_print.c

LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)
在上面的内容里第一行与第二行是固定的。第三行定义了编译的目标名字。第四行定义了要编译的.c 文件。第五行定义了编译时的链接库。第六行定义了编译的目标类型。 BUILD_SHARED_LIBRARY 指的是编译成动态链接库,即.so 文件。

3.到了这一步我们终于可以作用 NDK 了,在jni目录下创建与.h头文件相对应的c程序文件,JNI_print.c,如下:
#include<stdio.h>
#include "com_example_jnibutton_JNIbuttonnative.h" 

JNIEXPORT int JNICALL Java_com_example_jnibutton_JNIbuttonnative_print
  (JNIEnv *env, jclass class){
	return 1;
}
4.在cmd进入jni目录,运行ndk-build,即可编译相应库文件,如下:


编译成功后会在工程目录的libs/armeabi目录下生成一个libTestJNI.so文件。


五:编写Android测试程序。

1.编写activity_jnibutton.xml布局文件,添加button,如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.jnibutton.JnibuttonActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" 
        android:id="@+id/ts"
        />
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ok"
        android:text="点我"
        />

</RelativeLayout>


2.编写主程序JnibuttonActivity.java,加载动态库,添加一个button,点击button后,调用动态库定义的函数,如下;

package com.example.jnibutton;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class JnibuttonActivity extends Activity {

	static {  
        // 加载动态库  
        System.loadLibrary("JNIbuttonNative");  
    }  
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jnibutton);
        
        final Button bn = (Button)findViewById(R.id.ok);
        bn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				final TextView text =(TextView)findViewById(R.id.ts);
				
				text.setText("hello" + JNIbuttonnative.print());
			}
		});
        
    }
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NDKAndroid Native Development Kit的缩写,它是一套专门为Android平台提供的用于开发底层C/C++代码的工具集。使用NDK可以实现直接在Android编译C/C++的动态库。而x265是一种现代化的视频编码技术,它可以在保证视频质量的基础上压缩视频大小。 使用NDK直接编译x265的动态库需要以下步骤: 1. 下载并安装NDK,并将其添加到环境变量中。 2. 下载x265源码,并解压到本地路径。 3. 打开终端窗口,进入x265源码路径,执行以下命令: ``` $ export NDK_ROOT=/path/to/ndk $ export PATH=$NDK_ROOT:$PATH $ export SYSROOT=$NDK_ROOT/platforms/android-xx/arch-arm64/ $ export CC=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc $ export CXX=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-g++ $ export LD=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld $ export AR=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar $ export AS=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-as $ export RANLIB=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ranlib ``` 其中,将`/path/to/ndk`替换成NDK的安装路径,将`android-xx`替换成对应的Android API版本。 4. 执行以下命令进行编译: ``` $ ./configure --disable-asm --prefix=/path/to/output --host=aarch64-linux-android $ make -j4 $ make install ``` 其中,将`/path/to/output`替换成自己想要输出的路径。 5. 编译完成后,可以将输出的动态库文件拷贝到Android项目中,并在项目中调用该文件。 通过以上步骤,就可以在Android平台上使用NDK直接编译x265的动态库了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值