基于机智云的Android开源app修改教程

article/2025/9/11 23:56:09

前言

首先,这是我最近搞的毕业设计,然后为了使自己的app更加的有个人风格,故在网上寻找了很多的参考资料,这里是对自己设计的总结,具体机智云APP生成流程请参考我上一篇博客。链接: 基于stm32的连接机智云教程

机智云开源App下载

进行以下操作之前请确保已经在机智云中创建了一个产品,下面点击添加应用,选择Android生成一个app应用
在这里插入图片描述
然后按照图片提示,将密匙填入到相应位置,具体参考我上一篇博客,点击下载,将app工程下载到本地
在这里插入图片描述
在这里插入图片描述

Android方面处理

Android studio软件安装与源码修改

将下载好了的文件解压出来,然后将第二个文件夹复制出来,粘贴到存放Android studio文件例程文件夹中,若还没有安装Android studio的请参考这位大佬的详细例程,这边建议下载的Android studio版本不要太新,不然工程可能编译不成功。在这里插入图片描述
然后自己新建一个Android工程作为参考,方便修改源码,
第一处参考新建例程修改机智云APP在这里插入图片描述
将此处修改为对应的新建工程的内容在这里插入图片描述
第二处按照此路径参考新建工程修改,这里是我自己的按照自己的新建工程修改完毕的代码
在这里插入图片描述在这里插入图片描述
修改后如下图所示,需注意这里的compile 均替换为implementation,testcompile均替换为testimplementation。在这里插入图片描述
然后可以从Android studio里面打开修改好的机智云开源app,等待一段时间打开后如下图所示,在这里插入图片描述
这里我们打开工程视图在这里插入图片描述

修改app图标和名称

首先在网上下载相关素材备用,若大小不一,请自行修改图片或者图标的大小。这时将我们下载好的图标或者图片放置到桌面,然后分别复制一下,依次粘贴到drawable-xhdpi目录下(注意鼠标放在drawable-xhdpi上右击选Paste便出现如下界面)
在这里插入图片描述
点击确定,将此名称复制到按照如下图这个文件,红框内既是我们可以替换的app图标,将你的图标名称填上就ok,在这里插入图片描述
下面在这个位置修改app名称在这里插入图片描述

修改启动页面和内部UI

现在修改启动界面,这里的图片在前面我们已经复制到了相关目录下,现在可以按照下图将红框出修改成为你的图片名称,见下图在这里插入图片描述
然后在172行和174行两处替换为你的设备离线图标在这里插入图片描述
同样是这个目录下,在117行和119行相应位置替换为自己的设备在线图标在这里插入图片描述

修改设备监控界面

下面修改一下设备监控界面,按照此路径打开
在这里插入图片描述
这是我已经修改好的界面UI,最后效果图如下(这里的图标可自行修改为自己的图标,若是仅仅复制代码会报错)
在这里插入图片描述
代码如下所示,可根据需要自行修改(仅供参考,最好要读懂代码)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><include layout="@layout/header_toolbar" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/background_color"android:fadingEdge="vertical"android:paddingBottom="10dp"android:paddingTop="20dp"android:scrollbars="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:scrollbars="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:scrollbars="horizontal" ><!-- (布尔可写) --><RelativeLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_marginBottom="1dp"android:layout_weight="3"android:alpha="1"android:background="@color/white"android:gravity="center_horizontal"android:padding="10dp"><ImageViewandroid:id="@+id/LED"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:src="@drawable/led" /><TextViewandroid:id="@+id/Led_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/LED"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="灯" /><Switchandroid:id="@+id/sw_bool_LED"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/Led_text"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:textOff="关闭"android:textOn="开启" /></RelativeLayout><!-- 蜂鸣器(布尔可写) --><RelativeLayoutandroid:layout_width="0dp"android:layout_weight="3"android:layout_height="wrap_content"android:layout_marginBottom="1dp"android:background="@color/white"android:padding="10dp" ><ImageViewandroid:id="@+id/BEEP"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:src="@drawable/beep" /><TextViewandroid:id="@+id/BEEP_text"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_centerVertical="true"android:layout_centerHorizontal="true"android:layout_below="@+id/BEEP"android:text="蜂鸣器" /><Switchandroid:id="@+id/sw_bool_BEEP"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_below="@+id/BEEP_text"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:textOff="关闭"android:textOn="开启" /></RelativeLayout><!-- 开关(布尔可写) --><RelativeLayoutandroid:layout_width="0dp"android:layout_weight="3"android:layout_height="wrap_content"android:layout_marginBottom="1dp"android:background="@color/white"android:padding="10dp" ><ImageViewandroid:id="@+id/LED1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:src="@drawable/kaiguan" /><TextViewandroid:id="@+id/LED1_text"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_below="@+id/LED1"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="开关" /><Switchandroid:id="@+id/sw_bool_LED1"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_below="@+id/LED1_text"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:textOff="关闭"android:textOn="开启" /></RelativeLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="101dp"android:orientation="horizontal"android:scrollbars="horizontal"><!-- 温度(数值只读) --><RelativeLayoutandroid:layout_width="0dp"android:layout_weight="3"android:layout_height="wrap_content"android:background="@color/white"android:padding="10dp" ><ImageViewandroid:id="@+id/Temp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:src="@drawable/wd" /><TextViewandroid:id="@+id/tv_data_Temp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/Temp"android:layout_centerHorizontal="true"android:layout_centerVertical="true" /><TextViewandroid:layout_marginLeft="5dp"android:id="@+id/Temp_text"android:layout_below="@+id/Temp"android:layout_toRightOf="@id/tv_data_Temp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="℃" /><TextViewandroid:id="@+id/Temp_text1"android:layout_toLeftOf="@id/Temp"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="温度" /></RelativeLayout><!-- 湿度(数值只读) --><RelativeLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginBottom="1dp"android:layout_weight="3"android:background="@color/white"android:padding="10dp"><ImageViewandroid:id="@+id/Shidu"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:src="@drawable/sd" /><TextViewandroid:layout_marginLeft="5dp"android:id="@+id/Shidu_text"android:layout_below="@+id/Shidu"android:layout_toRightOf="@id/tv_data_Shidu"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="%" /><TextViewandroid:id="@+id/tv_data_Shidu"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/Shidu"android:layout_centerHorizontal="true"android:layout_centerVertical="true" /><TextViewandroid:id="@+id/Shidu_text1"android:layout_toLeftOf="@id/Shidu"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="湿度" /></RelativeLayout><!-- 光照强度(数值只读) --><RelativeLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginBottom="1dp"android:layout_weight="3"android:background="@color/white"android:padding="10dp"><ImageViewandroid:id="@+id/GQ"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:src="@drawable/sun" /><TextViewandroid:id="@+id/GQ_text"android:layout_marginLeft="5dp"android:layout_below="@+id/GQ"android:layout_toRightOf="@id/tv_data_GQ"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="lx" /><TextViewandroid:id="@+id/tv_data_GQ"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/GQ"android:layout_centerHorizontal="true"android:layout_centerVertical="true" /><TextViewandroid:id="@+id/GQ_text1"android:layout_toLeftOf="@id/GQ"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="光强" /></RelativeLayout></LinearLayout><!-- 温度阈值范围(数值可写) --><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="1dp"android:background="@color/white"android:padding="10dp" ><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:text="温度阈值范围(℃)" /><TextViewandroid:id="@+id/tv_data_Temp_AlarmScope"android:layout_width="110dp"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:textSize="16sp"android:gravity="end" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/tv_data_Temp_AlarmScope"android:layout_marginTop="10dp"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="0" /><SeekBarandroid:id="@+id/sb_data_Temp_AlarmScope"android:thumb="@drawable/bar1"android:thumbOffset="0dp"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="3"android:max="50" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="50" /></LinearLayout></RelativeLayout><!-- 湿度阈值范围(数值可写) --><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="1dp"android:background="@color/white"android:padding="10dp" ><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:text="湿度阈值范围(%)" /><TextViewandroid:id="@+id/tv_data_Shidu_AlarmScope"android:layout_width="110dp"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:textSize="16sp"android:gravity="end" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/tv_data_Shidu_AlarmScope"android:layout_marginTop="10dp"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="20" /><SeekBarandroid:id="@+id/sb_data_Shidu_AlarmScope"android:thumb="@drawable/bar"android:thumbOffset="0dp"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="3"android:max="75"android:progress="0"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="95" /></LinearLayout></RelativeLayout><!-- 光强阈值范围(数值可写) --><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="1dp"android:background="@color/white"android:padding="10dp" ><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:text="光强阈值范围(lx)" /><TextViewandroid:id="@+id/tv_data_GQ_AlarmScope"android:layout_width="110dp"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:textSize="16sp"android:gravity="end" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/tv_data_GQ_AlarmScope"android:layout_marginTop="10dp"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="0" /><SeekBarandroid:id="@+id/sb_data_GQ_AlarmScope"android:thumb="@drawable/bar2"android:thumbOffset="0dp"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="3"android:max="65535" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="65535" /></LinearLayout></RelativeLayout></LinearLayout></ScrollView>
</LinearLayout>

安装软件

因为我们的程序编译无错误,故开始安装app,用数据线将电脑和手机连接,进入手机的开发者模式,打开开发者模式,允许进行USB调试在这里插入图片描述
然后在android studio端点击运行,app便安装成功了

在这里插入图片描述
感谢大家观看,有问题记得留言哟。


http://chatgpt.dhexx.cn/article/eoYJbPkH.shtml

相关文章

Android中修改ScrollBar默认样式

好吧&#xff0c;又遇到需求了&#xff0c;需要修改ScrollBar的样式&#xff0c;于是查阅了很多文档&#xff0c;觉得这位大牛总结的不错&#xff0c;顺便看了下他的主页&#xff0c;哇哦&#xff0c;大神啊~&#xff01;&#xff01;&#xff01;附上大神文章的链接&#xff1…

RecyclerView实现可拖动滚动条并修改宽度

本文参考了孤调的文章,链接如下: https://www.jianshu.com/p/67e1df2b1920 基本实现了拖动的需求,但是还有一个问题就是滚动条的宽度跟需求不符,需要进行修改.但是官方并未提供相应的参数.自己动手丰衣足食,开始撸源码. 打开RecyclerView类,搜索fastScrollEnabled,定位到构造方…

IDEA修改配置

1.修改 bin/idea.properties---------------主要是把路径放开 # Use ${idea.home.path} macro to specify location relative to IDE installation home. # Use ${xxx} where xxx is any Java property (including defined in previous lines of this file) to refer to its v…

利用ajax修改删除页面数据,使用Jquery的Ajax实现无刷新更新,修改,删除页面

本文将向大家讲述一下最近工作的一些总结&#xff0c;主要包括了以下内容&#xff0c;注册界面以及详细信息界面的编辑。主要是介绍了AJAX技术&#xff0c;因为我觉得其他方面没什么好介绍的。首先是跟大家说一下Ajax的优点&#xff0c;假如你删除了一个页面的内容&#xff0c;…

代码修改RecyclerView的scrollbar颜色

因为scrollbar是view的私有内部类&#xff0c;所以需要动态修改RecyclerView的scrollbar颜色&#xff0c; 只能通过反射获取scrollbar的drawable&#xff0c;然后用反射着色&#xff0c;亲测可用&#xff0c;代码直接粘贴就可使用。 import android.content.Context; import an…

lvgl v8之Styling the scrollbars

Styling the scrollbars /** * Styling the scrollbars */ static void lv_example_scroll_4(void) {lv_obj_t* obj lv_obj_create(lv_scr_act()); // 创建obj对象lv_obj_set_size(obj, 200, 100); // 设置大小lv_obj_center(obj); // 居中显示lv_obj_t* label lv_…

react-custom-scrollbars 滚动条组件的简单实现

滚动条组件 参考&#xff1a;gitHub API说明以及大佬的API中文讲解 import "./styles.css"; import React, { useState, useEffect, useRef, useMemo } from "react"; import { Scrollbars } from "react-custom-scrollbars";export default fu…

用react-custom-scrollbars插件美化 Ant Design Table 滚动条

Ant Design Table 自带的滚动条不太美观&#xff0c;我们来用react-custom-scrollbars插件给它美化一下。 先看一下最终的效果&#xff0c;增加一下信心&#xff1a; 安装 react-custom-scrollbars 不多说了&#xff0c;直接安装插件 npm install react-custom-scrollbars -…

说说react-custom-scrollbars插件在react hooks版本中的使用

react-custom-scrollbars插件 读前说明基本使用属性介绍onScrollrenderViewrenderThumbVerticalautoHideautoHideTimeout 读前说明 github地址&#xff1a;https://github.com/malte-wessel/react-custom-scrollbars 作用&#xff1a; 快速实现被包裹区域的滚动效果 关于本…

ScrollView动态更改ScrollbarVisibility属性的Bug

原因&#xff1a; 启动之后发现效果并非预设的那样&#xff0c;原因是因为设置成Permanent后,Viewport的rectTranform发生了变化&#xff0c;导致不会像预设那样实现效果 结论&#xff1a; 最好不要动态更改ScrollbarVisibility&#xff0c;若一定要更改则还要额外写死Viewport…

学习子网掩码

一.子网掩码 1.含义 子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩&#xff0c;它用来指明一个IP地址的哪些位标识的是主机所在的子网&#xff0c;以及哪些位标识的是主机的位掩码。子网掩码不能单独存在&#xff0c;它必须结合IP地址一起使用。 子网掩码是一个3…

# 子网掩码

子网掩码 1、概念简介   子网掩码又叫网络掩码、地址掩码&#xff0c;是一个32位地址&#xff0c;用于屏蔽IP地址的一部分以区别网络号和主机号&#xff0c;并说明该IP地址是在局域网上&#xff0c;还是在远程网上。子网掩码不能单独存在&#xff0c;它必须结合IP地址一起使…

IP与子网掩码

目录 一.IP 1.IP地址 2.IP地址的分类 二.子网掩码 1.子网掩码由32个二进制位表示 2.IP地址和子网掩码作“逻辑与”运算得到网络地址 3.网络中不同主机之间通信 4.A、B、C三类地址的默认子网掩码 5.子网划分的原因 6.子网划分的原理 7.子网掩码及相关参数对应表 8.I…

计算机子网掩码作用,什么是子网掩码?子网掩码的作用是什么?

网络工作人员经常需要处理ip和子网掩码等. 我相信大多数朋友都知道IP的含义&#xff0c;但仍然不了解子网掩码的含义. 希望在了解子网掩码的相关知识的基础上&#xff0c;希望对网络感兴趣的用户能学到一些东西. 什么是子网掩码&#xff1f; 子网掩码也称为网络掩码&#xff0c…

将子网掩码取反_子网掩码

1 基本介绍 子网掩码(subnet mask)是每个使用互联网的人必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置。以下我们就来深入浅出地讲解什么是子网掩码。 子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式。对于A类地址来说,默认的子网掩码是255.0.0…

计算机子网掩码在线,子网掩码计算器

华军软件园提供的这款子网掩码计算器可以很方便的计算子网掩码,它包含了五款经典的子网掩码计算工具,您可以自由选择,网管必备!子网掩码计算器可以自动划分A、B、C类IP,可以输出划分后的子网掩码、子网位、最多子网数、主机位、最多主机数以及所有的子网列表,并可以将结果…

计算机子网掩码作用,什么是子网掩码 子网掩码的作用是什么?

网络工作人员经常需要与ip和子网掩码等打交道&#xff0c;相信绝大数的朋友都知道IP的意思&#xff0c;但是还不理解子网掩码的意思&#xff0c;下面装机之家小编来为大家介绍下关于子网掩码的相关知识&#xff0c;希望能够对网络感兴趣的用户有所学习。 什么是子网掩码&#x…

Swift: 实现JSON转Model - HandyJSON

很多时候&#xff0c;我们从服务端请求下的数据都是Json格式&#xff0c;我们需要拿这些数据显示到我们的UI界面。 因此&#xff0c;我们的做法基本都会先将json转为方便使用的数据模型&#xff0c;或者也可以直接转字典解决。 在OC中&#xff0c;我们有很多优秀的第三方库帮助…

项目剖析03-swift 网络请求Moya+HandyJSON+RxSwift

项目第一版网络框架用的是siesta,它的缓存与自动刷新确实很好用而且代码很简洁&#xff0c;但是在文件的上传与下载以及对返回类型需要精确匹配要求这方面就很不友好&#xff0c;所以在第二版的我选择了Moya,它是一个网络抽象层&#xff0c;它在Alamofire基础上提供了一系列的抽…

HandyJSON阅读笔记

2019独角兽企业重金招聘Python工程师标准>>> HandyJSON仓库: https://github.com/alibaba/HandyJSON HandyJSON 花了一天半的时间大概阅读学习了一下阿里巴巴开源的HandyJSON库, 只能说是简单的了解一下, Swift Runtime相关的代码没有深入了解. 但是, 收获还是满满的…