博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android114 c转换成c++
阅读量:6430 次
发布时间:2019-06-23

本文共 2421 字,大约阅读时间需要 8 分钟。

##C向C++改造1. 把c文件后缀名换成cpp2. Android.mk文件中的hello.c也要换成hello.cpp3. c++的使用的环境变量结构体中,访问了c使用的结构体的函数指针,函数名全部都是一样的,只是参数去掉了结构体指针4. 访问函数指针时,把env前面的*号去掉,因为此时env已经是一级指针5. clean,清除之前编译的残留文件6. 把声明函数的h文件放入jni文件夹中,include该h文件jni是java和C的中间人。其余都一样,hello.cpp

#include <jni.h>

#include "com_itheima_cplusplus_MainActivity.h"//C++函数要声明在使用,并把这个文件放入jni文件夹中,

JNIEXPORT jstring JNICALL Java_com_itheima_cplusplus_MainActivity_helloC

(JNIEnv * env, jobject obj){
char* cstr = "hello from c";
//return (*env)->NewStringUTF(env, cstr);   这是c的写法
return env->NewStringUTF(cstr);
}

 

activity:

package com.itheima.cplusplus;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {    static{        System.loadLibrary("hello");    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click(View v){        Toast.makeText(this, helloC(), 0).show();    }        public native String helloC();}

Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := helloLOCAL_SRC_FILES := hello.cppinclude $(BUILD_SHARED_LIBRARY)

com_itheima_cplusplus_MainActivity.h

/* DO NOT EDIT THIS FILE - it is machine generated */#include 
/* Header for class com_itheima_cplusplus_MainActivity */#ifndef _Included_com_itheima_cplusplus_MainActivity#define _Included_com_itheima_cplusplus_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class: com_itheima_cplusplus_MainActivity * Method: helloC * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_itheima_cplusplus_MainActivity_helloC (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif

分支c进程

#include 
#include
#define LOG_TAG "System.out" //重命名#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)//重命名#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)//重命名void Java_com_itheima_fork_MainActivity_callC(JNIEnv * env, jobject obj){ //在当前进程分支出c进程,即使把java进程杀了,C进程也杀不掉,同时c进程可以把java进程又启动起来。 int pid = fork(); //如果为0,分支成功 if(pid == 0){ while(1){ LOGI("hello xiaozhi"); sleep(1); } }}

 

本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5001781.html,如需转载请自行联系原作者
你可能感兴趣的文章
内存数据库应用之NBA篮球图文直播室存储设计
查看>>
运行第一个module
查看>>
客户网页WIZnet无线解决方案 之 太阳能逆变器
查看>>
编译用户Orcle的package中访问其它Schema的表
查看>>
Webservice SOAP传输序列化总结
查看>>
迷你 MVVM框架avalon的使用教程
查看>>
有符号数和无符号数的区别
查看>>
Dalvik虚拟机的启动过程分析
查看>>
C#写入文本文件,避免乱码Encoding.GetEncoding("gb2312")
查看>>
【零基础学习iOS开发】【02-C语言】05-进制
查看>>
停机文件[Warning] Unsafe statement written to the binary log using statement format since 错误
查看>>
Android Studio常用设置
查看>>
JAVA排序算法之 选择排序
查看>>
如何调用并解析调用远程接口返回的xml数据
查看>>
Windows Phone 几种弹出框提示方式
查看>>
Linux下链接mysql数据库的命令
查看>>
将不确定变为确定~DateTime.MinValue和MaxValue引发的异常
查看>>
Arduino入门笔记(2):Arduino的开发和virtualbreadboard仿真环境
查看>>
xml基础总结
查看>>
Nginx 日志分析
查看>>