1.å¼åAndroidç¨ä»ä¹è¯è¨ï¼
2.JAVA如何调用C语言编写的调的源调用程序,并且传参数,用c语读取返回结果?
å¼å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已经完成了。