找回密码
 立即注册
查看: 1313|回复: 27

手机APP工具开发指南--安卓篇,手机的USB-OTG 和 Ai8051U 通信

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-3-18 10:34:48 | 显示全部楼层 |阅读模式

此帖老是丢图,可以阅览下面这个链接:

手机APP工具开发指南--安卓篇,手机的USB-OTG 和 Ai8051U 通信 - SDCC, IAR C++ for 51, GCC, VSCode,Linux, MacOS 国芯技术交流网站 - AI32位8051交流社区

一、环境安装

注意不要安装在VM等虚拟机里,否则可能无法使用安卓模拟器。

1. 安装JDK

image.png

配置环境变量
这里用的默认路径,按照自己的路径配置即可。

JAVA_HOME C:\Program Files\Java\jdk-17

image.png

配置path:
%JAVA_HOME%\bin

image.png

image.png

测试是否安装成功:

java -version

image.png

2. 拷贝gradle

gradle正常是Android Studio自动联网下载的,下载不了可以设置本地路径
拷贝压缩包就行,不需要解压。路径中最好不要有中文或空格等特殊字符

image.png

3. 安装Android Studio

除了安装路径自定义,其它默认下一步即可。

image.png

image.png

image.png

4. 安装sdk

启动Android Studio

image.png

这里点cancel即可

image.png

自定义sdk放置路径选custom(注意SDK需要空间较大,几十GB级别)

image.png

安装sdk和虚拟机

image.png

点Accept,Finish等待下载完成

image.png

二、新建项目

image.png

选择Empty Views Activity(注意第二个项目默认只有Kotlin语言不要选错,下文用java项目示例):

image.png

项目配置选择(注意默认Kotlin语言,楼主这里选java):

image.png

等待ide初始化完成。弹出adb联网请求允许即可。

image.png

这里部分网络环境不好的会报错,改用本地gradle路径即可。

distributionUrl=file:///E:/env/gradle-8.11.1-bin.zip

image.png

点击try again,等待gradle下载依赖文件(时间较长,耐心等待)

下载报错或者太慢的,可以点左下角?->红色方框停止,然后修改项目根目录settigns.gradle配置阿里maven源:

image.png

image.png

pluginManagement {
    repositories {
        maven {url 'https://maven.aliyun.com/repository/google'}
        maven {url 'https://maven.aliyun.com/repository/gradle-plugin'}
        maven {url 'https://maven.aliyun.com/repository/public'}
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven {url 'https://maven.aliyun.com/repository/google'}
        maven {url 'https://maven.aliyun.com/repository/gradle-plugin'}
        maven {url 'https://maven.scijava.org/content/repositories/public/'}
        maven {url 'https://maven.aliyun.com/repository/public'}
        google()
        mavenCentral()
    }
}

rootProject.name = "My Application"
include ':app'

依赖下载完成:

image.png

点击顶部绿色三角形编译+运行:

image.png

如果没装模拟器,可在界面右侧手动添加:

image.png

也可以使用wifi无线真机调试:

打开开发者模式:

安卓手机->设置->关于手机->多次点击版本号开启开发者模式(不同品牌可能方法有点差异可以网上搜下自己手机)

使用无线调试:

返回设置->系统和更新->开发者选项->无线调试(确保手机和电脑在同一局域网内)->打开无线调试
->使用二维码配对->扫码即可

image.png

image.png

image.png

三、NDK安装

image.png

image.png

image.png

image.png

四、关联C++文件

1.右键点击项目,选择添加C++ Module

image.png

image.png

等待gradle config完成,注意项目结构下多了个cpp文件夹

image.png

  1. 修改界面

界面上自带的TextView组件声明id为textLabel

image.png

添加一个button

image.png

添加一个输入框

image.png

  1. 修改java代码

native函数调用C++代码

    static {
        System.loadLibrary("myapplication");
    }
    public native String sayHello(String name);

image.png

4.修改C++代码,实现native函数

image.png

ide自动定义C++函数,添加实现

image.png

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

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_sayHello(JNIEnv *env, jobject thiz, jstring name) {
    // 检查传入的 name 是否为 nullptr
    if (name == nullptr) {
        return env->NewStringUTF("Hello, World!");
    }

    // 将 jstring 转换为 C++ 的 std::string
    const char *nativeName = env->GetStringUTFChars(name, nullptr);
    if (nativeName == nullptr) {
        return env->NewStringUTF("Hello, World!"); // 内存不足时的默认返回
    }

    std::string greeting = "Hello, " + std::string(nativeName) + "!";

    // 释放字符串资源
    env->ReleaseStringUTFChars(name, nativeName);

    // 将 C++ 字符串转换回 jstring 并返回
    return env->NewStringUTF(greeting.c_str());
}

保存

5.添加按钮事件调用C++代码

MainActivity.java文件完整代码

package com.example.myapplication;

import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("myapplication");
    }
    public native String sayHello(String name);


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        // 通过id获取Button控件实例
        Button button = findViewById(R.id.button);
        button.setOnClickListener(v -> {

            EditText editText = findViewById(R.id.nameEdit);
            String inputText = editText.getText().toString();
  
            // 调用本地方法,传递输入的文本
            String msg = sayHello(inputText);
            // 获取 TextView 实例
            TextView textLabel = findViewById(R.id.textLabel);
            // 调用本地方法,传递 TextView 引用
            textLabel.setText(msg);
        });

    }

}

  1. NDK测试

image.png

五、安卓App与Ai8051U擎天柱开发板通讯

5.1 功能说明

  1. 初始化界面时,绑定UI控件各自事件
  2. 点击刷新按钮,重新加载所有USB设备并更新spinner组件
  3. 选择一个设备后点击连接按钮,建立与设备的通信链接
  4. 在发送报文输入框中输入要发送的报文内容,点击发送按钮
  5. 报文经过C++底层库,添加“Hello,”前缀后发送给设备
  6. 设备接收到报文后返回原文,在底部显示区域展示
  7. 软件打印的消息也在底部显示区域展示
  8. 断开设备和软件退出时释放资源

5.2 构建界面布局

image.png

左上角使用spinner组件显示USB-设备下拉列表
一个刷新用的按钮
一个连接设备用的按钮
一个发送报文用的输入框及按钮
一个清空日志按钮
底部ScrollView+TextView组合用于显示接收到的报文信息及软件打印消息

5.3 开发关键点

1.注册安卓USB权限

image.png

2.注册设备vid+pid过滤器,这样插入设备会提示用户用此APP打开

image.png

image.png

3.加载三方usb-serial库(基于MIT协议)

image.png

4.待连接的擎天柱开发板烧录USB-CDC固件(见附件),并支持echo模式,即发送什么返回什么

5.4 最终效果

image.png

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-3-18 10:34:54 | 显示全部楼层
安装包:
gradle-8.11.1-bin.zip (130.58 MB, 下载次数: 17)
jdk-17.0.14_windows-x64_bin.exe (153.99 MB, 下载次数: 14)
android-studio-2024.3.1.13-windows.exe 太大无法上传,自行在android studio官网下载最新版本
可直接使用的固件:
app-usb.apk (6.75 MB, 下载次数: 15)
Ai8051U-32bit-24M.hex (29.14 KB, 下载次数: 11)
工程源码:
apk: MyApplication-USB.zip (30.61 MB, 下载次数: 16)
擎天柱固件: Ai8051U-Firmware.zip (337.92 KB, 下载次数: 19)
手机APP工具开发指南--安卓篇,手机的 USB-OTG 和 Ai8051U 通信,效果展示:

手机APP工具开发指南--安卓篇,手机的 USB-OTG 和 Ai8051U 通信
2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
三天不学习,赶不上刘少奇~
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 08:52:14

3

主题

109

回帖

855

积分

高级会员

积分
855
发表于 2025-3-18 14:26:19 | 显示全部楼层
支持一下!!

点评

哈哈~感谢  发表于 2025-3-18 14:35
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2025-05-01 08:43:07
已绑定手机

2

主题

106

回帖

262

积分

中级会员

积分
262
发表于 2025-4-2 08:47:13 | 显示全部楼层
强大
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-05-01 19:17:52
已绑定手机

19

主题

208

回帖

492

积分

中级会员

积分
492
发表于 2025-4-3 23:04:23 来自手机 | 显示全部楼层
厉害了我的哥
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:381
  • 最近打卡:2025-05-01 08:27:28
已绑定手机

10

主题

146

回帖

458

积分

中级会员

积分
458
发表于 2025-4-8 07:47:14 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:35
  • 最近打卡:2025-04-26 16:35:44

4

主题

39

回帖

184

积分

注册会员

积分
184
发表于 2025-4-8 08:38:32 | 显示全部楼层
厉害
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-04-29 07:45:37

3

主题

74

回帖

358

积分

中级会员

积分
358
发表于 2025-4-8 08:55:22 | 显示全部楼层
厉害
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:231
  • 最近打卡:2025-04-30 08:09:31
已绑定手机

0

主题

5

回帖

986

积分

高级会员

积分
986
发表于 2025-4-10 08:05:27 | 显示全部楼层
谢谢分享
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:37
  • 最近打卡:2025-04-24 09:00:03

2

主题

36

回帖

134

积分

注册会员

积分
134
发表于 2025-4-10 15:32:32 | 显示全部楼层
厉害!
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:38 , Processed in 0.497274 second(s), 124 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表