关键词不能为空

当前您在: 主页 > 英语 >

Android开发技术文档

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 01:04
tags:

-

2021年2月28日发(作者:nemesis)


Android


开发最佳实践




Futurice


公司


A ndroid


开发者中学到的经验。



遵循以下准则,避免重复发明


轮子。若您对开发


iOS



Windows Phone


有兴趣,



请看


iOS Good


Practices





Windows client Good Practices



这两篇文章。



摘要



?



?



?



?



?



使用


Gradle


和它推荐的工程结构



把密码和敏感数据放在


ties


不要自己写


HTTP


客户端


,


使用


Volley



OkHttp



< br>使用


Jackson


库解析


JS ON


数据



避免使用

< br>Guava


同时使用一些类库来避免


65k method limit


(一个


Android


程序中最多能执行


65536


个方法)



使用


Fragments


来呈现


UI


视图



使用


Activities


只是为了管理


Fragments


Layout


布局是


XMLs


代码,组织好它们




layoutout XMLs


布局 时,使用


styles


文件来避免使用重复的属性



使用多个


style


文件 来避免单一的一个大


style


文件



保持你的



简短


DRY(


不要重复自己


)


,只是定义 调色板



总是使用


DRY(


不要重复自己


)


,定义通用常数



不要做一个深层次的


ViewGroup


在使用


WebViews


时避免在客户端做处理 ,当心内存泄露



使用


Robolec tric


单元测试,


Robotium



UI


测试



使用


Genymotion


作为你的模拟器



总是使用


ProGuard



DexGuard


混淆来项目



?



?



?



?



?



?



?



?



?



?



?



?



Android SDK


将你的


Android SDK


放在你 的


home


目录或其他应用程序无关的位置。

< br>


当安装


有些包含


SDK



IDE


的时候,可能会将

< br>SDK


放在


IDE


同一目录下, 当你需要


升级(或重新安装)


IDE


或 更换的


IDE


时,会非常麻烦。



此外,若果你的


IDE


是在普通用户,不是 在


root


下运行,还要避免吧


SDK


放到一下需要


sudo


权限

< p>
的系统级别目录下。



构建系统



你的默认编译环境应该是< /p>


Gradle


. Ant


有很多限制, 也很冗余。使用


Gradle



完成以 下工作很方便:



?



?



?



?



?



构建


APP


不同版本的变种



制作简单类似脚本的任务



管理和下载依赖



自定义秘钥



更多



同时,


Android


Gradle


插件作为新标准的构建系统正在被


Google


积极的开发。



工程结构



有两种流行的结构:老的


Ant & Eclipse ADT


工程结构,和新的


Gradle &


Android Studio


工程结构,



你应该选择新的工程结构 ,如果你的工程还在使用


老的结构,考虑放弃吧,将工程移植到新的结构。



老的结构


:


old- structure


├─ assets



├─ libs



├─ res



├─ src



│ └─ com/futurice/project



├─



├─



├─ ties



└─ proguard


-


新的结构



new- structure


├─ library


-foobar


├─ app



│ ├─ libs



│ ├─ src



│ │ ├─ androidTest



│ │ │ └─ java



│ │ │ └─ com/futurice/project



│ │ └─ main



│ │ ├─ java



│ │



│ └─ com/futurice/project



│ │ ├─ res



│ │ └─



│ ├─



│ └─ proguard


-


├─



└─



主要的区别在于,新的结构明确的分开了


'source sets' (


main


,


andro idTest


)



Gradle


的一个理念。



你可以做到,例如,添加源组


‘paid’



‘free’



src


中,这


将成为 您的应用程序的付费和免费的两种模式的源代码。



你的项目引用第三方项目库时(例如,


library-foo bar


),拥有一个顶级包名


app


从 第三方库项目区分你的应用程序是非常有用的。



然后



不断


引用这些库项目,其中

app/


可以引用。



Gradle


配置



常用结构



参考


Google's guide on Gradle for Android



小任务



除了


(shell, Python, Perl, etc)


这些脚本语言,你也可以使用


Gradle


制作


任务。



更多信息请参考


Gradle's documentation




密码



在做版本


release


时你


app





你需要定义



signingConfigs


.



时你应该避免以下内容:



不要做这个


.


这会出现在版本控制中。



signingConfigs {


release {


store(



)


storePassword




keyAlias




keyPassword




}


}


而是,建立一个不加入版本控制系统的


ties


文件。



KEYSTORE_PASSWORD=password123


KEY_PASSWORD=password789


那个文 件是


gradle


自动引入的,你可以在



文件中使用,例如:



signingConfigs {


release {



try


{


store(



)


storePassword


KEYSTORE_PASSWORD



keyAlias




keyPassword


KEY_PASSWORD



}



catch


(ex) {



throw



new



InvalidUserDa taException


(



KEYST ORE_PASSWORD and KEY_PASSWORD in ties.


)


}


}


}


使用


Maven


依赖方案代替使用 导入


jar


包方案



如果在你的项目中你明确使用



ja r


文件,那么它们可能成为永久的版本,如


2.1.1


.


下载


jar


包更新他 们是很


繁琐的,



这个问题

< p>
Maven


很好的解决了,这在


Android Gradle


构建中也是推


荐的方法。你可


以指定版本的一个范围,如


2.1.+

< br>,


然后


Maven


会自动升级到 制


定的最新版本,例如:



dependencies {


compile


':rxjava-core:0.19.+'



compile


':rxjava- android:0.19.+'



compile


':jackson-databind:2.4.+'



compile


':jackson- core:2.4.+'



compile


':jackson-annotations:2.4.+'



compile


':okhttp:2.0.+'



compile


':okhttp- urlconnection:2.0.+'



}


IDEs and text editors


IDE


集成开发环境和文本编辑器



无论使用什么编辑器,一定要构建一个良好的工程结构



编辑器每个人都有自己



< p>
选择,让你的编辑器根据工程结构和构建系统运作,那是你自己的责任。



当下首推


Android Studio


,


因为他是由谷歌开发,最接近


Gradle


,默认使用最新


的工程结构,已经到


beta


阶段



(目前已经有


release 1.0


了),它就是为


Android


开发定制的。

< br>


你也可以使用


Eclipse ADT



,但是你需要对它进行配置,因为它使用了旧的工


程结构




Ant


作为构建系统。你甚至可以使用纯文版编辑器如


Vim



Sublime


Text

< br>,或者


Emacs


。如果那样的话,你需要使用


Gardle



adb


命令行。如果使



Eclipse


集成


Gradle


不适合你,你只是使用命令行构建工程,或迁移 到


Android Studio


中来吧。



无论你使用何 种开发工具,只要确保


Gradle


和新的项目结构保持官方的 方式构


建应用程序,避免你的编辑器配置文件加入到版本控制。例如,避免加入


Ant



文件。



特别如果你改变


Ant


的配置,不要忘记保 持



是最新和起作用的。同时,善待其他开发者,不要强制改变他 们的开发工具和


偏好。



类库



Jackson



是一个将

< p>
java


对象转换成


JSON


JSON


转化


java


类的类库。


Gson



是解决这个问题的流行方案,然而我们发现


Jackson


更高 效


,


因为它支持


替代的方法处理


JSON:


流、内存树模型


,


和传统


JSON- POJO


数据绑定。不过,


请记住,


Jsonkson


库比起


GSON


更大 ,所以根据你的情况选择,你可能选择


GSON


来避免


APP 65k


个方法限制。其它选择


:


Json-smart


and


Boon JSON



网络请求,缓存,图片



执行请求后端 服务器,有几种交互的解决方案,你应该


考虑实现你自己的网络客户端。使用

< p>


Volley



Ret rofit



Volley


同时提供 图片


缓存类。若果你选择使用


Retrofit,


那么考虑使用


Picasso


来加载图片和缓存,


同时使用


OkHttp


作为高效的网络请求。


Retrofit


< p>
Picasso



OkHttp

< br>都是有同


一家公司开发(注:



是由


Square



公司开发),所以它们能很好的在一起运行。


OkHttp < /p>


同样可以和


Volley


在一起使用


Volley


.


RxJava



是函数式反应性的一个类库,换句话说,能处理异步的事件。



这是一


个强大的和有前途的模式,同时也可能会造成混淆,因为 它是如此的不同。




们建议在使用这 个库架构整个应用程序之前要谨慎考虑。



有一些项目是使用< /p>


RxJava


完成的,如果你需要帮助可以跟这些人取得联系:< /p>


Timo Tuominen,


Olli Salonen, Andre Medeiros, Mark Voit, Antti Lammi, Vera Izrailit, Juha


Ristolainen.


我们也写了一些博客:



[1]


,


[2]


,


[3]


,


[4]


.


如若你之前有使用过


Rx


的经历,开始从


API

< br>响应应用它。



另外,从简单的


UI


事件处理开始运用,如单击事件或在搜索栏输入事件。


< /p>


若对你的


Rx


技术有信

< br>心,同时想要将它应用到你的整体架构中,那么请在复杂的部分写好


Javado cs


文档。



请记住其他不熟悉


RxJava


的开发人员,可能会非常难理解整个项目。



尽你的的全力帮助他们理解你的代码和


Rx




Retrolambda



是一个在< /p>


Android


和预


JDK8

< p>
平台上的使用


Lambda


表达式语法

< p>


Java


类库。



它有助于保持你代码的紧凑性和可读性,特别当你使用如


RxJav a


函数风格编程时。



使用它时先安装


JDK8


,在


Android Stu dio


工程结构


对话框中把它设置成为


SDK


路径,同时设置


JAVA8_HOME

< br>和


JAVA7_HOME


环境变


量,



然后在工程根目录下配置





dependencies {


classpath


'a:gradle- retrolambda:2.4.+'



}


同时在每个


module




中添加



apply


plugin


:


'retrolambda'




android {


compileOptions {


sourceCompatibility


Ja vaVersion.


VERSION_1_8



targetCompatibility


Java Version.


VERSION_1_8



}



retrolambda {


jdk


System.


ge tenv(



)


oldJdk


System.


getenv(



)


javaVersion


Ja vaVersion.


VERSION_1_7



}


Android Studio


提供


Java8 lambdas


表带 是代码提示支持。如果你对


lambdas


不熟悉,只需参照以 下开始学习吧:



?



任何只包含一个接口的方法都是



同时代码可以被折叠成


更紧凑的语法



如果对参数或类似有疑 问,就写一个普通的匿名内部类,然后让


Android Status


为你生成一个


lambda




?



当心


de x


方法数限制,同时避免使用过多的类库


Android a pps


,当打包成一个


dex


文件时, 有一个


65535


个应用方法强硬限制


[1]



[2]



[3]




当 你突破


65k


限制


之后你会看到一个致 命错误。因此,使用一个正常范围的类库文件,同时使用


dex-method- counts



工具来决定哪些类库可以再

65k


限制之下使用,特别的避


免使用

Guava


类库,因为它包含超过


13k

< br>个方法。



Activities and Fragments


Fragments


应该作为你实现


UI


界面默认选择。你可以重复使用


Fra gments



户接口来


< p>
组合成你的应用。我们强烈推荐使用


Fragments

< br>而不是


activity


来呈



UI


界面,理由如下:



?



提供多窗格布局解决方案


Fragments


的引入主要将手机应用延伸到平板


电脑,所以在平板电脑上你可能有


A



B


两个窗格,但是 在手机应用上


A



B

< br>可能分别充满



整个屏幕。如果你的应用在最初就使用了


fragments



那么以后将你的 应用适配到其他不同尺寸屏幕就会非常简单。



?



屏幕间数据通信



从一个


Activity


发送复杂数据


(

< br>例如


Java


对象


)

< p>
到另外一



Activity


Android



API


并没有提供合适的方法。不过使用


Fragment

< br>,你可以使用



一个


activ ity


实例作为这个


activity



fragments


的通信通道。即使这样比


Activity



Activity


间的通信好,你也想考虑使



Event Bus


架构,使用如



Otto



或者



greenrobot EventBus


作为更简洁


的实现。



如果你希望避免添加另外一个类库,


RxJava


同样可以实现一



Event Bus




?



Fragments


一般通用的不只有


UI



你可以有一个没有界面的


fragment




Activity


提供后台工作。



进一步你可以使用这个特性来创建一个


fragment


包含改变其它


fragment


的逻辑



而不是把这个逻辑放在


activity


中。



?



甚至


ActionBar


都可以使用 内部


fragment


来管理



你可以选择使用一个


没有


UI


界面的


fragment


来专门管理

< br>ActionBar,


或者你可以选择使用在


每个


Fragment




添加它自己的


action


来作为父


Activity



ActionBa r.


参考


.


很不幸,我们不建议广泛 的使用嵌套的


fragments


,因为



有时会引起


matryoshka bugs


。我们只有当它有意义


(


例如,在水平滑动的


ViewPager




屏幕一样


fragment


中< /p>


)


或者他的确是一个明智的选择的时候才广泛的使用


fragment




在一 个架构级别,你的


APP


应该有一个顶级的

activity


来包含绝大部分业务相


关的


fragment


。你也可能还有一些辅助的


act ivity


,这些辅助的


activity

< br>与主


activity


通信很简单限制在这两种方法



a()





ion()


或类似的方法。



Java


包结构



Android


应用程序在架构上大致是

Java


中的


Model-View- Controller


结构。




Android



Fragment



Activity


通常上是控制器类


().


换句话说,他们是用户接


口的部分,同样也是


Views


视图的部分。



正是因为如此,才很难严格的将


fragments (


或者


activities)


严格的划分成



控制

< br>器


controlloers


还是视图

< br>


views




最还是将它们放在自己单独的



fragments



包中。


只要你遵循之前提到的建议,


Activities


则可以放在顶级目录下。



若果你规划 有


2



3


个以 上的


activity


,那么还是同样新建一个


activities


包吧。



然而,这种架构可以看做是另一种形式的


MVC


< p>


包含要被解析


API


响 应的


JSON


数据,来填充的


POJO



models


包中。



和一个


views


包来包含 你的自定


义视图、通知、导航视图,


widgets

< p>
等等。



适配器


Adap ter


是在数据和视图之


间。然而他们通常需要通过

< p>
getView()


方法来导出一些视图,



所以你可以将


adapters


包放在


views


包里面。



一些控制器角色的类是应用程序级别的,同时是接近系统的。



这些类放在


managers


包下面。



一些繁杂的数据处理类,比如说



放在


utils


包下


面。



与后端交互负责网络处理类,放在

network


包下面。



总而言之,以最接近用户而不是最接近后端去安排他们。



t

-


-


-


-


-


-


-


-



本文更新与2021-02-28 01:04,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/677358.html

Android开发技术文档的相关文章