开发一个Android应用之前,应该做点什么?

基于Qt平台开发安卓应用                                                   基于Qt平台开发安卓应用         在之前的Qt学习中,使用QtGUI来实现简单的界面与后台功能设计。这样开发出来的应用往往界面元素比较单一,美感几乎可以省略,与其他移动平台开发的App相比,确实逊色不少。基于此,Qt平台下开发GUI开始逐渐使用QML。使用QML开发的应用不仅界面美感十足,... 阅读详情

开发一个Android应用之前,应该考虑点什么?

本文原创,转载请注明出处。
欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的Android相关博文。

开心一刻

写在前面:

昨天参加了秋百万大大组织的北京GDG活动,收获颇丰。又跟几个有写作习惯的朋友建立了一个“神秘组织”,每两周为一个周期,每人都会产出一篇原创的文章,互相校验和探讨,意在督促组员之间学习和分享开源技术。而简书上的平台就交给我维护了,不出意外,几天之内大家就可以看到我们的主页和第一期成员的文章啦,敬请期待~

前几天接手了一个老员工遗留下来的代码,别提多痛苦了,甚至有了让我推倒重写的冲动,很多地方的设计问题颇多,老大也快无法忍受了。。。上学的时候写一篇作文,要想好主题立意和分段,解数学题的时候也得在草稿纸上梳理清楚逻辑之后再下笔。其实开发一个Android也应是如此,不做准备,埋头苦写,最后会导致问题颇多。所以本文会根据网络上优秀内容和我实际的开发经验讨论总结一下,开发一个Android应用之前,都应该做哪些准备。

编码规范

编码规范的问题是我最先想强调的,因为我接手的项目命名就极其混乱,甚至在一个类中的命名都没有统一化(生无可恋脸)。代码可能不是你自己一个人写,保证代码可读性是非常必要的。而规范存在的意义就是淡化每个人的习惯而达到统一。不多说,下面就介绍Android的编码规范。

  • 除了注释,代码中不出现中文
  • 每个类写上必要的注释,类的说明,作者,联系方式
  • 方法加上必要的注释说明,方便以后维护

包管理

  • base:存放基础类的包,里面的类以Base为前缀,例如BaseActivity;
  • activity:存放activity的包,每个activity命名以Activity结尾,例如MainActivity;
  • fragment:存放fragment的包,每个fragment命名以Fragment结尾,例如ChatFragment;
  • receiver:存放receiver的包;
  • service:存放service的包;
  • adapter:存放adapter的包,每个adapter命名以Adapter结尾,例如EventItemAdapter;
  • common:存放一些公共常量,例如后端接口、SharedPreferenceKey、IntentExtra等;
  • utils:存放工具类的包,比如常见的工具类:LogUtils、DateUtils;
  • entity:存放实体类的包;
  • widget:存放自定义View的包;

以上是一些常见的包,但不局限于此,视项目的具体情况而定。

命名

大驼峰命名(UpperCamelCase):每个单词的第一个字母都大写。

小驼峰命名(lowerCamelCase):除第一个单词以外,每一个单词的第一个字母大写。

命名的基本原则:

  • 尽可能地使用统一的命名规范;
  • 不使用汉语拼音;
  • 除了常见的英文缩写,尽量少地使用缩写;

包命名

  • 小写字母,参见上文包管理;
  • 连续的单词直接连接起来,不使用下划线;

Java类命名

  • 大驼峰命名 UserListAdapter;
  • 除常见的缩写单词以外,不使用缩写,缩写的单词每个字母都大写 RequesURLList;
  • 公共的工具类建议以Utils、Manager为后缀,如LogUtils;
  • 接口命名遵循以上原则,以able或ible为后缀;

变量命名

  • 成员变量命名
    • 小驼峰命名;
    • 不推荐使用谷歌的前面加m的编码风格(如果使用团队中使用m,则统一使用);
  • 常量命名
    • 单词每个字母均大写;
    • 单词之间下划线连接;
  • 控件变量命名
    • 小驼峰命名;
    • 建议使用 控件缩写+逻辑名称 格式,例如 tvPostTitle、etUserName;
    • 对应的控件的id的命名控件缩写_逻辑名称,单词均小写,用下划线连接,例如:tv_post_title、
    • et_user_name;
  • 常见的控件缩写如下:
    控件 缩写
    Linearlayout ll
    RelativeLayout rl
    TextView tv
    EditText et
    Button btn
    ImageView iv
    CheckBox chb
    ListView lv
    GridView gv
    RadioButton rb

方法命名

  • 小驼峰命名;
  • Getter和Setter方法,推荐使用自动生成的,写起来也很方便。注意,bool类型的变量Getter方法写成isTrue这种;
  • 方法名应当保证见名知义的原则,尽量不使用or或者and,遵循“do one thing”原则;

布局文件命名

  • activity、fragment布局文件名以对应的类别名称为前缀,逻辑名称放在其后,以下划线连接,例如activity_home、fragment_chat_list,方便查找;
  • ListView、GridView的item布局文件建议以list_item、gird_item为前缀,加上对应的逻辑名称,例如
    list_item_post、grid_item_photo;
  • Dialog的布局文件以dialog为前缀,逻辑名称放在其后,下划线连接,例如dialog_warnning;
    包含项布局命名以include开头,在加上对应的逻辑名称,例如include_foot
  • 控件的id命名参见控件变量命名;

资源命名

  • 图标资源以ic为前缀,例如ic_chat,指聊天图标;
  • 背景图片以bg为前缀,例如bg_login,指的是登录页的背景图;
  • 按钮图片以btn为前缀,例如btn_login,指的是登录按钮的图片,不过这只有一种状态,需要加上状态的可以在后面添加,例如btn_login_pressed,表示登录按钮按下的图片;
  • 当使用shape和selector文件为背景或者按钮时,命名参照以上说明;

项目架构

项目框架
一个好的项目架构可以降低项目的复杂性,并且易扩展、易维护,耦合低,结构清晰,功能内聚。
MVC,MVP,MVVM还有一些设计模式,结合你app的业务,自行选择一个最合适的一条路走到黑,建议不要“混搭”。

开源框架

开源框架的选择分两大类,一是权威性毫无争议,放心选择的这类帮助我们快速开发的,比如:

  • 网络 Retrofit + OkHttp+ RxJava、Volley、android-async-http
  • 依赖注入 Dagger2、ButterKnife、RoboGuice
  • 事件总线 otto、EventBus
  • 图片加载 Fresco、Glide、Picasso
  • 数据库 GreenDao、Ormlite、LitePal
  • 日志输出 logger、LogUtils
  • 当然不能忘了Google提供的兼容support全家桶

还有一类框架虽然不是毫无争议,但是也能极大节省我们的时间,提升开发效率,对于这类项目,要在Github上长期淘宝了。找那种star很多,issues解决很快,长期维护的项目,这种坑会比较少。

代码细节

抽取基类
即使目前你没有需要,也一定要抽取一个BaseActivity和BaseFragment,因为早晚会用到,切记!
比如:

public abstract class BaseActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        init();
    }

    private void init() {
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initListener();
    }

    /**
     * 初始化布局
     */
    protected abstract void initView();

    /**
     * 初始化数据
     */
    protected  abstract void initData();

    /**
     * 初始化侦听
     */
    protected abstract void initListener();

}

BaseFragment也同理,随着业务的增加和抽象,基类会继续扩展。其实不仅仅是BaseActivity和BaseFragment,如果你一个业务模块中有很多相似和相同的逻辑,也可以抽取一个BaseXXX这是非常好的一个习惯。

还有一些建议,不做展开,大家请自行搜索:

  • Android Studio上好用的插件
  • selector
  • 图片的.9处理
  • Resources xml文件中,记得用注释分割每个类用到的资源,建议不共用
  • 慎用static关键字
  • 定期code review,不断代码重构

性能优化

推荐一个我曾经写过的总结:

Android性能优化总结

写在后面:

本文做了一个初步总结,未来会慢慢扩展和完善,如果有遗漏,大家可以补充~

用安卓 WebView 做一个“套壳”应用 前言 目前手机应用市场上的 APP 类型主要为以下两种: Native App(原生应用):直接针对平台(Android、iOS 等手机系统)进行开发,属于性能最优的方案,也是开发成本最大的方案。 Hybrid App(混合应用):即为原生 WebView 加 HTML5 网页内容的形式。只需要开发一套 HTML5 业务逻辑,就可以同时运行在不同的平台上,相对比较灵活,内容可以快速更新,开发维护成本较低。最大的缺点就是性能远不及原生应用,交互上也做不到原生的那么自然。 React Native 阅读详情

相关推荐

安卓开发——做一个能定时唤起其他APP的闹钟程序

安卓开发——做一个能定时唤起其他APP的闹钟程序 准备工作: 要让一个app唤起另一个app,首先要做的是要知道被唤起app的包名,一般在手机的 文件管理->Android->data就能看到已安装的app的包名了。 比如这里的com.baidu.BaiduMap和com.baidu.netdisk对应的就是“百度地图”和“百度网盘”这两个app。 本次博客我将用QQ、微信和新浪微博这三个app作为闹钟唤起的例子,想用闹钟唤起其他app,只需要把程序里的包名和相关位置的描述性文字进行修改,就能

joe337347889的博客 8288

安卓 Android之开发简单小应用(一)

安卓 Android之开发简单小应用(一) 一、简述     记 --没学过Android之开发简单小应用。(课程设计作业)     例子打包:链接:https://pan.baidu.com/s/1LEQ1oWkUX8OmtfCFVydxWQ 密码:9o0d 二、环境搭建 软件打包:链接:https://pan.baidu.com/s/1VVsZqPrwOtvMuzeeJE1y_A 密...

Genven_Liang的博客 9万+

鸿蒙应用开发和安卓应用开发的区别

维度鸿蒙(HarmonyOS)安卓(Android)架构分布式微内核,多设备协同单设备Linux内核,跨设备能力弱语言ArkTS(声明式)Kotlin/Java(命令式/声明式)UI框架ArkUI(声明式,跨设备适配)View系统/Compose(手机/平板为主)开发工具分布式能力原生支持(分布式软总线、数据同步)依赖第三方服务,功能有限应用格式HAP,原子化服务APK/AAB生态发展中,HMS Core成熟,Google Play服务性能Ark编译器,低功耗ART,优化依赖硬件。

u011732210的博客 1673

Android 项目开始前的一些准备

1、原生图片库:Android Material Icon Generator 项目地址地址: https://github.com/konifar/android-material-design-icon-generator-plugin 作用: 在集成了所有的Material Icon,支持在android studio中直接生成一些简单的icon图标。

小T的博客 1018

F280049C Buffered Digital-to-Analog Converter (DAC)

使用DAC模块很简单,只需要配置参考电压,并写入DACVALS寄存器一个数字值即可。参考电压可配置为外部参考VDAC和内部参考电压1.65V和2.5V,并结合增益作为DAC模块最终的参考电压DACREF。举个例子,配置参考电压为内部参考电压1.65V,增益设置为2,则参考电压DACREF=3.3V,若向DACVALS写入数字值2048,则输出的DAC模块的输出带电压DACOUT=DACVALS×DACREF4096=1.65VDACOUT=

xht2403267701的博客 2369

海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径

本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。

weixin_29201859的博客 293

编码规范(二)----JAVA编码规范插件

一、前言 在项目开发的过程中,很多时候,无法统一大家的编码规范,你有你的风格,我有我的风格,虽然每个公司都有自己的规范,但是有时候,作为开发人员的我们,写者写着,就按自己的来了,反正有没有人来检查,或者是人为的检查感觉费时间,这时候,就可以通过一些代码插件工具来提高我们的效率,目前常见的有:CheckStyle、阿里巴巴的p3c插件等。 CheckStyle简介

fendo 8138

[官方培训]22-UE资产优化 Epic 肖月 笔记

Nanite+Lumen目标:面向TA,美术,不影响视觉的前提下,优化运行和编辑效率引擎:UE5.1延迟管线平台:主流PC,Windows 10 with DX12。

Tcohneyn的博客 1576

转载新闻 开发第一个Android应用之前你需要知道的六件事

本文出自:Philosophical Hacker,译文出自:开发技术前线,译者:dengshiwei 我的第一个应用非常糟糕。事实上,它糟糕得以致于我从应用市场上删除它,同时我甚至都不会在我的简历上罗列出它。如果我在开发之前能够知道一些Android开发的事情,也不会糟糕到这步田地。 本文中所罗列的事情是你在开发第一个Android应用的时候需要牢记在大脑中的。我接下来将展示的实际错误均来自...

Java和Android架构 235

探索gtwr of mgtwr in python

代码】探索gtwr of GWmodel in python。

m0_46268055的博客 3388

在Centos上从零开始部署并运行TinyWebServer服务器,过程记录(非常详细)

TinyWebServer是个什么项目?它是Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器。使用线程池+非阻塞socket+epoll(ET和LT均实现) +事件处理(Reactor和模拟Proactor均实现) 的并发模型使用状态机解析HTTP请求报文,支持解析GET和POST请求访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件实现同步/异步日志系统,记录服务器运行状态。......

AnChenliang_1002的博客 3021

开始一个项目-1-做好准备

项目开始,基本的框架有来,接下来就上技术选型来。 前端:由于是采用树莓派,使用python来开发的话比较方便和快捷,所以确定采用python,至于版本问题,因为官方已经停止对python3以下的支持,所以,后续采用python3。物联网通讯方面如果直接采用TCP或UDP的话也是可以的,但会增加不少开发时间,还有,项目开发尽量利用现有的轮子。对去联网通讯方面对协议和开发等做来一个比较,最终采用MQ...

crkchina的专栏 214

Open3D——平面点云凸多边形轮廓提取【2025最新版】

平面点云凸多边形轮廓提起,博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 6754

转载:开发第一个Android应用之前你需要知道的六件事

转自:http://www.youkuaiyun.com/article/2015-07-30/2825333 我的第一个应用非常糟糕。事实上,它糟糕得以致于我从应用市场上删除它,同时我甚至都不会在我的简历上罗列出它。如果我在开发之前能够知道一些Android开发的事情,也不会糟糕到这步田地。 本文中所罗列的事情是你在开发第一个Android应用的时候需要牢记在大脑中的。我接下来将展示的实际错

u012589009的专栏 224

AIGC实战——变分自编码器(Variational Autoencoder, VAE)

变分自编码器通过在模型中引入随机性,并限制潜空间中的点的分布来解决自编码器存在的问题。只需进行一些微小的调整,就可以将自编码器转换为变分自编码器,从而使其成为真正的生成模型。在本节中,我们介绍了变分自编码器的基本原理,并使用 `Keras` 实现了一个变分自编码器用于生成 Fashion-MNIST 图像。

盼小辉丶的博客 1万+

YOLOv11改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 779

如何用Qt写一个安卓Android应用

至此环境就搭建好了,宝子们就可以掏出你Android系统的手坤用数据线连接电脑了,然后打开你手机的设置,找到关于本机,再然后连点几下版本号让手机处于开发者模式 ,在开发者选项中打开USB调试就OK啦。这里就可以绑定SDJ,NDK,JDK的路径了,JDK的路径会自动绑定你下载的,如果不是也很好找,一般就在C:\program Files(x86)\Java这个目录下。中间会让你选择安装目录,选择安装到你空间比较充足的地方就好了,比较简单就不放图了。

qq_59840326的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

开发自己的第一个安卓app

开发自己的第一个安卓app 在开发安卓app的时候,首先我们需要配置一下电脑的开发环境。到jdk官网下载最新版本的jdk安装包。 Window64位下载地址:http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-windows-x64.exe 下载完成后,全部默认安装,一直点击下一步知道完成。在安装的过程中

tongyong128的专栏 8万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

安卓开发—Android基础

安卓开发—Android基础 移动开发 移动开发也叫做移动互联网开发。是指以手机、PDA、UMPC等便携终端为基础,进行相应的开发工作,由于这些随身设备基本都采用无线上网的方式,业内也称作为无线开发。 移动应用包括早期的WM掌上助理设备,Web os设备、java设备、塞班设备,以及现在现在火热的安卓和苹果设备等移动应用的开发。 谷歌提供安卓平台,要开发,只需要掌握java语言,就可以在安卓平台上进行开发。 三大主流移动开发平台 以下是Android、IOS、Windows phone三大主流移

cs_loser的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

安卓 Android之开发简单小应用(二)

安卓 学生籍贯管理小应用练习一、简述        简单的一个小应用,用SQLite数据库进行存储数据。        源文件打包:(附带txt文件存储版本)二、效果...

Genven_Liang的博客 9656

安卓开发 Android Studio安装教程

智能移动终端APP现在十分普及,一个是苹果APP,一个是安卓APP。工欲善其事必先利其器,为了更好地进行安卓APP开发

m0_65489276的博客 9263

安卓程序与设计 app开发 校园点餐(类似饿了么)

     大二上学期选了《安卓程序与设计》这门课,看了《安卓应用开发教程》视频书籍,跟着学长学姐们完成了该项目,其中也有老师的指导。程序含完整运行的app代码,连接了数据库,能搭建后台服务器,实现了账号登陆、注册、点餐、支付、评论等功能。其中图片资源使用短链接生成的,并保存在Android Studio draw资源中。 1.登陆界面以及登陆后的主界面 输入帐户名、密码进行登陆,同时点击注册...

h471507602的博客 1万+

制作简单的android小应用,安卓 Android之开发简单小应用(一)

安卓 Android之开发简单小应用(一)一、简述记 --没学过Android之开发简单小应用。(课程设计作业)例子打包:链接:https://pan.baidu.com/s/1LEQ1oWkUX8OmtfCFVydxWQ 密码:9o0d二、环境搭建软件打包:链接:https://pan.baidu.com/s/1VVsZqPrwOtvMuzeeJE1y_A 密码:qspp下载解压即可1、安装JD...

weixin_29555609的博客 2678

【安卓】Android开发入门 你的第一个apk应用

一个入门的安卓应用,应用功能:打开百度首页。在实际应用中,我们可以将网址替换成我们自己的网页ip地址、域名等;这样就可以在手机端 无需手动输入网址, 直接打开网站

孟秋与你的博客 7946

不会Java?没关系,用C/C++做安卓APP,Qt for Android开发

首先Qt就不多说了,大家应该都有了解,跨平台的应用程序开发框架,Windows、Linux、Android、IOS(网上听说是可以支持的,没有试过)等一些平台都可以使用,最关键的是基本同一套代码,不用怎么修改就可以切换平台,相当方便。1. 下载Qt软件,我用的是Qt-opensource-windows-x86-5.12.0版本的,注意:后续插件的版本和Qt的版本貌似要有对应,有的版本不对可能不行,尽量用我推荐的版本。安装没什么好说的,Qt安装的时候注意选择安卓的插件。3. 下载JDK,版本为8u201。

ic2121的博客 1万+
上一篇: Activity的生命周期,你足够了解吗?
下一篇: Android中不得不谈的setContentView
MeloDev
博客等级 码龄11年 93粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值