关于:(38条消息) 千万不能错过的Android NDK下载安装及配置_石子君的博客-CSDN博客_android ndk下载

(38条消息) Android扩展知识 - so文件生成及其使用_L-FHy的博客-CSDN博客_android 生成so文件

步骤:

(一)安装JDK

(二)安装NDK

(三)安装Android Studio

经验:

(一) 安装JDK,【Java SE Development Kit (JDK)下载】2022年最新官方正式版Java SE Development Kit (JDK)免费下载 - 腾讯软件中心官网 (qq.com)

安装后,目录如下:

进入\bin:

因此,环境变量要配置为java.exe目录下的:

重要一步:必须要重启电脑才起作用,成功如下:

(二)安装ndk

安装后,目录如下

同时环境变量设置

成功标志:

(三)使用Android Studio新建一个空项目

1. 新建SerialPort.java文件,代码如图:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
// public class SerialPort {
public SerialPort() {
} public native int open(String var1, int var2, int var3, int var4, int var5, int var6, int var7); public native int close(); public native int write(byte[] var1); public native int writeLength(byte[] var1, int var2); public native int read(byte[] var1, int var2); static {
System.loadLibrary("StandardSerialPort");
}
}

2. Make Project,目的是编译SerialPort.java,生成SerialPort.class文件。

位于:工程目录下\app\build\imtermediates\javac\debug\classes

3. 使用javah命令,生成c++头文件.h

使用命令行:

进入文件目录:

cd C:\D\pyl\FmosMobile\RuideApi\SerialPortApi\app\build\intermediates\javac\debug\classes

生成SerialPort.h

PS C:\D\pyl\FmosMobile\RuideApi\SerialPortApi\app\build\intermediates\javac\debug\classes> javah -jni SerialPort

注意,不要写成 javah -jni SerialPort.class这样,不需要.class


其实,不需要上面步骤也行,如果有如下文件:

.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class android_communication_serialport_SerialPort */ #ifndef _Included_android_communication_serialport_SerialPort
#define _Included_android_communication_serialport_SerialPort
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: android.communication.serialport.SerialPort.class
* Method: open
* Signature: (Ljava/lang/String;II)Ljava/io/FileDescriptor;
*/
JNIEXPORT jint JNICALL Java_android_1communication_1serialport_SerialPort_open
(JNIEnv *, jclass, jstring, jint, jint, jint, jint, jint, jint); /*
* Class: android.communication.serialport.SerialPort.class
* Method: close
* Signature: ()V
*/
JNIEXPORT jint JNICALL Java_android_1communication_1serialport_SerialPort_close
(JNIEnv *, jclass); JNIEXPORT jint JNICALL Java_android_1communication_1serialport_SerialPort_write
(JNIEnv *, jclass, jbyteArray); jint Java_android_1communication_1serialport_SerialPort_writeLength
(JNIEnv *, jclass, jbyteArray, jint); JNIEXPORT jint JNICALL Java_android_1communication_1serialport_SerialPort_read
(JNIEnv *, jclass, jbyteArray, jint); #ifdef __cplusplus
}
#endif
#endif

其中,Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
#gcc -o libctest.so -shared -I/path/to/jdk/headers ctest.c -lc
TARGET_PLATFORM := android-3
#LOCAL_MODULE := serial_port
#LOCAL_SRC_FILES := SerialPort.c
LOCAL_MODULE := StandardSerialPort
LOCAL_SRC_FILES := StandardSerialPort.c
LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_BUILD_SCRIPT := Android.mk
APP_ABI := all
APP_PLATFORM := android-19

然后,进入目录执行命令:

PS C:\D\pyl\FmosMobile\RuideApi\SerialPortApi\app\build\intermediates\javac\debug\classes> ndk-build NDK_PROJECT_PATH=.       NDK_APPLICATION_MK=Application.mk

最后,生成的.so文件位于:


使用VSCode,包装SerialPort.java,变为.jar文件,给Xamarin使用

生成.jar

 注意,VsCode也要设置成相同的包名,一定要和.cpp\.h 文件一一对应

直接copy过去,生成.jar即可

放到xamarin中,参考:Xamarin.Android 踩坑记 - 耀礼士多德 - 博客园 (cnblogs.com)

设置lib(要点)

1. 在安卓项目中,新建lib文件夹,并且,将.so文件都复制过去

2. 每个文件生成操作,设置为AndroidNativeLibrary

3.  压缩预览,能够在生成的apk中找到

Android\C++\C#\Java的更多相关文章

  1. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  2. android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded

    android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded 在app下的build.gradle中找到and ...

  3. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  4. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

  5. [Android Exception 1A] -com.android.volley.NoConnectionError: java.io.InterruptedIOException

    - ::-/com.tongyan.tutelage W/System.err: com.android.volley.NoConnectionError: java.io.InterruptedIO ...

  6. Android 框架简介--Java环境(转)

    ==========================上=========================== 这里简单的介绍了Android的java环境基础,在后面一节中会结合具体的实例来理解这一节 ...

  7. Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html Android JNI之JAVA与C++对象建立对称关联 1.JAVA对象持有C++对象 ...

  8. android中在java代码中设置Button按钮的背景颜色

    android中在java代码中设置Button按钮的背景颜色 1.设置背景图片,图片来源于drawable: flightInfoPanel.setBackgroundDrawable(getRes ...

  9. Android系统执行Java jar程序 -- dalvik运行dex Java工程

    本文仅针对纯java工程执行进行诠释,一般在PC平台作为jar包形式存在,在Android平台则以dex包形式存在. Java属于高级程序语言,Java程序需要运行在特定的虚拟机中,虚拟机将Java字 ...

  10. Android RIL的java框架

    Android RIL的Java部分也被分为了两个模块,RIL模块与Phone模块.其中RIL模块负责进行请求以及相应的处理,它将直接与RIL的原声代码进行通信.而Phone模块则向应用程序开发者提供 ...

随机推荐

  1. Redis安装及使用详解篇

    一.什么是Redis? Redis(Remote Dictionary Server ),即远程字典服务. Redis是是现在最受欢迎的NoSQL数据库之一,是一种支持key-value等多种数据结构 ...

  2. 【OpenCV】在Linux上使用OpenCvSharp

    前言 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Androi ...

  3. Spring自带的这11个工具类,真香!

    前言 最近有些小伙伴,希望我分享一些好用的工具类,帮他们提升开发效率. 今天这篇文章专门跟大家一起总结一下,Spring框架本身自带的一些好用的工具类,希望对你会有所帮助. 1 Assert 很多时候 ...

  4. .NET中使用BootstrapBlazor组件库Table实操篇

    前言 Table表格在后台管理应用中使用的是相当频繁的,因此找一个功能齐全的前端框架对于我们而言是非常必要的,因为封装完善的前端框架能够大大提升我们的工作对接效率.今天我们主要来讲解一下在.NET中使 ...

  5. 覆盖第三方jar包中的某一个类。妙!!

    在我们日常的开发中,经常需要使用第三方的jar包,但是很多时候总是会发现第三方的jar包中的某一个类,有问题,但是又无法继承,因为你继承后 变成了你自己的,jar包中 调用的 还是 他自己内部包含的, ...

  6. 剑指Offer07 重建二叉树

    剑指 Offer 07. 重建二叉树 前置概念: 前序:访问根节点,先序遍历左子树,先序遍历右子树: 中序:中序遍历左子树,访问根节点,中序遍历右子树: 后序:后序遍历左子树,后序遍历右子树,访问根节 ...

  7. Unicode编码的魅力:跨语言交流的桥梁

    引言: Unicode编码是一种用于表示世界上所有字符的标准编码方式.它解决了字符集兼容性和多语言文本处理的难题,成为实现全球化软件的关键技术.本文将深入探讨Unicode编码的优点与缺点,并介绍它在 ...

  8. NC16681 [NOIP2003]加分二叉树

    题目链接 题目 题目描述 ​ 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tr ...

  9. SQL中为什么不要使用1=1?

    最近看几个老项目的SQL条件中使用了1=1,想想自己也曾经这样写过,略有感触,特别拿出来说道说道. 编写SQL语句就像炒菜,每一种调料的使用都会影响菜品的最终味道,每一个SQL条件的加入也会影响查询的 ...

  10. 阿里OSS+PicGo+Typora图床设置使用

    1.首先下载Typroa和PicGo Typroa地址: 链接:https://pan.baidu.com/s/1M6_5o1PZyaGqOhSb4yvtmA 提取码:a1aj PicGo地址: 链接 ...