码迷,mamicode.com
首页 > 移动开发 > 详细

android114 c转换成c++

时间:2015-11-27 23:26:29      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

##C向C++改造
1. 把c文件后缀名换成cpp
2. Android.mk文件中的hello.c也要换成hello.cpp
3. 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    := hello
LOCAL_SRC_FILES := hello.cpp

include $(BUILD_SHARED_LIBRARY)

com_itheima_cplusplus_MainActivity.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_itheima_cplusplus_MainActivity */

#ifndef _Included_com_itheima_cplusplus_MainActivity
#define _Included_com_itheima_cplusplus_MainActivity
#ifdef __cplusplus
extern "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 <jni.h>
#include <android/log.h>
#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);
        }
    }

}

 

android114 c转换成c++

标签:

原文地址:http://www.cnblogs.com/yaowen/p/5001781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!