【Android】普通Empty工程改造CMake

随便新建一个Empty Activity
在这里插入图片描述

起个名emp
在这里插入图片描述

然后右键main,新家一个目录cxk,与java同目录
在这里插入图片描述


为什么不直接把c文件放在java目录下?因为会报错
在这里插入图片描述

在这里插入图片描述


然后在cxk目录下新建一个CMakeLists.txt和c文件,

在这里插入图片描述
在这里插入图片描述

这里记得选c文件
在这里插入图片描述

效果如下:
在这里插入图片描述

然后.c文件写入如下内容
在这里插入图片描述

#include <jni.h>

JNIEXPORT jstring JNICALL Java_com_a_emp_MainActivity_g
    (JNIEnv *env,jobject obj)
    {
    return (*env)->NewStringUTF(env,"Hello from C , chicken you so beautiful !");}


如果是C++

extern "C" jstring Java_com_a_MainActivity_g(JNIEnv* env,jobject thiz){
return env->NewStringUTF("hello, I am from C++");

另外,如果java中用的是静态方法,就要用jclass代替jobject

到CMakeLists.txt,添加如下内容
在这里插入图片描述

cmake_minimum_required(VERSION 3.4.1)
add_library(ctrlm SHARED cxk.c)

在app的build.gradle中的android {}闭包内任意位置添加如下语句
在这里插入图片描述
在这里插入图片描述

externalNativeBuild {
        cmake {
            path "src/main/cxk/CMakeLists.txt"
            version "3.10.2"
        }
    }

点一下右上角sync now
在这里插入图片描述


如果报错
executing external native build for cmake
在这里插入图片描述

检查一下,是txt文件中指向的c文件名和我实际的不一致导致出现的问题,但是这个提示不明显,改完后就好了。

回来可以看到txt文件变颜色了
在这里插入图片描述

说明build.gradle中的内容起了作用,我们可以把build.gradle刚刚新增的那段删除,
再点一下右上角刷新,
右键左侧的任意文件或文件夹,点击Link C++ Project with Gradle
在这里插入图片描述
在这里插入图片描述

会在build.gradle中增加如下内容,效果是一样的。
在这里插入图片描述

此时可以尝试点一下左上角的绿色锤子编译一下
在这里插入图片描述

可以看到生成了ctrlm的so文件
在这里插入图片描述

MainActivity.java中添加如下语句
在这里插入图片描述

package com.a.emp;
import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView=findViewById(R.id.id_text);
        textView.setText(g());

    }
    static {System.loadLibrary("ctrlm");}
    private native String g();}


效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值