码迷,mamicode.com
首页 > 移动开发 > 详细

AndroidStudio如何快速制作.so

时间:2016-04-05 16:20:35      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

  之前写过一篇Eclipse制作.so的文章,http://blog.csdn.net/baiyuliang2013/article/details/44306921使用的是GNUstep模拟Linux环境,过程现在看来是想相当麻烦,后来发现一个简单的方法就是通过项目右键添加Native Supprot...可以快速创建.so而不使用命令行,

技术分享


由于AS越来越被大家使用,所以Eclipse的制作过程就不再写了,这篇主要讲的是如何用AS快速制作一个简单的.so文件!

       如果之前对制作.so一点了解也没有的话,在看这一篇之前可以看下文章开头提到的文章,会对这篇文章的理解上有所帮助,因为本篇文章不打算讲解的太过详细!


步骤1:

创建一个新的AS项目(模板选择EmptyActivity即可)jnitest,包名:com.byl.jnitest:

技术分享


步骤2:

添加NDK支持:

按Ctrl+Alt+Shift+S,出现如图:

技术分享

ok,完成后,打开项目根目录下的local.properties文件:

技术分享

ndk的路径会自动添加进来,表示操作成功!


步骤3:

打开根目录下gradle.properties文件,添加代码:

android.useDeprecatedNdk=true
技术分享

步骤4:

项目>app>src>main文件夹下,新建jni文件夹,并放入三个文件.h、.c、.c:

技术分享

注意:

  .h文件命名的命名方式,包名+调用.so的Activity名且"."需要更换成下滑线"_";

  jnitest.c的命名可以随便定义;

  util.c是一个空的.c文件,作用就是在ndk编译时避免一个错误:

make.exe: *** No rule to make target

com_byl_jnitest_MainActivity.h:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_byl_jnitest_MainActivity */

#ifndef _Included_com_byl_jnitest_MainActivity
#define _Included_com_byl_jnitest_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_byl_jnitest_MainActivity
 * Method:    getSec
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_byl_jnitest_MainActivity_getSec
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

jnitest.c:

#include  <string.h>
#include  <jni.h>

jstring
Java_com_byl_jnitest_MainActivity_getSec
   (JNIEnv* env,jobject thiz){
	return (*env)->NewStringUTF(env,"调用jni成功");
}


步骤5:

在MainActivity中调用.so:

    public static native String getSec();//.so中的方法名

    static{
        System.loadLibrary("jnitest");
    }

注意:.so最终的名称默认为lib+项目名如:libjnitest.so。

技术分享


步骤6:

最后一步,打开app目录下build.gradle文件,修改gradle配置:

 defaultConfig {
        applicationId "com.byl.jnitest"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "jnitest"
            ldLibs "log", "z", "m"
            abiFilters "armeabi"
        }
    }

技术分享


以上步骤全部完成后,直接点击run>>:

技术分享

运行必然要报错的,因为之前.so文件并不存在,经此一调,ndk便自动为我们生成了想要的东西:

技术分享

将.so文件复制出来,然后在main文件夹下建立jniLibs/armeabi,并将.so放入:

技术分享

再次运行>>:

技术分享


此例只是简单的输出一个字符串,一般的项目放入一个不想外露的密钥之类的还是非常有用的!

AndroidStudio如何快速制作.so

标签:

原文地址:http://blog.csdn.net/baiyuliang2013/article/details/51063797

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!