【dnf聚物源码】【VMProtect程序源码】【pg源码分析】jdk调用c语言的源码_jdk命令调用

来源:视觉slam十四讲源码

1.开发Android用什么语言?
2.JAVA如何调用C语言编写的调的源调用程序,并且传参数,用c语读取返回结果?

jdk调用c语言的源码_jdk命令调用

开发Android用什么语言?

       è¿™æ ·å§ï¼ŒLZ,我先说一下APK,APK是Android的打包可安装的程序,本身APK又是由.dex文件和资源文件组成。.dex是Google对.class二进制文件的一种优化。也就是通常所说的sdk来进行操作的部分,那么既然是优化.class文件,当然少不了jdk。因此原生的Android程序一般都是java开发的。但是并不一定是要java语言开发,换句话说只要你的做法能够按照生产apk流程打包出来就可以。比如:你自己所选的语言编写->生成.class二进制码->生成.dex->打包资源->出现apk。但是如果用java的话直接就可以产生.class二进制文件,如果lz想用其他语言开发的话需要有相应的框架支持才可以。

       ä½†æ˜¯è¿™é‡Œè¯´çš„å’Œjava调用C的代码情况是不一样的。比如你的一个程序想调用C语言写的代码,你可以通过java里的JNI,将C编译成.so链接库,然后通过jni底层接口进行调用,但是这里的C写的部分仅仅是作为一个.so链接库而已。

JAVA如何调用C语言编写的程序,并且传参数,调的源调用读取返回结果?

       java要想调用c的用c语dnf聚物源码程序,那就要把c生成dll文件给java调用,码j命令VMProtect程序源码也就是调的源调用java调用dll文件,如何调用呢,用c语就要使用java的码j命令本地化方法JNI调用c的dll文件。

       1、调的源调用java部分。用c语

        实例1:Sample1.java文件

       public class Sample1 {

        public native int intMethod(int n);

        public native boolean booleanMethod(boolean

       bool);

        public native String stringMethod(String

       text);

        public native int intArrayMethod(int[] args);

       public static void main(String[] args)

       {

        System.loadLibrary("Sample1");

        Sample1 sample =

       new Sample1();

        int square =

       sample.intMethod(5);

        boolean bool =

       sample.booleanMethod(true);

        String text =

       sample.stringMethod("JAVA");

        int sum = sample.intArrayMethod(new

       int[] { 1,码j命令 1, 2, 3, 5, 8, });

        System.out.println("intMethod: " +

       square);

        System.out.println("booleanMethod: " +

       bool);

        System.out.println("stringMethod: " +

       text);

        System.out.println("intArrayMethod: " +

       sum);

        }

       }

       2、用javac编译成Sample1.class,调的源调用pg源码分析然后用javah编译Sample1,用c语生成Sample1.h文件。码j命令具体的命令如下:

        javac Sample1.java

        javah Sample1

       3、打开生成的pve源码编译Sample1.h,代码如下:

       #include <jni.h>

       #ifndef _Included_Sample1

       #define

       _Included_Sample1

       #ifdef __cplusplus

       extern "C"

       {

       #endif

       JNIEXPORT jint JNICALL Java_Sample1_intMethod

       (JNIEnv *, jobject, jint);

       JNIEXPORT jboolean JNICALL

       Java_Sample1_booleanMethod

        (JNIEnv *, jobject, jboolean);

       JNIEXPORT jstring JNICALL

       Java_Sample1_stringMethod

        (JNIEnv *, jobject, jstring);

       JNIEXPORT jint JNICALL

       Java_Sample1_intArrayMethod

        (JNIEnv *, jobject, jintArray);

       #ifdef __cplusplus

       }

       #endif

       #endif

       这个文件主要是为了生成java调用c的主要方法,也即是上面的几个方法。

       3、用c语言的laya源码网程序来实现上班生成的几个方法,即Sample1.c源代码如下:

       #include "Sample1.h"

       #include

       <string.h>

       JNIEXPORT jint JNICALL Java_Sample1_intMethod

        (JNIEnv

       *env, jobject obj, jint num) {

        return num *

       num;

        }

        JNIEXPORT jboolean JNICALL

       Java_Sample1_booleanMethod

        (JNIEnv *env, jobject obj, jboolean

       boolean) {

        return !boolean;

       }

        JNIEXPORT jstring JNICALL

       Java_Sample1_stringMethod

        (JNIEnv *env, jobject obj, jstring string)

       {

        const char *str = (*env)->GetStringUTFChars(env, string,

       0);

        char cap[];

        strcpy(cap,

       str);

        (*env)->ReleaseStringUTFChars(env, string,

       str);

        return (*env)->NewStringUTF(env,

       strupr(cap));

        }

        JNIEXPORT jint JNICALL

       Java_Sample1_intArrayMethod

        (JNIEnv *env, jobject obj, jintArray

       array) {

        int i, sum = 0;

        jsize len =

       (*env)->GetArrayLength(env,array);

        jint *body =

       (*env)->GetIntArrayElements(env, array, 0);

        for

       (i=0; i<len; i++){

        sum +=

       body[i];

        }

        (*env)->ReleaseIntArrayElements(env, array, body, 0);

        return sum;

        }

        void

       main(){ }

       4、创建dll文件。如果你的jdk的路径为C:\jdk\的话那么你可以用cl命令生成dll文件,但是你可能要安装vc

       windows平台命令如下:cl -IC:\jdk\include -IC:\jdk\include\win -LD Sample1.c

       -FeSample1.dll

       运行如上命令就可以生成你所需要的dll文件了

       5、如果上述都成功的话,那么我们的工作基本上就做完了,运行测试程序就可以的了,即运行Sample1.java,命令如下:

        java Sample

       如果运行成功的话,结果如下:

       intMethod:

        booleanMethod: false

        stringMethod: JAVA

        intArrayMethod:

       

       至此我们调用c已经完成了。

文章所属分类:焦点频道,点击进入>>