package com.sundy.jnidemo;import android.app.Activity;
import android.os.Bundle;
import java.lang.*;
public class CMFJ extends Activity {
    /** Called when the activity is first created. */
static {
    System.loadLibrary("CMFJ");
} public native DiskInfo[] getStructArray(); @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        CMFJ changeJni = new CMFJ(); 
        System.out.println("------------------返回一个结构数组 -----------");  
             DiskInfo[] diskList = changeJni.getStructArray();  
             int i;
             for ( i = 0; i < diskList.length; i++) {  
                 System.out.println("name:" + diskList[i].name);  
                 System.out.println("Serial:" + diskList[i].serial);  
                }   }
}package com.sundy.jnidemo;
import java.lang.*;public class DiskInfo 
{   
  //名字   
  public String name;   
    
  //序列号   
  public int serial;    //定义构造函数
  DiskInfo(String name, int serial)
  {
     this.name = name;
     this.serial = serial;
  }   
}    
#include <stdio.h>  
#include <math.h>  
#include "jni.h"  
 #include <stdio.h>  
#include "stdlib.h"  
#include "string.h"  
  
#pragma comment (lib,"BaseInfo.lib")  
#pragma comment (lib,"jvm.lib")  
#include "com_sundy_jnidemo_CMFJ.h"#include "com_sundy_jnidemo_DiskInfo.h"
  
 struct   {  
   char str[256];  
  int serial;  
} DiskInfo;char* jstringToWindows( JNIEnv *env, jstring jstr );  
//将windows类型转换成jstring类型  
jstring WindowsTojstring( JNIEnv* env, char* str );  
  
//主函数    JNIEXPORT jobjectArray JNICALL Java_com_sundy_jnidemo_CMFJ_getStructArray  
(JNIEnv *env, jobject obj)  

    //申明一个object数组  
   jobjectArray args=0 ;  
     
   //数组大小  
    jsize     len = 5;  
 
    //获取object所属类,一般为ava/lang/Object就可以了  
    jclass objjClass = (*env)->FindClass(env,"java/lang/Object");  
  
    //新建object数组  
    args = (*env)->NewObjectArray(env,len, objjClass,0);  
  
   /**//* 下面为获取到Java中对应的实例类中的变量*/  
  
   //获取Java中的实例类  
    jclass objectClass = (*env)-> FindClass(env,"com/sundy/jnidemo/DiskInfo");   
 
     
    //获取类中每一个变量的定义  
    //名字  
 jmethodID init = (*env)->GetMethodID(env, objectClass , "<init>", "(Ljava/lang/String;I)V");   //给每一个实例的变量付值  
       jobject newObj = (*env)->NewObject(env, objectClass, init, (*env)->NewStringUTF(env, "my name is D:"), 10);
  
    //给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中  
int i;
    for( i=0; i < len; i++ )  
    {  
     
        //添加到objcet数组中  
        (*env)->SetObjectArrayElement(env,args, i, newObj);  
    }  
    //返回object数组  
    return args;  
  
}