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文件有些盆友找不到 。其实是在这里的。





       
  • 相关阅读:
    swift
    swift
    c# 根据自定义Attribute排序
    asp.net 导出excel
    算法时间复杂度的计算 [整理]
    再谈javascript原型继承
    深入学习JavaScript: apply 方法 详解(转)——非常好
    Chapter 6 : Control Statements : Looping
    Chapter 6 : Applications of Definite Integrals
    朋友圈仅三天可见?怎么破?
  • 原文地址:https://www.cnblogs.com/chenxibobo/p/6434738.html
Copyright © 2011-2022 走看看