简评:优秀的 Android 项目从配置开始。: )

作者在这里介绍了一个 Android 项目应该有的配置,文中讲到的内容大家都可以运用在自己的 Android 模板项目中。

gitignore

当你新建 Android 项目时,默认会生成 gitignore 文件,但并没有包含所有必要的规则。这里推荐大家使用 gitignore.io 网站,只需要输入关键字,比如 Android, Intellij 再点击按钮,就能得到一个标准的 gitignore 文件啦。

tools folder

如果你的项目有很多的第三方脚本,规则列表或其他的文件,不要随意的将它们放在 root 目录下,新建一个 tools 文件夹,把它们都放在里面。通常你可以放入自定义的 gradle 脚本文件,proguard 规则和静态代码分析工具,例如:pmd, findbugs,

flavors

Flavors 用来实现多渠道打包,作者自己通常是分为了 dev 和 prod 两个 flavor:

productFlavors {

dev {

signingConfig signingConfigs.debug

versionCode gitVersionCodeTime

versionName gitVersionName

}

prod {

signingConfig signingConfigs.release

versionCode gitVersionCode

versionName gitVersionName

}

}

keystore

当你通过 Android Studio 运行或 debugging 你的项目时,Android Studio 会通过 Android SDK tools 自动生成 debug keystore 为你的应用签名。

但使用默认的 debug keystore 会有下面几个问题:

有效期 365 天

从不同计算机上安装应用程序需要先卸载

google 服务需要 keystore 的 SHA-1 fingerprint

所以,建议开发者自己生成 debug keystore 并提交到版本控制系统中。

signingConfigs {

debug {

keyAlias 'androiddebugkey'

keyPassword 'android'

storePassword 'android'

storeFile file('../keystore/debug.keystore')

}

release {

...

}

}

proguard

Android proguard 主要有三个用途:

消除未使用的代码 - 帮助你避免 64k 限制

优化代码和 APK

模糊代码 - 让 APK 难以被逆向工程

但是代码混淆和优化显著增加了编译的时间,不利于平时的开发调试。这也是为什么推荐针对 release 和 debug 使用不同的 proguard 规则。

buildTypes {

release {

minifyEnabled true

proguardFiles getDefaultProguardFile('proguard-android.txt'),

"$project.rootDir/tools/rules-proguard.pro"

signingConfig signingConfigs.release

}

debug {

minifyEnabled true

proguardFiles getDefaultProguardFile('proguard-android.txt'),

"$project.rootDir/tools/rules-proguard-debug.pro"

signingConfig signingConfigs.debug

}

}

对于用于 debug 的 proguard 文件,需要加上以下规则来强制 proguard 忽略掉警告、代码混淆和优化:

# Add project specific ProGuard rules here.

-dontobfuscate

-dontoptimize

-ignorewarnings

对于 release 的 proguard 文件设置规则就比较复杂了,因为几乎每一个库都有自己独特的规则。这里推荐一个开源项目:android-proguard-snippets,里面包含了几乎所有主流库的 proguard 规则。

strict mode

Android StrictMode能帮助开发者检测应用中可能出现的多种问题:

可关闭的对象没有关闭

在主线程中执行了文件读取或网络请求

URI 暴露

...

这里建议开发者在 debug build 时通过 *detectAll *方法检测所有类型的问题:

if (BuildConfig.DEBUG) {

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectAll()

.penaltyLog()

.build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectAll()

.penaltyLog()

.build());

}

像是忘记关闭 SQLiteCursor 这类问题出现时,日志中就会有提示:

StrictMode:

A resource was acquired at attached stack trace but never released.

See java.io.Closeable for information on avoiding resource leaks.

java.lang.Throwable: Explicit termination method 'close' not called

at dalvik.system.CloseGuard.open(CloseGuard.java:184)

at android.database.CursorWindow.(CursorWindow.java:111)

at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)

at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:139)

at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)

at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197)

at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)

at com.dd.template.MainActivity.onCreate(MainActivity.java:124)

欢迎关注:知乎专栏「极光日报」,每天为 Makers 导读三篇优质英文文章。

android 设置folder类型,正确配置你的 Android 项目相关推荐

  1. android 设置按钮高度,如何在本机android中设置按钮的高度

    我正在学习反应 Android移动应用程序的本机编程.我正在制作一个我需要设置按钮高度的屏幕.我在视图中添加了按钮并设置了使用样式的高度,但按钮高度没有变化. /** * LoginComponent ...

  2. android 设置圆角边框下边没起作用,Android布局实现圆角边框效果

    首先,在res下面新建一个文件夹drawable,在drawable下面新建三个xml文件:shape_corner_down.xml.shape_corner_up.xml和shape_corner ...

  3. android设置透明主题后背景为黑色,android – 设置主题Programmactically导致黑色背景...

    当我运行我的 Android应用程序时,我正在调用一种方法来检查应用程序是否在平板电脑上运行: public boolean isTablet(Context context){ boolean xl ...

  4. android设置app全局没通知声,从android中的firebase发送通知时没有通知声音

    试试这个.... public void buildPushNotification(Context ctx, String content, int icon, CharSequence text, ...

  5. AndroidStudio_使用NanoHTTPD搭建HTTP服务_把android设置当成一个http服务器来使用---Android原生开发工作笔记225

    多的不说了,直接看这个案例就可以了 package com.baidu.idl.face.main.server;import android.app.Activity; import android ...

  6. android设置个性桌面,秀出真个性 Android桌面美化类软件横评

    桌面设置对比 与手机本身的系统设置一样,每款软件也都会有自己的设置选项,更何况这是要更改许多元素的桌面类软件.所以,桌面设置环节是否直观是否易用,便是我们这个环节所要考核的对象了. 91桌面 分数评定 ...

  7. Android 设置音量的几种方法

    Android 设置音量的几种方法 Android 设置音量的几种方法 方法一.被动设置法 方法二.主动设置法 渐进设置 直接设置 按键设置 Android 设置音量的几种方法 在Android下,音 ...

  8. Xamarin.Android编译CPU类型选择方式

    Xamarin.Android编译CPU类型选择方式 在Xamarin.Android编译的时候,默认提供了5种CPU类型供大家选择.它们分别为armeabi.armeabi-v7a.arm64-v8 ...

  9. Android设置状态栏颜色,沉浸式状态栏 fllutter Android设置沉浸式状态栏

    1. Android原生设置沉浸式状态栏,设置状态栏颜色,字体颜色 import android.annotation.TargetApi; import android.app.Activity; ...

最新文章

  1. android地图定位
  2. 深入理解 Linux Cgroup 系列(二):玩转 CPU
  3. AIR for IOS开发问题小结
  4. 牛客假日团队赛1 B
  5. php的数据校验,php 数据类型校验函数的简单示例
  6. 总结缓存使用过程中的几种策略以及优缺点组合分析
  7. 前端学习(1124):思考题
  8. mysql数字前面有0_Mysql中前边有0的数据,0会被舍去的问题
  9. 学php记不住函数,为什么都是记不住PHP 的函数名
  10. CSS结构伪类选择器
  11. bcp sqlcmd bulkinsert在unicode问题,Unexpected EOF encountered in BCP data-file
  12. 使用Foobar2000在PC上播放.ios音乐
  13. 常用Linux命令--CPU和GPU查看
  14. 最好用的Mac任务规划软件【滴答清单】
  15. 团队项目(小小大佬带飞队)
  16. 2015年工作总结——①名IT女的日常
  17. Python周刊491期
  18. Google推出拼音输入法了!
  19. lol老是闪退到桌面_lol闪退到桌面怎么解决
  20. java日志系统介绍

热门文章

  1. .NET Core UI框架Avalonia
  2. IdentityServer4(10)- 添加对外部认证的支持之QQ登录
  3. 基于微软开发平台构建和使用私有NuGet托管库
  4. 外媒:微信小程序顺应“APP中启动APP”的行业潮流
  5. Django04: ORM配置与使用MySQL数据库
  6. windows 常用系统变量
  7. ArcGIS实验教程——实验三十六:ArcGIS Python脚本的巧妙使用
  8. 地球空间与数字测绘知识总结
  9. WCF服务自托管(Self-Hosting)
  10. Android之提示This version of Android Studio cannot open this project, please retry with Android Studio