android

时间:2016-09-15 10:40:44

标签: android gradle lint

我的团队和我开发Android应用程序,并已决定所有应遵循的编码指南。因此,我开始按照以下链接实现自定义lint规则:

我遇到的问题实际上是在项目基础上实现这些lint规则。当我运行./gradlew clean build test install时,按规定适用规则并且一切正常。但是,当我使用./gradlew aarWrapper:assemble构建aar库并将其添加到我的libs文件夹时,linting不起作用。

我将以下内容添加到我的build.gradle文件中以添加库

repositories {
    flatDir {
            dirs 'libs'
        }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile(name: 'aarWrapper-debug', ext: 'aar')
}

我不确定我缺少什么,但是当我运行./gradlew lint时,它会运行linter而不是我的自定义规则......非常感谢任何帮助,提示或建议。

编辑1

这是运行gradle时的终端输出。

:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareAarWrapperDebugLibrary UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2421Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72421Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2421Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCompat2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCoreUi2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCoreUtils2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportFragment2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportMediaCompat2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2421Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidAnswers138Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidBeta121Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlytics261Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore2310Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase961Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement961Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation961Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps961Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesTasks961Library UP-TO-DATE
:app:prepareIoFabricSdkAndroidFabric1312Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:incrementalDebugJavaCompilationSafeguard UP-TO-DATE
:app:compileDebugJavaWithJavac UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources UP-TO-DATE
:app:mergeDebugShaders UP-TO-DATE
:app:compileDebugShaders UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:transformClassesWithDexForDebug UP-TO-DATE
:app:mergeDebugJniLibFolders UP-TO-DATE
:app:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
:app:validateSigningDebug
:app:packageDebug
:app:assembleDebug

BUILD SUCCESSFUL

Total time: 7.881 secs

编辑2

分叉项目:https://github.com/apertomove/linette

build.gradle:https://github.com/apertomove/linette/blob/apertomove-linette/build.gradle

编辑3 除了上面的链接,我发现这是由杰森阿特伍德写的post。我们也有一个运行jenkins的CI服务器,我们可以运行我们的检查,并根据我们的lint规则通知开发人员错误。这很有效,然而,它是向前迈出的一步。从Android Studio运行我们的项目时,从库中运行lint检查会更有价值和节省时间,而不是只提交我们的代码来发现我们的项目违反了规则。

2 个答案:

答案 0 :(得分:1)

我写了一篇关于如何在Android应用中添加和集成自定义lint规则的帖子,你可以看一下。它还有github repos的链接,显示它在android项目中的完成情况。 Link to post

对我来说最简单的方法是在gradlew文件中设置ANDROID_LINT_JARS路径并将其指向已签入VCS系统的自定义lint jar,以便在推送代码之前也可以在本地运行它。 希望它有所帮助。

答案 1 :(得分:0)

@hopeman将jar文件复制到/.android/lint文件夹。 Android会选择你的自定义lint规则。