MAUI调用.so库,jar包

耀礼士多德 / 2023-08-30 / 原文

必要条件:

思路:

1. 使用Android studio,生成.so

2. 使用Android studio,用java调用.so,并打包成jar

 

构件.so包

 1. 使用Android studio,Native C++项目

 2. 

 这两个文件不想要,干掉!

不过,倒是可以参考一下怎么写的,例如:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    // Used to load the 'cpplib' library on application startup.
    static {
        System.loadLibrary("cpplib");
    }

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Example of a call to a native method
        TextView tv = binding.sampleText;
        tv.setText(stringFromJNI());
    }

    /**
     * A native method that is implemented by the 'cpplib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
}

主要是红色这里有点特别,MainActivity.java 删掉后,依葫芦画瓢,也这么整。

再看native-lib.cpp

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_southgz_cpplib_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

jstring:应该是返回的类型

JNIEXPORT、JNICALL:应该是特定的关键字

 盲猜,要返回int型,应该用jint  !

Java_com_southgz_cpplib_MainActivity_stringFromJNI:Java_包名_类名_方法名

开始制作

1. 添加一个java类,用于调用c++

 

public class cppDemo
{
    static {
        System.loadLibrary("cpplib");
    }
    public native int add(int a,int b);
}

2. 添加cpp文件,实现add函数

 注意文件放置的位置,要新建jni

#include <jni.h>
#include <string>
 JNIEXPORT jint JNICALL Java_com_southgz_cpplib_cppDemo_add
         (JNIEnv *, jobject, jint i, jint j){
     return i+j;
 }

3.  新建Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE      :=   CppLib
LOCAL_SRC_FILES   :=   cppdemo.cpp

include $(BUILD_SHARED_LIBRARY)

4. 生成:

 注意要进入到的目录

5. 生成后,出现: