이 프로젝트는 더 이상 유지 관리되지 않습니다.
MVP 아키텍처가있는 Android 샘플 앱
드리블 API에서 일부 이미지를 표시하는 샘플 프로젝트. 요즘 Android의 최신 라이브러리 및 툴링으로 할 수있는 멋진 것들을 보여줍니다.
누군가가 Reddit에서 말했듯이 : "과도하게 공학적이지 않고, 마천루 부분이없는 마천루 일뿐입니다.

최신 추가 :
- 업그레이드 된 Android Gradle 플러그인을 V3.0.1로
- 숟가락에 대한 지원이 추가되었습니다. 자세한 내용은 https://github.com/square/spoon을 참조하십시오. 또한 Gradle 플러그인을 추가했습니다. 'Gradlew Spoon'으로 테스트를 실행 한 다음 'Build/Spoon'디렉토리에서 생성 된 보고서를 열 수 있습니다.
- Firebase에서 에스프레소 테스트를 실행하는 동안 스크린 샷 잡기가 추가되었습니다
- TeamCity CI 서버의 단위 테스트에 대한 테스트 커버리지 추가
- 런타임 권한 예제를 추가했습니다. 권한 Dispatcher 라이브러리를 사용합니다. RuntimePermissActivity 클래스를 참조하십시오. (https://github.com/permissions-dispatcher/permissionsdispatcher)
- 의존성 구조 조정 비트, build.gradle 파일 및 종속성을 확인하십시오. Gradle 파일
- 단검 안드로이드 바인딩에 대한 지원 (Dagger v2.11)
- Auto-Factory Library Autto-Value의 작은 사촌 (https://github.com/google/auto/tree/master/mas
- 서버 응답을 기록하고 재생하는 Okreplay (https://github.com/airbnb/okreplay) 라이브러리를 사용하여 에스프레소 테스트를 추가했습니다. 자세한 내용은 com.example.features.dashboard.view.mainactivityokreplayespressotest를 참조하십시오.
- TeamCity를 통해 Firebase Cloud Testing (FireBase.google.com/docs/test-lab/)에 대한 지원이 추가되었습니다! 이제 모든 풀 요청/ 야간 빌드/ 릴리스 빌드는 서비스를 사용하여 에스프레소 테스트를 실행합니다. 자세한 내용은 Justanotherandroidapp_runespressotestsinfirebase.xml을 참조하십시오.
- 버스트 라이브러리 (https://github.com/square/burst)에 대한 지원을 추가하여 매개 변수화 된 단위 테스트에 대한 지원을 추가했습니다 (자세한 내용은 com.example.util.stringutilstest 참조).
- 추가 앱 바로 가기! https://github.com/matthiasrobbers/shortbread 라이브러리를 통해 사용되는 정적, 동적 및 역동적! 자세한 내용은 App Class, MainActivity @ShortCut Declaration 및 ShortCuts.xml 파일의 하단을 확인하십시오.
- 색상 주위에 2 개의 사용자 정의 보풀 점검이 추가되었습니다 (클래스 클래스 비 물질 콜러 스티커 및 DirectMaterialPalettecolorusagedEtector).
- 하드 코드 색상에 대한 사용자 정의 보풀 확인을 추가했습니다. (클래스 하드 코드 콜러 데트 체크 확인)
- Gradle 플러그인 APK 크기를 확인하고 APK 크기가 특정 값보다 더 큰 경우 빌드를 자동으로 실패하십시오 (구성에 대한 build.gradle 및 gradle.properties 파일을 확인하고 실제 Gradle 플러그인의 경우 https://github.com/vanniktech/gradle-android-apk-size-plugin).
- VCS에 커밋 된 TeamCity CI 스크립트에 대한 지원이 추가되었습니다! 그들은 Kotlin/XML로 작성되었습니다 (이 파일의 하단에서 .TeamCity 폴더를 확인하거나 자세한 내용을 읽으십시오).
- Sherlock이 프로젝트에 추가하여 개발자 (및 QA)가 앱을 통해 발생하는 예외 (및 공유)에 쉽게 액세스 할 수 있도록 (App Class 및 Build.gradle 파일 및 프로젝트의 경우)를 통해 쉽게 액세스 할 수 있습니다.
- Rxjava 2 (Traceurtool 클래스 및 기타 관련 클래스 또는 라이브러리의 https://github.com/t-spoon/traceur)를 사용하여보다 유용한 스택 트레이스를 표시 할 수있는 프로젝트에 Traceur가 추가되었습니다.
- 전화기에서 네트워크 통화를 볼 수 있도록 Chuck Library가 추가되었습니다. 추가 인터셉터의 경우 라이브러리 및 NetworkModule 클래스는 https://github.com/jgilfelt/chuck을 참조하십시오.
- 에스프레소 테스트 전에 애니메이션을 비활성화하고 나중에 다시 활성화하십시오! (Grant_animation_permission.gradle 및 EspressoTesthelper 클래스 참조)
- 추가 버터 나이프 액션 (Butterknifeactions 클래스 참조)
- Daggermock Library를 통한 단검 그래프의 조롱 지원 지원 (MainActivityTest 클래스 참조)
- 추가 제약 레이아웃! (활동 _main.xml 참조)
- 테스트 실행을 일시 중지하고 비동기 작업이 완료 될 때까지 CountingIdlingResource를 통해 에스프레소에 알리는 Rxjava 스케줄러를 추가했습니다 (com.example.util.rx.rx.rxidlingscheduler를 확인하십시오).
- 새로운 Mosby MVP V3를 사용하기위한 업그레이드 된 프로젝트 !! 자세한 내용은 https://github.com/sockeqwe/mosby를 확인하십시오.
- Rxjavaplugins 클래스에 대한 지원이 추가되어 테스트에서 rxjava 2 스케줄러를 쉽게 재정의 할 수 있습니다. MainPresEnterTestest 클래스의 설정 방법을 참조하십시오.
- 빠른 설정 타일의 변형을 추가했습니다. 기능 및 com.example.features.tiles.passiveTileserViceOnlyToggle 클래스에 대한 정보는 https://medium.com/google-developers/quick-settings-tiles-e3c22daf93a8을 참조하십시오.
내용물:
도서관 :
- rxjava
- 빌드 유형에 따라 보조 주입 및 다른 모듈의 예제가있는 단검 2. 또한 Android Dagger v2.11을 지원합니다
- 디버그 빌드의 개조 2 및 개조 모의 모드
- View State Support (V3!)가있는 Mosby MVP
- 재목
- 자동 가치 및 자동 공장
- 래퍼로 활공하십시오
- 버터 나이프
- 유창한 주장에 대한 주장
- 직물 (충돌 및 답변)
- 리트로 람다
- Stetho
- 척
- 쇼트 브레드 (https://github.com/matthiasrobbers/shortbread)
- 런타임 권한에 대한 fermissionsDispatcher (https://github.com/permissions-dispatcher/permissionsdispatcher)
정적 분석 :
- PMD (https://pmd.github.io/- 파일 static_analysis_java.gradle을 확인하십시오)
- CheckStyle (파일 확인 static_analysis_java.gradle)
- Lint (Pile Pile Lint.Gradle)
- FindBugs (파일 확인 static_analysis_java.gradle)
- 단위 테스트, 에스프레소 테스트 또는 두 가지 조합에 대한 보고서를 생성 할 수있는 Jacoco 코드 커버리지
- 맞춤형 IDE 검사 규칙 세트
- 맞춤형 보풀 규칙 및 테스트가있는 모듈
테스트 :
- 숟가락에 대한 지원이 추가되었습니다. 자세한 내용은 https://github.com/square/spoon을 참조하십시오. Spoon 용 Gradle 플러그인도 추가했습니다. 'Gradlew Spoon'으로 테스트를 실행 한 다음 'Build/Spoon'디렉토리에서 생성 된 보고서를 열 수 있습니다.
- TeamCity CI 서버에서 실행되는 테스트 범위
- 모의 웹 서버 유무에 따라 에스프레소 테스트
- JSON 파일에서 응답을로드하는 모의 웹 서버 테스트
- Robolectric 테스트
- 정상적인 단위 테스트
- OK 테스트에서 기본 URL 변경을위한 HTTP 인터셉터
- 유휴 자원
- 에스프레소 테스트의 잠금 해제 화면 (class com.example.util.espressotestrunner 확인)
- Rxjavaplugins 클래스에 대한 지원, 테스트에서 rxjava 2 스케줄러를 쉽게 우선시 할 수 있습니다 (MainPresenterTestest 클래스 점검)
- 에스프레소 테스트 및 비동기 코드 실행에 도움이되는 Rxjava 스케줄러를 지원합니다. (com.example.util.rx.rxidlingscheduler를 확인하십시오)
- Daggermock Library를 통한 단검 그래프의 조롱 지원 지원 (MainActivityTest 클래스 참조)
- 에스프레소 테스트 전에 애니메이션을 비활성화하고 나중에 다시 활성화하십시오! (Grant_animation_permission.gradle 및 EspressoTesthelper 클래스 참조)
- Sherlock이 프로젝트에 추가하여 개발자 (및 QA)가 앱을 통해 발생하는 예외 (및 공유)에 쉽게 액세스 할 수 있도록 (App Class 및 Build.gradle 파일 및 프로젝트의 경우)를 통해 쉽게 액세스 할 수 있습니다.
- 파라 메트형 단위 테스트에 대한 버스트 라이브러리 (https://github.com/square/burst) (자세한 내용은 com.example.util.stringutilstest 참조).
- TeamCity를 통해 Firebase Cloud Testing (FireBase.google.com/docs/test-lab/)에 대한 지원이 추가되었습니다! 이제 모든 풀 요청/ 야간 빌드/ 릴리스 빌드는 서비스를 사용하여 에스프레소 테스트를 실행합니다. 자세한 내용은 Justanotherandroidapp_runespressotestsinfirebase.xml을 참조하십시오.
- 서버 응답을 기록하고 재생하는 Okreplay (https://github.com/airbnb/okreplay) 라이브러리를 사용하여 에스프레소 테스트를 추가했습니다. 자세한 내용은 com.example.features.dashboard.view.mainactivityokreplayespressotest를 참조하십시오.
관련보기 :
- 추가 제약 레이아웃! (활동 _main.xml 참조)
- 추가 버터 나이프 액션 (Butterknifeactions 클래스 참조)
다른:
- Gradle 플러그인 APK 크기를 확인하고 APK 크기가 특정 값보다 더 큰 경우 빌드를 자동으로 실패하십시오 (구성에 대한 build.gradle 및 gradle.properties 파일을 확인하고 실제 Gradle 플러그인의 경우 https://github.com/vanniktech/gradle-android-apk-size-plugin).
- 빌드 유형에 따라 별도의 앱 아이콘
- 일부 고급 소스는 테스트를 분할하기위한 구성을 설정합니다
- Android Manifest 및 Build.gradle의 속성 파일에서 일부 프로젝트 구성을로드
- 일부 빌드 유형 또는 테스트에 대한 공유 폴더
- 작업 대상 구성
- 안드로이드 스튜디오 외부 주석 (https://www.jetbrains.com/help/idea/2016.3/external-annotations.html)
- @nullable 및 @nonnull에 대한 패키지 레벨 주석
- 인증 토큰을 헤더에 쉽게 추가하기위한 OKHTTP 인터셉터
- 엄격한 모드
- 플러그인 Playstore에 앱을 게시합니다
- APK의 메소드 수를 계산하기위한 Dex Count 플러그인
- Crashlytics를위한 목재 로깅 트리. com.example.tools.timber.crashlyticstree를 참조하십시오
- 빠른 설정 타일 (com.example.features.tiles.PassiveTileserViceonlyToggle 참조)
- Rxjava 2 (Traceurtool 클래스 및 기타 관련 클래스 또는 라이브러리의 https://github.com/t-spoon/traceur)를 사용하여보다 유용한 스택 트레이스를 표시 할 수있는 프로젝트에 Traceur가 추가되었습니다.
- 앱 바로 가기! https://github.com/matthiasrobbers/shortbread 라이브러리를 통해 사용되는 정적, 동적 및 역동적! 자세한 내용은 앱 클래스의 하단, MainActivity @ShortCut Declaration 및 ShortCuts.xml 파일을 확인하십시오.
.. 그리고 모든 종류의 다른 음식!
TeamCity- 지속적인 통합
이 프로젝트는 Kotlin에 CI 서버 구성을 버전 제어 시스템에 저장하는 TeamCity의 기능으로부터 이점을 얻습니다. 자세한 내용은 https://confluence.jetbrains.com/display/tcd10/kotlin+dsl을 참조하십시오. 설정은 프로젝트의 .teamcity 폴더 아래에서 찾을 수 있습니다.
구성 빌드 :
3 개의 빌드 구성이 있습니다.
- 모든 풀 요청에서 트리거 된 '풀 요청' 빌드 구성. 풀 요청의 정확성을 확인합니다 (일반적으로 '개발'브랜치의 경우). QA는 풀 요청이 도입 한 기능/수정을 수동으로 테스트하기 위해이 빌드 구성에 의해 생성 된 HockeyApp의 관련 APK를 가져옵니다. 이 빌드 :
- 모든 정적 분석 도구를 실행합니다.
- 모든 빌드 유형에 대해 모든 단위 테스트를 실행합니다.
- 모든 빌드 유형에 대한 메소드 수를 수행하십시오.
- 복제 점검.
- APK를 구축합니다.
- Firebase Test Cloud에서 모든 에스프레소 테스트를 실행합니다.
- APK를 HockeyApp에 업로드합니다.
- 작업 상태 (성공/실패)로 GitHub를 업데이트합니다.
- 'Nightly Builds '빌드 구성은 매일 밤 자녀가 '개발'지점에서 트리거됩니다. QA는 앱의 기능의 통합을 테스트하기 위해이 빌드 구성으로 생성 된 HockeyApp의 관련 APK를 가져옵니다. 이 빌드는 또한 사람들이 테스트 할 수 있도록 폐쇄 된 알파 플레이 스토어 그룹에 배치됩니다. 이 빌드 :
- 모든 빌드 유형에 대해 모든 단위 테스트를 실행합니다.
- 모든 빌드 유형에 대한 메소드 수를 수행합니다.
- 복제 점검.
- APK를 구축합니다.
- Firebase Test Cloud에서 모든 에스프레소 테스트를 실행합니다.
- APK를 HockeyApp에 업로드합니다.
- PlayStore의 APK 릴리스 APK를 개인 알파 채널로 업로드합니다.
- '릴리스/*'논리 지점 이름과 일치하는 모든 분기에서 트리거 된 '릴리스' 빌드 구성. QA는 HockeyApp의 관련 APK를 가져와 릴리스 전에 최종 테스트를 수행합니다. 이 빌드는 또한 사람들이 테스트 할 수 있도록 Open Beta Playstore 그룹에 배치됩니다. 이 빌드 :
- 모든 정적 분석 도구를 실행합니다.
- 모든 빌드 유형에 대해 모든 단위 테스트를 실행합니다.
- 모든 빌드 유형에 대한 메소드 수를 수행합니다.
- 복제 점검.
- APK를 구축합니다.
- Firebase Test Cloud에서 모든 에스프레소 테스트를 실행합니다.
- APK를 HockeyApp에 업로드합니다.
- PlayStore의 APK 릴리스 APK를 공개 베타 채널로 업로드합니다.
보고서 :
모든 종류의 보고서도 있습니다.
- CheckStyle 정적 분석 보고서는 프로젝트의 모든 CheckStyle 경고를 보여줍니다. 프로젝트에 무관 용 정책이 없으므로 일반적으로 비어있는 것으로보고합니다. 실패한 빌드에서는 고정해야 할 문제를 정확하게 파악합니다.

- 모든 빌드 유형에 대한 단위 테스트 보고서는 추가 세부 사항과 함께 실행 된 모든 테스트 및 오류가 발생하면 스택 트레이스를 보여줍니다. 2 개의 대시 보드, 하나는 TeamCity 생성 테스트 보고서이고 다른 하나는 원래 Junit4 HTML 보고서입니다.


- 모든 빌드 유형에 대한 DEX 메소드 카운터 보고서는 모든 APK의 메소드 수를 보여주고 흥미로운 드릴 다운 시각화와 함께 너무 많은 방법을 포함하는 라이브러리를 쉽게 찾을 수 있습니다. 참고로, 일반적으로 릴리스 및 QA APK는이 보고서에서 이러한 빌드 유형에서 실행되면서 사용되지 않은 방법을 제거함에 따라이 보고서에서 더 작은 방법 수를 가지고 있습니다.

- FindBugs 정적 분석 보고서는 프로젝트의 모든 FindBugs 경고를 보여줍니다. 프로젝트에 무관 용 정책이 없으므로 일반적으로 비어있는 것으로보고합니다. 실패한 빌드에서는 고정해야 할 문제를 정확하게 파악합니다.

- Lint 정적 분석 보고서는 프로젝트의 모든 보풀 경고를 보여줍니다. 프로젝트에 무관 용 정책이 없으므로 일반적으로 비어있는 것으로보고합니다. 실패한 빌드에서는 고정해야 할 문제를 정확하게 파악합니다.

- PMD 정적 분석 보고서는 프로젝트의 모든 PMD 경고를 보여줍니다. 프로젝트에 무관 용 정책이 없으므로 일반적으로 비어있는 것으로보고합니다. 실패한 빌드에서는 고정해야 할 문제를 정확하게 파악합니다.

- Firebase Cloud 테스트에 대한 보고서는 없습니다. 빌드 로그로 이동하여 결과가 저장되는 Google 클라우드 스토리지 버킷을 가리키는 URL을 찾아야합니다. 몇 가지 변경 사항으로 개인 (유료) 스토리지 버킷을 사용한 다음 테스트 결과를 TeamCity로 다시 가져올 수 있습니다. 이 기사는 다음 주제에 대해 간단히 설명합니다.

TeamCity 플러그인 :
두 개의 TeamCity 플러그인이 내 인생을 더 쉽게하기 위해 사용되었습니다.
- 'Advanced Shared Build Number': https://java.nicholaswilliams.net/teamcityplugins/ download 빌드에서 빌드 카운터를 공유 할 수있는 플러그인을 참조하십시오. 그 카운터는 APK의 버전 코드의 일부이므로 동기화를 유지하는 것이 좋습니다.
- '슬랙 알림 플러그인': https://github.com/petegoo/tcslackbuildnotifier를 참조하십시오. 빌드 상태를 슬랙에 게시 할 수있는 플러그인을 참조하십시오.
- 'Chuck Norris TeamCity 플러그인': https://github.com/dbf256/teamcity-chuck-plugin 참조 이것에 대해 말할 것도 많지 않습니다 ;-)
참고 :
- 공개 베타 채널 (https://play.google.com/apps/testing/com.justanotherandroidapp)은 회사 전체에 배포 될 수 있습니다. 내가 시도한 한 가지는 NFC 태그에 링크를 추가하고 벽에 매달아 모든 사람이 베타 앱을 빠르게 가져올 수 있도록하는 것이 었습니다!
HockeyApp
HockeyApp을 사용하여 APK를 QA 또는 이해 관계자에게 저장하고 배포하고 있습니다. 제품에 대한 자세한 내용은 https://hockeyapp.net을 참조하십시오. 이것은 HockeyApp 대시 보드에서 보이는 것입니다.

보시다시피 다른 CI 빌드 구성 및 모든 빌드 유형에 대한 다른 빌드가 있습니다. HockeyApp Guys는 도구의 사용법을 보여주는 무료 계정을 제공하기에 충분히 친절했습니다.
Slack에서 Playstore 리뷰
이것 (https://reviewbot.io/? 리뷰가 오면 다음과 같이 보입니다.

로드맵
- 최신 버전의 Gradle로 업그레이드하십시오
- 지문 인증
- 지휘자 라이브러리
PR을 제출합니다
PR을 만들기 전에 명령 gradlew check 성공적으로 완료되도록하십시오. 이 명령은 모든 변형에 대한 모든 테스트와 4 개의 정적 분석 도구 인 Lint, Checsktyle, PMD, FindBugs를 실행합니다.
내가 추가하지 않을 것들의 목록, 당신이 이것들을 좋아한다면 자유롭게 기여하십시오!
- Firebase Cloud Testing에서 테스트 범위를 실행하고 보고서를 가져오고 (단위 테스트 범위 보고서와 합병 할 수 있음) CI 서버에보고를 제공합니다. 이것은 S3 양동이에 대한 비용을 지불해야 할 것이며, 정직하게 추적하는 것이 유용하다는 것이 확실하지 않습니다.
- 태그 릴리스, 다시 개발 등을 통합하는 것과 같은 더 많은 릴리스를 자동화합니다.이 주변의 요구 사항은 매우 프로젝트에 따라 다르며, 충돌 등이있을 수 있으며 현재 자동화 할 가치가 없습니다.
- "Fastlane -Screengrab"도구 (https://github.com/fastlane/fastlane/tree/mas
모든 피드백/풀 요청을 환영합니다!
www.sakiskaliakoudas.com에서 나를 잡을 수 있습니다