-
简介
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项目
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目录
新建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
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相对于别的来说还是相当好用的,其他更多配置可以去官方文档查阅。