美文网首页androidAndroid知识Android开发
正确配置你的 Android 项目

正确配置你的 Android 项目

作者: 极小光 | 来源:发表于2017-03-03 17:31 被阅读341次

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

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

    gitignore

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

    tools folder

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

    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.<init>(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)
    

    原文:Configuring Android Project — Little Things That Matter

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

    相关文章

      网友评论

      本文标题:正确配置你的 Android 项目

      本文链接:https://www.haomeiwen.com/subject/cylrgttx.html