关闭

AndroidStudio如何快速制作.so

标签: jni
2534人阅读 评论(3) 收藏 举报
分类:

  之前写过一篇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(注意是app目录下而不是根目录下)文件,修改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放入:


再次运行>>:



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


多种cpu类型,可在abiFilters后添加cpu类型即可,如

 ndk {
            moduleName "jnitest"
            ldLibs "log", "z", "m"
            abiFilters "armeabi","x86"
        }
运行结果:



3
4
查看评论

AndroidStudio 编译C/C++文件生成SO文件

之前写过一篇关于Eclipse生成SO文件的文章,里面有详细的步骤,有兴趣的同学可以去看看 【第一节】android增量升级之生成so文件 该篇文章主要讲如何用AndroidStudio生成SO文件 新建一个Project新建一个JniExample Project,包名为com.jni...
  • krubo1
  • krubo1
  • 2016-01-20 12:10
  • 17227

android studio之jni(上)生成so文件

使用android studio做ndk开发相对于eclipse无疑要简单很多,那么下面我将做详细的步骤介绍: 1、下载ndk (最好使用最新版本的ndk ,我现在使用的ndk版本是android-ndk-r11c,studio版本是2.1.1) 2、新建项目 3、设置ndk路径 4、新建一...
  • wangsfine
  • wangsfine
  • 2016-05-19 09:50
  • 4082

Android使用已有so库自己实现jni封装

为什么写这个最近项目需要在盒子上实现内容的加解密,方案是使用机顶盒内部主芯片加解密算法对存储在内容分区的资源进行加密,然后由机顶盒平台提供本地库的方式给应用使用。所以也就有了这个事情。一般情况下,完全可以由C层代码直接实现和封装JNI本地接口然后打成so文件,然后提供给应用开发者使用。 今天要说的...
  • ForeverSunshine
  • ForeverSunshine
  • 2016-11-30 21:07
  • 3692

android NDK JNI so文件的制作和使用

参考: java jni 入门1 - 一个简单的从Java程序中调用C函数 : http://blog.csdn.net/u012005313/article/details/49644283 ######################################...
  • u012005313
  • u012005313
  • 2016-07-23 20:11
  • 10811

Android Studio制作.so库实践

前言因为工作需要可能要用到JNI开发,本篇文章就分享一下我在这方面的实践,以前我们使用Eclipse做NDK开发,非常麻烦,需要配cygwin的编译环境,后面NDK功能完善才逐渐简单点,如果想了解Eclipse如何配置NDK编译环境可以参考我以前发表的旧文:Cocos2d-x 2.2.3 使用NDK...
  • wwj_748
  • wwj_748
  • 2016-04-28 16:01
  • 9174

Android Studio 简单生成so文件并调用

今天就不扯别的了,直接喝酒 平台:windows IDE :Android Studio 下载好ndk:下载地址 https://developer.android.com/ndk/downloads/index.html第1步:新建一个Android Studio 工程 JniHelloWo...
  • leilifengxingmw
  • leilifengxingmw
  • 2017-05-10 23:11
  • 1460

android studio NDK使用,编译c生成.so实践记录

开发环境,android studio 2.1.2,SDK环境和NDK环境 SDK不说了,NDK环境配置网上也有很多,这里就简单记录下: 1 下载NDK并安装到电脑 D:\android\android-ndk-r11c 2 android studio中右键项目进入菜单配置NDK ...
  • u010030505
  • u010030505
  • 2016-07-18 15:08
  • 5557

安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)

前言以前也讲过NDK开发,但是开始是抱着好玩的感觉去开始的,然后呢会helloWord就觉得大大的满足,现在静下来想这NDK开发到底是干什么呢? NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西;另外就是为了效率更加高效些但是在java与C相互调用时平白又增大了开销(其实效率不见...
  • u013278099
  • u013278099
  • 2016-07-17 00:56
  • 11264

android studio下JNI生成so文件

1.下载NDK文件 我下的android-ndk-r13b-windows-x86_64.zip,解压,配置环境变量 (图片网上截取的,仅供参考)cmd下测试ndk是否按照成功,如果成功如下所示: (图片网上截取的,仅供参考)Android studio工具里ndk相关配置ndk从此处下载...
  • shanjianxiliulc
  • shanjianxiliulc
  • 2016-11-15 16:24
  • 1521

AndroidStudio 编译C/C++文件生成SO文件

  • 2016-01-20 12:43
  • 10.45MB
  • 下载
    个人资料
    • 访问:356041次
    • 积分:4783
    • 等级:
    • 排名:第7149名
    • 原创:95篇
    • 转载:10篇
    • 译文:0篇
    • 评论:395条
    我的微博
    微信公众号AndroidMax
    博客专栏
    最新评论