2016-09-15 2 views
35

Mein Team und ich entwickeln Android-Apps und haben entschieden, Richtlinien für die Codierung, die alle folgen sollten. Ich begann daher individuelle Fusseln Regeln gemäß den folgenden Links Umsetzung:Benutzerdefinierte Linting Lib in Android

Das Problem, das ich habe, ist eigentlich diese Fusseln Regeln für die Durchführung eines Projekts Basis. Wenn ich ./gradlew clean build test install ausführen, gelten die Regeln wie angegeben und alles ist gut. Wenn ich jedoch die AAR-Bibliothek mit ./gradlew aarWrapper:assemble baue und sie zu meinem libs Ordner hinzufüge, funktioniert das Linting nicht.

Ich habe folgendes meine build.gradle Datei der Bibliothek

repositories { 
    flatDir { 
      dirs 'libs' 
     } 
} 

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

Ich bin nicht sicher hinzufügen, was mir fehlt, aber wenn ich ./gradlew lint laufen läuft es Linter aber nicht mit meiner benutzerdefinierten Regeln .. Jede Hilfe, Tipps oder Ratschläge werden sehr geschätzt.

EDIT 1

Hier ist der Anschluss ausgegeben, wenn Gradle läuft.

: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

Verästelter Projekt: https://github.com/apertomove/linette

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

EDIT 3 Zusätzlich zu den oben aufgeführten Links ich diesen post von Jason geschrieben gefunden Atwood. Wir haben auch einen CI-Server, auf dem jenkins läuft, in dem wir unsere Checks durchführen und Entwickler über Fehler informieren können, die auf unseren Flottenregeln basieren. Das funktioniert super, allerdings ist es ein Schritt zu weit. Es wäre sehr viel wertvoller und zeitsparender, wenn Sie beim Ausführen unserer Projekte aus Android Studio Lint-Checks aus der Bibliothek ausführen, anstatt unseren Code zu übergeben, nur um herauszufinden, dass unser Projekt Regeln bricht.

+0

Bedeutet das Ausführen von 'Gradle-Abhängigkeiten' den aarWrapper als Kompilierzeitabhängigkeit? – RaGe

+0

@RaGe Ja, ich glaube schon, ich habe das Terminal nach dem Ausführen von './gradlew assemblyDebug' auf meinem Projekt hinzugefügt: Zeile 5': app: prepareAarWrapperDebugLibrary UP-TO-DATE' – hopeman

+0

können Sie die ursprüngliche Gradle-Datei in die benutzerdefinierte Lint-Projekt ..Sie könnten etwas getan haben wie vergessen, ein Android-Flusen vorgefertigten Glas zum Beispiel –

Antwort

1

Ich habe einen Beitrag geschrieben, wie benutzerdefinierte Lint-Regeln hinzugefügt und in Ihre Android-App integriert werden, Sie können einen Blick darauf werfen. Es hat auch Links zu Github-Repos, die zeigen, wie es in einem Android-Projekt gemacht wurde. Link to post

Der einfachste Weg für mich war ANDROID_LINT_JARS Pfad in der gradlew Datei zu setzen und es dem Brauch Flusen jar zeigen, die in bis VCS-System aktiviert ist, so dass man es sowohl lokal als auch vor dem Drücken der Code ausgeführt werden kann. Hoffe es hilft.

+0

Danke für deine Antwort, ich habe ANDROID_LINT_JARS ... wie oben beschrieben zu meiner Gradlew-Datei hinzugefügt, konnte aber immer noch nicht das gewünschte Ergebnis erzielen. Ich habe das mit einer .jar und .aar Bibliothek versucht ... – hopeman

+0

Könnten Sie mich auf Ihre Codebasis verweisen? –

+0

Leider ist das Projekt ein Unternehmensprojekt und daher kann ich den Code nicht teilen. Ich habe jedoch ein öffentliches Repository mit dem exakt gleichen "Gradle Setup" wie unser Unternehmensprojekt eingerichtet. Sie können es [hier] finden (https://github.com/hopeman15/StackOverFlow) Eine Regel zum Beispiel ist, dass textview-IDs mit "text_" vorangestellt werden sollte, dies wird jedoch nicht von der Bibliothek aufgenommen. – hopeman

0

@hopeman Kopieren Sie die JAR-Datei in den Ordner /.android/lint. Android wählt Ihre benutzerdefinierten Flusenregeln aus.

+0

Danke für Ihr Feedback, wie Sie oben in meiner Beschreibung sehen können, das ist nicht mein Problem. Dein Vorschlag funktioniert, aber ich suche nicht danach. Das Problem hier ist, dass jeder Entwickler das Repository klonen und ständig nach neuen Updates suchen muss ... Unser jenkins-Server ist großartig und kann die Bibliothek im App-Projekt automatisch aktualisieren, wenn wir Änderungen am linting-Projekt vornehmen, also bin ich immer noch Ich suche nach einer Lösung, die es mir ermöglicht, die Bibliothek zu meinem App-Projekt hinzuzufügen und die Regeln pro Projekt zu überprüfen. – hopeman

+0

@hopeman Fanden Sie die Fehlerbehebung für dieses Problem - "Benutzerdefinierte Linting-Regeln, die mit com.android.tools.build:gradle:2.3.0 fehlschlagen". Ich habe das gleiche Problem gesehen. Jede Hilfe wäre willkommen. – Madhu

+0

@Mandu Entschuldigung noch nichts, sobald wir es herausgefunden haben, wäre ich mehr als glücklich zu teilen. Happy coding ... – hopeman