• android114 c转换成c++


    ##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);
            }
        }
    
    }
  • 相关阅读:
    chromedriver与chrome各版本及下载地址
    chromedriver和firefox driver的安装过程
    ubuntu python及python IDLE 的安装
    Ubuntu14.04安装及配置mysql5.7.19
    容器集群管理平台的比较
    Android调试神器stetho使用详解和改造
    Vue CLI 3搭建vue+vuex 最全分析
    不会PPT配色没关系,有这些配色网站,也能让你的PPT配色美到极致
    15个超赞的配色网站,建议收藏
    10个超好用的配色网站
  • 原文地址:https://www.cnblogs.com/yaowen/p/5001781.html
Copyright © 2020-2023  润新知