欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]android studio NDK折腾记

[原创]android studio NDK折腾记

原文发表在http://mybeibei.net/?p=1039
为了学习cydia_substrate框架,要在Android Studio上搭建NDK环境,网上查了好多教程,也询问了一些android的群,各种不行,折腾了一下午,最终发现是NDK版本问题(之前用ndk r8版本),最终解决,特将配置流程记下,以免其它像我这样的菜鸟再次入坑:
一、环境准备:
Android Studio(用的是1.3.2版本)
NDK(android-ndk-r11版本)
二、配置开始:
1.创建新的一个project,并建立一个blank Activity
2.在MainActivity.java中增加一个方法

public native String getStringFromNative();

此时“getStringFromNative()”会有红色报错,不用管它,继续下一步
3.打开as的Teminal,进入到app/src/main/java目录下,输入:javah -d ../jni com.kuhn.myjni.MainActivity,如果没有任何报错,这时as刷新后,会多出一个jni的文件夹,该文件夹下会出现com.kuhn.myjni.MainActivity.h文件,文件内容类似下面这样:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class com_kuhn_mykuhn_MainActivity */

 

#ifndef _Included_com_kuhn_mykuhn_MainActivity

#define _Included_com_kuhn_mykuhn_MainActivity

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     com_kuhn_mykuhn_MainActivity

 * Method:    getStringFromNative

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_com_kuhn_mykuhn_MainActivity_getStringFromNative

  (JNIEnv *, jobject);

 

#ifdef __cplusplus

}

#endif

#endif


4.接着,修改local.properties文件,末尾增加ndk路径:

ndk.dir=D\:\\android-ndk-r11


5.修改app下的build.gradle,在defaultConfig 中增加

ndk {

    moduleName "jni"  //你的so库文件名

}


6.在jni目录下新建一个.c文件,我的叫“jni.c”,然后将.h头文件包含进去,并写入相应代码:

//

// Created by Kuhn on 2016/3/17.

//

#include "com_kuhn_mykuhn_MainActivity.h"

JNIEXPORT jstring JNICALL Java_com_kuhn_mykuhn_MainActivity_getStringFromNative

        (JNIEnv * env, jobject obj){

    return (*env)->NewStringUTF(env,"I'm comes from to Native Function!");

}

如果正确无报错的话,左侧会出现红绿色的相交箭头,表示方法调用了:

7.MainActivity.java中增加相应调用代码:

public class MainActivity extends AppCompatActivity {

    TextView tv = null;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        tv = (TextView)findViewById(R.id.tv);

        tv.setText(getStringFromNative());

    }

    public native String getStringFromNative();

    static {

        System.loadLibrary("jni");

    }

}


8.最后在gradle.properties文件中,末尾增加

android.useDeprecatedNdk=true

,否则会运行报错
9.OK,大功告成,上图:

上传的附件 QQ图片20160317112338.png
6.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功