zoukankan      html  css  js  c++  java
  • 【android 开 发 】

       Android 开发了一段时间,一方面 ,感觉不留下点什么。有点对不起自己,

    另一方面,好记性不如烂笔头,为了往后可以回头来看看,就当做是笔记,便决定开始写博客。废话不多说 !

     今天想搞一搞 ndk 和jni  ,, 现在开始写一个简单的demo

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





      

      demo地址:
      https://github.com/yipjunjie/JniDemo.git
      http://download.csdn.net/detail/sinat_25135485/9529409
      
  • 相关阅读:
    爬虫工具简单整理
    vue单页面处理SEO问题
    深入浅出MyBatis-快速入门
    js的匿名函数 和普通函数
    Javascript位置 body之前、后执行顺序!
    eclipse中的ctrl+H使用中的问题
    Eclipse中ctrl+shift+r与ctrl+shift+t的区别
    Java 判断字符串是否为空的四种方法、优缺点与注意事项
    eclipse 快捷键
    只缩进新加一段代码的方法
  • 原文地址:https://www.cnblogs.com/kelvinYip/p/5339858.html
Copyright © 2011-2022 走看看