转载请注明:http://blog.csdn.net/u012255016/article/details/51026437

步骤:

1、创建一个android工程

2、编译工程,Buiid->Make Project生成class文件

3、配置NDK

4、创建一个NdkUtil类

5、创建main.c和一个空的c文件empty.c

6、编译工程,生成so文件

7、复制so文件到jniLibs下

8、完成使用

具体实现:

1、创建一个android工程(这个就不废话了)

2、编译工程,Buiid->Make Project生成class文件,生成.h头文件

(1)点击"View->Tool Windows->Terminal",即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件。

操作命令: javah -d jni -classpath ;<编译后的class文件的绝对路径> <包名>.MainActivity 例:javah -d jni -classpath D:\Android\sdk\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug com.czz.widgetdemo.MainActivity
或  javah -d jni -classpath G:\czz_svn\FFmpegAndroid\app\build\intermediates\classes\debug com.czz.widgetdemo.MainActivity (前期要配环境变量

修改电脑的环境变量,添加一个变量,变量名:ANDROID_HOME  变量值 :是你sdk的路径   比如我的是D:\Android\android-sdk

然后修改ClassPath最后添加 

%ANDROID_HOME%\platforms\android-22\android.jar;%ANDROID_HOME%\extras\android\support\v4\android-support-v4.jar;%ANDROID_HOME%\extras\android\support\v7\appcompat\libs\android-support-v7-appcompat.jar

重温android studio jni编译生成so文件_第1张图片


3、配置NDK

(1)在local.properties文件添加ndk路径,没有ndk,自行下载http://wear.techbrood.com/tools/sdk/ndk/

重温android studio jni编译生成so文件_第2张图片


(2)修改build.gradle配置(注:生成so文件过后请注释掉)

重温android studio jni编译生成so文件_第3张图片


4、创建一个NdkUtil类,创建的方法请与so文件的c方法一致

注:我们生成的so文件全名是libmyso.so,使用时是myso

package com.czz.widgetdemo;/** * Created by czz on 2016/3/31. */public class NdkUtil {    static {        System.loadLibrary("myso");    }    public static native String getStringFromNative();}


5、创建main.c和一个空的c文件empty.c

重温android studio jni编译生成so文件_第4张图片

/* DO NOT EDIT THIS FILE - it is machine generated */  #include   #include     #ifndef LOG_TAG  #define LOG_TAG "ANDROID_LAB"  #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)  #endif#ifndef _Included_com_czz_widgetdemo_MainActivity#define _Included_com_czz_widgetdemo_MainActivity#ifdef __cplusplus extern "C" {    #endifJNIEXPORT jstring JNICALL Java_com_czz_widgetdemo_NdkUtil_getStringFromNative(JNIEnv * env, jobject jObj){      return (*env)->NewStringUTF(env,"czz重温android studio生产so文件");  }    #ifdef __cplusplus}#endif#endif


6、编译工程,Buiid->Make Project,生成so文件

生成的文件目录在:工程名\app\build\intermediates\ndk\debug\lib

重温android studio jni编译生成so文件_第5张图片


7、复制so文件到jniLibs下

在main文件夹下创建jniLibs文件夹,复制so文件存放于此

重温android studio jni编译生成so文件_第6张图片

8、完成,使用

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView tv = (TextView) findViewById(R.id.id_text);        tv.setText(NdkUtil.getStringFromNative());    }}


遇到的error:

Error:Execution failed for task ':app:compileDebugNdk'.> NDK not configured.Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.(On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)

解决方法:local.properties文件,配置ndk路径

Error:Execution failed for task ':app:compileDebugNdk'.> com.android.ide.common.internal.LoggedErrorException: Failed to run command:D:\Android\android-ndk-r10\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\AndroidWork3\WidgetDemo\app\build\intermediates\ndk\debug\Android.mk APP_PLATFORM=android-21 NDK_OUT=D:\AndroidWork3\WidgetDemo\app\build\intermediates\ndk\debug\obj NDK_LIBS_OUT=D:\AndroidWork3\WidgetDemo\app\build\intermediates\ndk\debug\lib APP_ABI=armeabi,x86_64,x86,armeabi-v7aError Code:2Output:make.exe: *** No rule to make target `D:\AndroidWork3\WidgetDemo\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/myso/D_\AndroidWork3\WidgetDemo\app\src\main\jni', needed by `D:\AndroidWork3\WidgetDemo\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/myso/D_\AndroidWork3\WidgetDemo\app\src\main\jni\main.o'.  Stop.

解决方法:创建一个空的empty.c文件

Native method not found: com.czz.widgetdemo.NdkUtil.getStringFromNative:()Ljava/lang/String;

解决方法:修改main.c文件的方法名一致,Java_com_czz_widgetdemo_NdkUtil_getStringFromNative,其中_com_czz_widgetdemo是包名com.czz.widgetdemo,_NdkUtil是类名





更多相关文章

  1. Android 笔记:读取配置文件config.properties
  2. Android模仿表单上传文件
  3. 在android源码中单独编译modkoid工程遇见的问题
  4. 文件androidAndroid使用PULL解析和生成XML文件
  5. android通过JNI用C/C++创建本地文件
  6. android 开发之文件下载
  7. Android 第三方库使用实例——编写.so库文件

随机推荐

  1. Android中Service服务详解(二)
  2. Android(安卓)UI之困境:统一还是分化
  3. Ubuntu android 模拟器安装、卸载apk
  4. 开源中国 OsChina Android(安卓)客户端源
  5. [android开发之内容更新类APP]三、项目的
  6. 关于Android多进程
  7. Android系统启动流程简析
  8. Android(安卓)中音频视频开发
  9. 130292015042-廖若萱-第一章作业
  10. 从零开始--系统深入学习android(已完成部