新年新气象! 新的一年里虽然各种乱七八糟事,不过还是要满怀希望吧。 不然整天郁郁闷的过也挺悲剧的,所以还是要开开心心个过完每一天!闲话不多说了,最近接触了新的项目,3D视频播放,APP基本上都是JNI实现功能,之前没具体学习过,现在将学习的记录下:Eclpse就不多说了,现在基本不怎么用了。
1。首先新建一个工程:在MainActivity的onCreate()之前写好native 方法以及System.loadLibrary()方法:在写native方法的时候会显示红色报错(即方法不存在),先不管。
public class MainActivity extends AppCompatActivity { static { System.loadLibrary("hello_jni"); } public native String getStringFromC(); @Bind(R.id.textview) TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initData(); } private void initData() { textview.setText(getStringFromC()); } @OnClick(R.id.textview) public void onClick() { Toast.makeText(this, "点点点点点点点点点点", Toast.LENGTH_SHORT).show(); } }2. 点击"View->Tool Windows->Terminal",即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件。
在命令行中cd到app的src /main/ java的文件夹下,然后执行javah -d jni (或者javah -d ../jni )native方法所在的包名+类名,中间使用“.”号分开。然后点击
例如:F:\Demo\MyApplication>cd app/src/main/java javah -d jni com.vstar.xy.myapplication.MainActivity
3.在执行完上一部操作后,在app/src/main下会自动生成名为jni的文件夹(同java文件夹一个层级),在文件夹下会有com_vstar_xy_myapplication_MainActivity.h的文件。
4.在jni的文件夹下创建 @@@.c的文件,(点击jni右击,new ——>File),此处命名为hello_jni.c。里面执行简单的方法(返回一个String字符串)
#include<com_vstar_xy_myapplication_MainActivity.h> JNIEXPORT jstring JNICALL Java_com_vstar_xy_myapplication_MainActivity_getStringFromC(JNIEnv*env,jobject obj ){ return (*env)->NewStringUTF(env,"Hello From JNI! 我勒个去!"); }5.同样的在jni文件下创建名为Android.mk和Application.mk的文件:里面的内容分别是:
Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE :=hello_jni LOCAL_SRC_FILES := hello_jni.c include $(BUILD_SHARED_LIBRARY)
Application.mk:
APP_ABI := all APP_OPIM :=debug6.在app文件夹下的 build.gradle中 defaultConfig 添加
ndk{ moduleName"hello_jni" ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" }
7.在MyApplication文件夹下的 local.properties 设置ndk的位置(首先你得下载Android NDK,android-ndk-r10e,然后点击File-->Project Structure,选择SDK Location,然后相应的设置 SDK,JDK,NDK的位置):
ndk.dir=F\:\\Android\\NDK\\android-ndk-r10e sdk.dir=F\:\\Android\\SDK8.在MyApplication文件夹下的 gradle.properties 中设置
android.useDeprecatedNdk=true
9.运行程序。
以上基本上步骤就结束了。