zoukankan      html  css  js  c++  java
  • windows环境 andorid JNI开发

    1.下载并安装GNUstep

        下载地址:http://www.gnustep.org/experience/Windows.html

         安装文件

            a.GNUstep MSYS System

            b.GNUstep Core

            c.GNUstep Devel

          安装以上文件最新版本,都默认安装在同一个目录.

         安装完成后,进入GNUstep菜单,选择shell,进入一个linux的命令界面,输入gcc -v ,如果显示一下gcc的版本信息,安装成功了.我安装的时候,没有安装GNUstep Deve,导致没有正确显示命令      结果,所以这个三个文件是必须安装的

     2.在eclipse新建一个android程序.

       

       在HelloJni Activity中:

       

    /**
     * 
     */
    package com.hello.jni;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    /**
     * @author Johnson
     * TODO
     * 2013-11-25下午4:13:00
     */
    public class HelloJni extends Activity {
    
        /**
         * 
         */
        public HelloJni() {
            // TODO Auto-generated constructor stub
        }
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            String hello = sayHello("johnson");
            TextView tv = (TextView) findViewById(R.id.showtext);
            tv.setText(hello);
        }
    
        public native String sayHello(String name);
        static{
            System.loadLibrary("HelloJNI");
        }
    
    }

    3.生成com_hello_jni_HelloJni.h文件

       在windows命令行下,进入到项目地址/bin/classes目录下

       执行 javah com.hello.jni.HelloJni    

       生成的com_hello_jni_HelloJni.h

       

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_hello_jni_HelloJni */
    
    #ifndef _Included_com_hello_jni_HelloJni
    #define _Included_com_hello_jni_HelloJni
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_hello_jni_HelloJni
     * Method:    sayHello
     * Signature: (Ljava/lang/String;)Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_hello_jni_HelloJni_sayHello
      (JNIEnv *, jobject, jstring);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

        javah 包路径.调用JNI的Activity类的名称.  在之前先build项目,生成classes文件.

    4.编写com_hello_jni_HelloJni.c文件

      将生成的com_hello_jni_HelloJni.h文件移动到jni文件夹下,在jni文件夹下创建com_hello_jni_HelloJni.c文件

      

    #include <string.h>
    #include <com_hello_jni_HelloJni.h>
    
    /* This is a trivial JNI example where we use a native method
     * to return a new VM String. See the corresponding Java source
     * file located at:
     *
     *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
     */
    
    jstring Java_com_hello_jni_HelloJni_sayHello( JNIEnv* env,jobject thiz, jstring inputstr )
    {
       return (*env)->NewStringUTF(env, "Hello from JNI !");
    }

     可以直接将com_hello_jni_HelloJni.h中的接口,拷贝到com_hello_jni_HelloJni.c中来,添加上参数,创建方法体.

     方法名称和参数要和com_hello_jni_HelloJni.h中的一致.

    5.编写Android.mk文件

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE    := HelloJNI
    LOCAL_SRC_FILES := com_hello_jni_HelloJni.c
    
    include $(BUILD_SHARED_LIBRARY)
    LOCAL_MODULE  改成自己项目名称
    LOCAL_SRC_FILES 改成自己c文件的名称

    6.生成.so文件
    进入GNUsetp shell
    进入到项目的jni目录下
    执行 ndk安装路径/ndk-build

    成功生成libs/armeabi/libHelloJNI.so
    如果生成失败,请仔细查看日志,一般是
    com_hello_jni_HelloJni.c参数问题,或者方法体内问题.

    7.启动项目
    如果是报loadLibrary,请检查 System.loadLibrary("HelloJNI");里面调用的名称是否与libHelloJNI.so对应.调用名称为HelloJNI,lib是系统默认的前缀.不用写.


  • 相关阅读:
    ORM中的事务和锁
    双下划线跨表查询 聚集查询 分组查询 FQ查询
    cookie和session
    多表查询
    单表查询
    ORM
    Djangon之模板
    Django之视图函数
    Django之URL路由系统
    web框架的本质及自定义web框架
  • 原文地址:https://www.cnblogs.com/John5/p/helloworld.html
Copyright © 2011-2022 走看看