xmake:Android studio Gradle中使用xmake-gradle插件来集成编译JNI库

  • 简介

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。

    地址:https://xmake.io/

  • 安装
    下载地址:https://github.com/xmake-io/xmake/releases
    我这里是 windows7 64位版本,我下载对应的 windows64 版本
    我这里下载的是 xmake-master.win64.exe
    下载完之后 一路 next 安装完毕即可

  • 配置

    新建Android项目
    新建Android项目
    build.gradle 中加入
    (build.gradle Module)

	id "org.tboox.gradle-xmake-plugin" version "1.1.3"

加入后如下

plugins {
    id 'com.android.application'
    id "org.tboox.gradle-xmake-plugin" version "1.1.3"
}

和 (* 号内)

plugins {
    id 'com.android.application'
    id "org.tboox.gradle-xmake-plugin" version "1.1.3"
}

android {
    compileSdkVersion 29
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.tanzui.testxmake"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

*
        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a"
        }
        externalNativeBuild {
            xmake {
                abiFilters "armeabi-v7a", "arm64-v8a"
            }
        }
*

    }

*
    externalNativeBuild {
        xmake {
            path "src/main/jni/xmake.lua"
        }
    }
*

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

新建JNI目录
新建JNI目录
新建class文件 TestXmakeNative

package com.tanzui.testxmake;

public class TestXmakeNative {
    static {
        System.loadLibrary("testXmake");
    }

    public native static int add(int a,int b);
}

然后 菜单 build - Make Project 一下
点击 File -Settings - Tools - External Tools - Add
add

Program: javah  
Parameters: -v -jni -d ../jni $FileClass$  
Working directory: $SourcepathEntry$  

然后 Native 类 右键 NDK-javah
在这里插入图片描述
生成头文件
新建com_tanzui_testxmake_TestXmakeNative.cpp文件

#include "com_tanzui_testxmake_TestXmakeNative.h"
#include <stdio.h>
#include <stdlib.h>

JNIEXPORT jint JNICALL Java_com_tanzui_testxmake_TestXmakeNative_add
  (JNIEnv *, jclass, jint a, jint b)
  {
       return a + b;
  }

然后打开 Terminal 定位到 jni 目录下 运行

xmake f -p android --ndk=H:\Android\Sdk\ndk\21.1.6352462(设置ndk全局变量的话后边这个--ndk可以不用输)

生成 xmake.lua

-- add rules: debug/release
add_rules("mode.debug", "mode.release")

-- define target
target("jni")

    -- set kind
    set_kind("static")
    
    -- add files
    add_files("com_tanzui_testxmake_TestXmakeNative.cpp")

-- define target
target("jni")

    -- set kind
    set_kind("static")

改成

-- define target
target("testXmake")

    -- set kind
    set_kind("shared")

然后 菜单 build- Make Project
执行完毕后就会在libs目录下生成so文件

新建个 id 为 btn 的按钮
设置点击事件

package com.tanzui.testxmake;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

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


        Button btn = findViewById(R.id.btn);
        btn.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId())
        {
            case R.id.btn:
                Log.i(MainActivity.class.getName(),TestXmakeNative.add(1,2) + "");
                break;
        }
    }
}

然后运行-点击按钮

2021-05-10 14:43:01.639 32754-32754/com.tanzui.testxmake I/com.tanzui.testxmake.MainActivity: 3

日志打印成功,大工告成

xmake编译jni相对于别的来说还是相当好用的,其他更多配置可以去官方文档查阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值