Android\C++\C#\Java
关于:(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的更多相关文章
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded
android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded 在app下的build.gradle中找到and ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解
Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...
- [Android Exception 1A] -com.android.volley.NoConnectionError: java.io.InterruptedIOException
- ::-/com.tongyan.tutelage W/System.err: com.android.volley.NoConnectionError: java.io.InterruptedIO ...
- Android 框架简介--Java环境(转)
==========================上=========================== 这里简单的介绍了Android的java环境基础,在后面一节中会结合具体的实例来理解这一节 ...
- Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html Android JNI之JAVA与C++对象建立对称关联 1.JAVA对象持有C++对象 ...
- android中在java代码中设置Button按钮的背景颜色
android中在java代码中设置Button按钮的背景颜色 1.设置背景图片,图片来源于drawable: flightInfoPanel.setBackgroundDrawable(getRes ...
- Android系统执行Java jar程序 -- dalvik运行dex Java工程
本文仅针对纯java工程执行进行诠释,一般在PC平台作为jar包形式存在,在Android平台则以dex包形式存在. Java属于高级程序语言,Java程序需要运行在特定的虚拟机中,虚拟机将Java字 ...
- Android RIL的java框架
Android RIL的Java部分也被分为了两个模块,RIL模块与Phone模块.其中RIL模块负责进行请求以及相应的处理,它将直接与RIL的原声代码进行通信.而Phone模块则向应用程序开发者提供 ...
随机推荐
- VS2013未能正确加载microsoft.visualstudio.editor.implementation.editorpackage
在用VS2013做项目,但是特别不顺利,这不,VS2013突然罢工了,连解决方案都打不开了,会出现如下的错误: 试了网上的各种解决方案,总算找到一个适合自己的,具体方法如下: 1.打开VS2013的& ...
- vim 从嫌弃到依赖(6)——插入模式
插入模式是vim中主要用来处理输入的一种模式,在这种模式中,用户的输入的字符会显示在窗口中.该模式中的行为与在普通编辑器中输入类似.由于在该模式中输入的字符会被当做有效输入,因此该模式下涉及的到命令也 ...
- 【一】LaTeX的安装和使用、安装TeXstudio、中文界面输出设置
安装方法一:(推荐) 下载链接·:http://tug.org/texlive/acquire-netinstall.html 下载zip,然后运行Windows批处理脚本(install-tl-wi ...
- 20.8 OpenSSL 套接字SSL传输文件
有了上面的基础那么传输文件的实现就变得简单了,在传输时通常我们需要打开文件,并每次读入1024个字节的数据包,通过SSL加密传输即可,此处的文件传输功能在原生套接字章节中也进行过详细讲解,此处我们还是 ...
- C语言中如何使两个整型变量计算出浮点型结果
遭遇的问题 在学习时有一个课后题要求计算两个变量的加减乘除以及取余,想到除法可能会计算出小数,就用浮点型接收除法的结果 int a,b: double div; div = a / b; 但是算出来的 ...
- 【CAS学习一】CAS服务端部署
公司要做单点登录系统,网上搜了一下目前主流方案是CAS,故部署一个试试看. 1.下载 因为最近出现log4j2远程代码执行漏洞,尽量选择新版本已修复此漏洞的,故CAS选择6.4版本.打包部署依赖JDK ...
- 欢迎加入 DotNet NB 交流学习群
目录 起因 创建群组 群成员 技术交流 社区推广 社区前辈 欢迎加入 起因 自从2019年参加 .NET Conf China 大会之后,我创办了一个公众号 DotNet NB,内容主要是 关于 .N ...
- 盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
写在开头 在Java的世界里万物皆对象.但我认为是万物皆数据,世界由各种各样数据构建起来,我们通过程序去实现数据的增删改查.转入转出.加减乘除等等,不同语言的实现方式殊途同归.由此可见,数据对于程序语 ...
- 机器学习基础03DAY
特征降维 降维 PCA(Principal component analysis),主成分分析.特点是保存数据集中对方差影响最大的那些特征,PCA极其容易受到数据中特征范围影响,所以在运用PCA前一定 ...
- 【CSS】如何复原被隐藏的滚动条?记一个看似简单的样式问题所引发的一系列思考
壹 ❀ 引 故事的起因是这样的,某一个同事在封装了一个TableList组件,用于做表格视图渲染,但出于研发经验考虑上,他可能觉得表格若出滚动条可能会引发某些不可预估的小问题(毕竟一个基础组件会被用于 ...