android安卓月光宝盒项目源码技术讲解

本文介绍了安卓月光宝盒游戏机的开发过程,特别是串口通信加密的实现。开发者在处理串口数据时遇到了加密需求,以防止设备被破解。游戏机系统由输入装置、游戏机APP和输出装置组成,其中输入装置的按键摇杆通过加密串口与APP交互。提供了一个项目中的串口处理代码示例。
摘要由CSDN通过智能技术生成

月光宝盒游戏机大家都了解,但是里面开发流程指导的人比较少,去年本人有幸接到过这样一个项目,研发月光宝盒游戏机。 在过去几年这边积累了非常多的模拟器开发资源。下面是淘宝上一款月光宝盒机器,实际上目前有几个大厂在做,淘宝上爆款一看就了解,我的客户机器比这个还要大一些,需要投币。

 

可以在网盘下载,app体验:https://pan.baidu.com/s/1c2BdnPY 

软件分为2个部分:输入装置+游戏机APP+输出装置。这样就组成一个游戏机系统。

输入装置: 这里主要是按键摇杆, 客户的按键是通过串口实现的,需要我自己去读串口发到我的APP中。

而且客户为了怕设备被破解,串口通信还加了密,真是坑爹啊。

 

游戏机APP:这里使用的是我 这边街机pro专业版游戏机模拟器,支持拳皇97 98等8000多个游戏。 通过修改,去掉游戏机里面触摸按键,介入上面说的游戏按键。

 

输出装置:输出装置就是显示器和声音。这些都是走的安卓系统通用api。不需要特殊处理。

 

 

这里先贴出串口处理的部分代码:,一般来说摇杆按键走的串口,一般需要经过加密,不然太容易破解了:别人可能盗走你的游戏主板去硬件山寨出一个跟你一模一样的东西。所以这就要涉及加密了。

#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <jni.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

#include "SerialPort.h"
#include "miyao.h"

#include "android/log.h"
static const char *TAG="serial_port";
#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO,  TAG, fmt, ##args)
#define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt, ##args)
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args)
#define IsLock 1

//下函数由叶先生实现

/*需要在JNI中实现如下函数功能函数

函数功能:将OStar_msg结构加密后转化成字节。
函数目的:(用于java层调用后获得返回字节结果,java层将直接写入到串口。)
char * MsgToByte(OStar_msg msg)


函数功能:将字节添加到缓冲区。 若成功返回1,若缓冲区满返回0
函数目的:(用于java层从串口获得字节后调用它将字节保存到缓冲区)
int MsgCacheOffer(char * byte)


函数功能:将从缓冲区取出24个有效数据返回,若无返回NULL。(函数需要校验 直到成功取出正确数据)
函数目的:(用于java层调用后,直接从串口取出正确数据)
OStar_msg MsgPoll()

*/

//下函数由softboy实现

/*
需要在JNI中实现 Java 层接口函数:

函数功能:将java层函数数据转化成 OStar_msg
函数目的:调用MsgToByte转成成字节返回给java。用于发送。调用 MsgToByte();
JNIEXPORT jbyteArray JNICALL Java_org_winplus_serial_utils_SerialPort_msg2byte
  (JNIEnv *env, jobject thiz,jint msg1,jint msg2,jint msg3)

函数功能:将java层从串口读出的字节调用MsgCacheOffer 写入到缓冲区
函数目的:java层串口读取字节 ,调用 MsgCacheOffer();
JNIEXPORT jbyteArray JNICALL Java_org_winplus_serial_utils_SerialPort_msg2cache
  (JNIEnv *env, jobject thiz,jbyteArray bytes)

函数功能:将java层从串口读出的字节调用MsgCacheOffer 写入到缓冲区
函数目的:java串口读取有效数据 ,调用 MsgPoll()
JNIEXPORT jobject JNICALL Java_org_winplus_serial_utils_SerialPort_msg2java
  (JNIEnv *env, jobject thiz)

*/

static speed_t getBaudrate(jint baudrate)
{
	switch (baudrate)
	{
		case 0: return B0;
		case 50: return B50;
		case 75: return B75;
		case 110: return B110;
		case 134: return B134;
		case 150: return B150;
		case 200: return B200;
		case 300: return B300;
		case 600: return B600;
		case 1200: return B1200;
		case 1800: return B1800;
		case 2400: return B2400;
		case 4800: return B4800;
		case 9600: return B9600;
		case 19200: return B19200;
		case 38400: return B38400;
		case 57600: return B57600;
		case 115200: return B115200;
		case 230400: return B230400;
		case 460800: return B460800;
		case 500000: return B500000;
		case 576000: return B576000;
		case 921600: return B921600;
		case 1000000: return B1000000;
		case 1152000: return B1152000;
		case 1500000: return B1500000;
		case 2000000: return B2000000;
		case 2500000: return B2500000;
		case 3000000: return B3000000;
		case 3500000: return B3500000;
		case 4000000: return B4000000;
		default: return B9600;
	}
}

typedef unsigned long  u32;
typedef unsigned short u16;
typedef unsigned char  u8;

#define JIAOME_LEN 18 //加密长度

typedef struct CMD_group1
{
	u8 CMD;
	u8 rand1;
}CMD_group;

typedef struct OStar_msg1
{
	union
	{
		u8 tbyte[16];
		u16
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值