zoukankan      html  css  js  c++  java
  • Android studio 下 NDK Jni 开发 简单例子

    1. 创建一个新的工程


    2. 创建一个新的类 JniText.java  点击Build--Make Project  后 

        选中工程 点击F4键 sdk location 中 Android ndk location 选择配置ndk 的路径
        没有下载的可以到这下载:http://wear.techbrood.com/tools/sdk/ndk/
     

        保险起见 点击查看 local.properties 文件
        ndk.dir=D:\ndk\android-ndk-r10e
        sdk.dir=C:\Users\Administrator\AppData\Local\Android\sdk
        ok so good 下一步    


        查看 项目目录下的 E: extYipJniDemoappuildintermediatesclassesdebug 生成了class文件
        接下来 点击底下的Terminal窗口 cd 到当前项目目录
        E: extYipJniDemo>cd E: extYipJniDemoappuildintermediatesclassesdebug
         

       使用javah 生成头文件

        E: extYipJniDemoappuildintermediatesclassesdebug>javah -jni com.yip.yipjnidemo.JniText

        
        在 E: extYipJniDemoappuildintermediatesclassesdebug
        下可以看到生成的 com_yip_yipjnidemo_JniText.h
       
    复制代码
     1 /* DO NOT EDIT THIS FILE - it is machine generated */
     2 #include <jni.h>
     3 /* Header for class com_yip_yipjnidemo_JniText */
     4 
     5 #ifndef _Included_com_yip_yipjnidemo_JniText
     6 #define _Included_com_yip_yipjnidemo_JniText
     7 #ifdef __cplusplus
     8 extern "C" {
     9 #endif
    10 /*
    11  * Class:     com_yip_yipjnidemo_JniText
    12  * Method:    getCLangString
    13  * Signature: ()Ljava/lang/String;
    14  */
    15 JNIEXPORT jstring JNICALL Java_com_yip_yipjnidemo_JniText_getCLangString
    16   (JNIEnv *, jobject);
    17 
    18 #ifdef __cplusplus
    19 }
    20 #endif
    21 #endif
    复制代码
        
        在项目的src 文件下的    创建jni文件夹 注意 (右键main - new - Folder - JniFolder )
        将生成的文件 com_yip_yipjnidemo_JniText.h 剪切到jni文件夹下

     

       在jni 目录下创建一个com_yip_yipjnidemo_JniText.c 文件

      
    复制代码
     1 #include "com_yip_yipjnidemo_JniText.h"
     2 /*
     3  * Class:     io_github_yanbober_ndkapplication_NdkJniUtils
     4  * Method:    getCLanguageString
     5  * Signature: ()Ljava/lang/String;
     6  */
     7 JNIEXPORT jstring JNICALL Java_com_yip_yipjnidemo_JniText_getCLangString(JNIEnv *env, jobject obj)
     8 {
     9   return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
    10 }
    复制代码
    
    
     下一步, 在app的build.gradle;

       
    1 defaultConfig下添加
    2     ndk{
    3         moduleName "jnitext"         //生成的so名字
    4             abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。目前可有可无。
    5     }

        
        点击 make-project
        生成  .so 库
        此时报了 Error:(13, 0) Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.
    <a href="openFile:E: extMyJniDemoappuild.gradle">Open File</a>
        没关系
     

        我们在   工程下的gradle.properties 添加属性
        
      android.useDeprecatedNdk=true  

       此时 补全 .YipJniDemo下MainActivity的代码
    复制代码
     1 package com.yip.yipjnidemo;
     2 
     3 import android.app.Activity;
     4 import android.support.v7.app.AppCompatActivity;
     5 import android.os.Bundle;
     6 import android.widget.TextView;
     7 
     8 public class MainActivity extends Activity {
     9 
    10 
    11     private TextView txtView;
    12 
    13     @Override
    14     protected void onCreate(Bundle savedInstanceState) {
    15         super.onCreate(savedInstanceState);
    16         setContentView(R.layout.activity_main);
    17         txtView= (TextView) findViewById(R.id.txt_jnitext);
    18         JniText jniText=new JniText();
    19         txtView.setText(jniText.getCLangString());
    20     }
    21 }
    复制代码

       JniText:
    复制代码
     1 package com.yip.yipjnidemo;
     2 
     3 /**
     4  * Created by Administrator on 2016/2/22.
     5  */
     6 public class JniText {
     7     static {
     8             System.loadLibrary("jnitext");   //defaultConfig.ndk.moduleName
     9         }
    10     public native String getCLangString();
    11 }
    复制代码

       
    ps:  生成的. so文件有些盆友找不到 。其实是在这里的。





       
  • 相关阅读:
    linux 短信收发
    sama5d3 环境检测 adc测试
    【Codeforces 723C】Polycarp at the Radio 贪心
    【Codeforces 723B】Text Document Analysis 模拟
    【USACO 2.2】Preface Numbering (找规律)
    【Codeforces 722C】Destroying Array (数据结构、set)
    【USACO 2.1】Hamming Codes
    【USACO 2.1】Healthy Holsteins
    【USACO 2.1】Sorting A Three-Valued Sequence
    【USACO 2.1】Ordered Fractions
  • 原文地址:https://www.cnblogs.com/chenxibobo/p/6434738.html
Copyright © 2011-2022 走看看