Android studio NDK demo

本文使用的是Android studio 2.0:

新建工程 并添加一个新的类

工程

NDKTest.java
1.加载即将生成的.so文件
2.native接口

package com.example.test.demo;

/**
 * Created by admin on 2017/8/20.
 */
public class NDKTest {

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

    public native String getString();
}

进行编译 会在的build文件加下生成对应的class文件,如下图所示


这里写图片描述

(此处要切换到project模式下)

生成.h文件 添加.c文件 编译生成.lib文件

命令行切换到你的工程main目录下
D:\demo\app\src\main>javah -d jni -classpath D:\demo\app\build\intermediates\classes\debug com.example.test.demo.NDKTest
运行后 在该目录下将会生成jni/com_example_test_demo_NDKTest.h

这里写图片描述

在该目录下添加.c文件com_example_test_demo_NDKTest.c

#include "com_example_test_demo_NDKTest.h"

JNIEXPORT jstring JNICALL Java_com_example_test_demo_NDKTest_getString
        (JNIEnv *env, jobject jobject){
        return (*env)->NewStringUTF(env, "hello ndk test");
} 

build.gradle 文件添加配置


这里写图片描述

此处moduleName就是创建的java文件加载的库 要保持一致

ndk {
            moduleName "nkdTest"//与自己创建类加载的库名一致
            abiFilters "armeabi", "armeabi-v7a", "x86"
            stl "stlport_static"
        } 

编译与运行

编译成功后会生成.lib文件


这里写图片描述

在MainActivity.java修改

package com.example.test.demo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = (TextView)findViewById(R.id.test);//此处id在main自定义
        textView.setText(new NDKTest().getString());
    }
}
 

可能出现的错误:

Consider trying the new experimental pluginSet "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration

按照提示在gradle.properties文件中末尾添加android.useDeprecatedNdk=true

Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
...
...

修改版本 重新运行


这里写图片描述

运行结果:


这里写图片描述
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • demo链接在文末。 在Android Studio中有3种方法生成so文件。 最初的时候,我曾经使用过Visua...
    梧叶已秋声阅读 34,100评论 5 26
  • 一、NDK产生的背景 Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于J...
    Ten_Minutes阅读 8,962评论 1 27
  • 撰文 | 晟宇 编辑 | 冰清 只有承认自己的无知,才能阔步向前。 《罗辑思维》对于教育分层的阐述,引发了一阵关于...
    malvaceae阅读 1,326评论 0 0
  • 时间不会因为你的喜怒哀乐而静止,他总是悄无声息地在你的身边划过,想抓抓不住,想留留不下!回首时,你才发现,时间越久...
    小鲸鱼0573阅读 1,352评论 0 0