2016-09-15 27 views
35

Mój zespół i ja opracowujemy aplikacje na Androida i zdecydowaliśmy się na wytyczne dotyczące kodowania, które wszyscy powinni przestrzegać. Dlatego rozpoczęła wdrażanie zasad zwyczaj lint jak na poniższych linków:Niestandardowa łatka lintingowa w Androidzie

Problem, który mam jest rzeczywiście wdrażania tych zasad lint nad projektem podstawa. Po uruchomieniu ./gradlew clean build test install, zgodnie z określonymi regułami, wszystko jest w porządku. Jednak, kiedy buduję bibliotekę aar z ./gradlew aarWrapper:assemble i dodaję ją do mojego folderu libs, linting nie działa.

I dodaje następujące do mojego pliku build.gradle dodać biblioteki

repositories { 
    flatDir { 
      dirs 'libs' 
     } 
} 

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

Nie jestem pewien, co mi brakuje, ale gdy uruchamiam ./gradlew lint Prowadzi LINTER ale nie z moich własnych reguł .. Każda pomoc, wskazówki i porady są mile widziane.

EDIT 1

Oto wyjściowy zacisk przy uruchamianiu 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 

EDIT 2

Rozwidlający projekt: https://github.com/apertomove/linette

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

EDIT 3 Oprócz powyższych łączy znalazłem ten post napisany przez Jason Atwood. My też mamy serwer CI z uruchomionymi JASKINI, w którym możemy uruchamiać nasze kontrole i informować deweloperów o błędach w oparciu o nasze zasady lint. Działa to świetnie, jednak jest to jeden krok daleko. Byłoby o wiele bardziej wartościowe i zaoszczędzony czas, aby uruchamiać sprawdzanie lint z biblioteki podczas uruchamiania naszych projektów poza Androidem Studio, zamiast zatwierdzać nasz kod tylko po to, aby dowiedzieć się, że nasz projekt łamie zasady.

+0

Czy uruchamianie 'gradle dependencies' pokazuje aarWrapper jako zależność od czasu kompilacji? – RaGe

+0

@RaGe Tak, wierzę w to, powyżej dodałem terminal po uruchomieniu './gradlew assembleDebug' na moim projekcie: wiersz 5': app: prepareAarWrapperDebugLibrary UP-TO-DATE' – hopeman

+0

czy możesz wysłać oryginalny plik gradle do niestandardowy projekt lint ..mógłbyś zrobić coś takiego, jak zapomnieć o wbudowanym słoiku z wbudowanym androidem, na przykład –

Odpowiedz

1

Napisałem post na temat dodawania i integrowania niestandardowych reguł lint do aplikacji na Androida, możesz rzucić okiem. Zawiera również linki do repozytoriów github pokazujących, jak to się robi w projekcie Android. Link to post

Najprostszym sposobem dla mnie było ustawić ANDROID_LINT_JARS ścieżkę w pliku gradlew i skierować go do niestandardowego niestrzępiącą słoiku, który sprawdził się w systemie VCS, dzięki czemu można go uruchomić lokalnie, jak również przed popychanie kod. Mam nadzieję, że to pomaga.

+0

Dzięki za odpowiedź, dodałem ANDROID_LINT_JARS ... do mojego pliku gradlew, jak opisano powyżej, ale wciąż nie udało się osiągnąć pożądanego rezultatu. Próbowałem tego z biblioteką .jar i .aar ... – hopeman

+0

Czy możesz wskazać mi swoją bazę kodów. –

+0

Niestety projekt jest projektem firmy i dlatego nie mogę go udostępnić. Zrobiłem jednak publiczne repozytorium z taką samą "konfiguracją gradacji" jak nasz projekt firmy. Możesz go znaleźć [tutaj] (https://github.com/hopeman15/StackOverFlow) Jedną z zasad jest na przykład to, że identyfikatory tekstowe powinny być poprzedzone prefiksem "text_", jednak nie jest ono przechwycone przez bibliotekę. – hopeman

0

@hopeman skopiuj plik jar do folderu/.android/lint. Android wybierze Twoje niestandardowe reguły lint.

+0

dzięki za opinie, jak widać powyżej w moim opisie, to nie jest mój problem. Twoja sugestia działa, ale nie jest tym, czego szukam. Problem polega na tym, że każdy programista musi sklonować repozytorium i stale sprawdzać nowe aktualizacje ... Nasz serwer Jennkins jest świetny i może automatycznie aktualizować bibliotekę w projekcie aplikacji, gdy wprowadzamy zmiany w projekcie lintingu, więc wciąż jestem szukam rozwiązania, które umożliwiłoby dodanie biblioteki do projektu mojej aplikacji i sprawdzenie reguł dla każdego projektu. – hopeman

+0

@hopeman Czy znalazłeś poprawkę dla tego problemu- "Niestandardowe reguły lintowania zawiodły w com.android.tools.build:gradle:2.3.0". Mam do czynienia z tym samym problemem. Każda pomoc będzie doceniona. – Madhu

+0

@Mandu nic nie przykro, jak tylko się zorientujemy, byłbym bardziej niż szczęśliwy. Szczęśliwe kodowanie ... – hopeman