汽车内饰件名称:Android-NDK开发之第四个例子--用C/C 调用Java
来源:百度文库 编辑:偶看新闻 时间:2024/05/01 16:36:56
Android-NDK开发之第四个例子--用C/C++调用Java收藏
用C/C++调用Java的方法我没有去研究,也不知道从哪里开始研究,对Linux我了解到很少,希望有朋友可以给些资料,我的水平很差,望大家多多包涵。
这个例子是别人的代码,我忘记从来里弄来的了,先对原作者表示抱歉。同时代码也被我修改过,再次道歉。
而此文和别的文章一样,只是作为我平时学习积累的验证。
1. Android.mk文件:
LOCAL_SRC_FILES参数用空格隔开
view plaincopy to clipboardprint?- LOCAL_PATH:=$(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE:=native
- LOCAL_SRC_FILES:=geolo.cpp my_jni.h
- include $(BUILD_SHARED_LIBRARY)
2. geolo.cpp
先用FindClass方法找到java类,有点类似java的反射用LoadClass
再用CallObjectMethod方法调用Java类的函数。
view plaincopy to clipboardprint?- #include "my_jni.h"
- jobject getInstance(JNIEnv* env, jclass obj_class){
- jmethodID construction_id = env->GetMethodID(obj_class, "
", "()V"); - jobject obj = env->NewObject(obj_class, construction_id);
- return obj;
- }
- JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv* env, jobject thiz){
- jstring str;
- jclass java_class = env->FindClass("com/easepal/geolo/CForCall");
- if (java_class == 0){
- return env->NewStringUTF("not find class!");
- }
- jobject java_obj = getInstance(env, java_class);
- if (java_obj == 0){
- return env->NewStringUTF("not find java OBJ!");
- }
- jmethodID java_method = env->GetMethodID(java_class, "GetJavaString", "()Ljava/lang/String;");
- if(java_method == 0){
- return env->NewStringUTF("not find java method!");
- }
- str = (jstring)env->CallObjectMethod(java_obj, java_method);
- return str;
- }
3. my_jni.h
view plaincopy to clipboardprint?- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include
- /* Header for class com_easepal_geolo_CActivityMain */
- #ifndef _Included_com_easepal_geolo_CActivityMain
- #define _Included_com_easepal_geolo_CActivityMain
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: com_easepal_geolo_CActivityMain
- * Method: stringFromJNI
- * Signature: ()Ljava/lang/String;
- */
- JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv *, jobject);
- #ifdef __cplusplus
- }
- #endif
- #endif
4. CActivityMain.java
view plaincopy to clipboardprint?- package com.easepal.geolo;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class CActivityMain extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- TextView tv = new TextView(this);
- tv.setText( stringFromJNI("hello") );
- setContentView(tv);
- }
- static {
- System.loadLibrary("native");
- }
- public native String stringFromJNI(String str);
- }
5. CForCall.java
view plaincopy to clipboardprint?- package com.easepal.geolo;
- public class CForCall{
- public CForCall(){};
- //public ~CForCall(){};
- public String GetJavaString(){
- String str;
- str = "123456";
- return str;
- }
- }
paranoid android中文歌词
.net开发ERP有例子吗
.net开发ERP有例子吗?
西部开发之路
radiohead 的 Paranoid Android 中文翻译
vs2005 有没有企业开发例子 如:Duwamish 7 (.NET)
那有用VS2005开发ASP.NET 2.O的例子
失败是成功之母例子
“有业之必要”的例子
博学之,审问之,慎思之,明辨之,笃行之 名人例子
软件公司的自主开发之路
编程语言与它的集成开发环境有什么关系??举几个例子好吗??
如何写一份完备的项目开发计划?有例子吗?
谁有蓝牙(BlueTooth)应用程序的开发例子,或者是详细的介绍资料?
哪位高人能举(特别详细的)一个用delphi开发报表的例子
请问哪里有关于组态软件设计与开发(VC++6.0)的例子或参考资料下载?
怎样开发一个人的潜力?有什么好方法?小例子就可以!
请问谁做青牛平台开发的,有外拨电话和自建聊天室的例子给一份吗?
管理信息系统:实际例子说明加强基础管理工作对系统开发的重要性
哪有一个开发ABAP报表的详细的例子啊,全部的解析都有的??
现在使用C++的一般都是开发什么的?举下例子!~
文言文中之 其 而 夫的用法?要例子
关于事物高低贵贱之分的例子
有关细节之重要的例子有什么?