├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── menu
│ │ │ │ └── menu_main.xml
│ │ │ └── layout
│ │ │ │ ├── content_main.xml
│ │ │ │ └── activity_main.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── gdky005
│ │ │ └── androidbadge
│ │ │ ├── L.java
│ │ │ └── MainActivity.java
│ ├── test
│ │ └── java
│ │ │ └── gdky005
│ │ │ └── androidbadge
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── gdky005
│ │ └── androidbadge
│ │ ├── MyTest.java
│ │ ├── ExampleInstrumentedTest.java
│ │ └── MainActivityTest.java
├── proguard-rules.pro
└── build.gradle
├── badge
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ └── values
│ │ │ │ └── strings.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── gdky005
│ │ │ └── badge
│ │ │ ├── Utils.java
│ │ │ └── L.java
│ ├── test
│ │ └── java
│ │ │ └── gdky005
│ │ │ └── badge
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── gdky005
│ │ └── badge
│ │ ├── MyTest.java
│ │ ├── ExampleInstrumentedTest.java
│ │ └── MainActivityTest.java
├── build.gradle
└── proguard-rules.pro
├── settings.gradle
├── pic
├── gbg-kaiyuan-md-0.png
├── gbg-kaiyuan-md-1.png
├── gbg-kaiyuan-md-10.png
├── gbg-kaiyuan-md-100.png
├── gbg-kaiyuan-md-101.png
├── gbg-kaiyuan-md-102.png
├── gbg-kaiyuan-md-103.png
├── gbg-kaiyuan-md-104.png
├── gbg-kaiyuan-md-105.png
├── gbg-kaiyuan-md-106.png
├── gbg-kaiyuan-md-107.png
├── gbg-kaiyuan-md-108.png
├── gbg-kaiyuan-md-109.png
├── gbg-kaiyuan-md-11.png
├── gbg-kaiyuan-md-110.png
├── gbg-kaiyuan-md-111.png
├── gbg-kaiyuan-md-112.png
├── gbg-kaiyuan-md-113.png
├── gbg-kaiyuan-md-114.png
├── gbg-kaiyuan-md-115.png
├── gbg-kaiyuan-md-116.png
├── gbg-kaiyuan-md-12.png
├── gbg-kaiyuan-md-13.png
├── gbg-kaiyuan-md-14.png
├── gbg-kaiyuan-md-15.png
├── gbg-kaiyuan-md-16.png
├── gbg-kaiyuan-md-17.png
├── gbg-kaiyuan-md-18.png
├── gbg-kaiyuan-md-19.png
├── gbg-kaiyuan-md-2.png
├── gbg-kaiyuan-md-20.png
├── gbg-kaiyuan-md-21.png
├── gbg-kaiyuan-md-22.png
├── gbg-kaiyuan-md-23.png
├── gbg-kaiyuan-md-24.png
├── gbg-kaiyuan-md-25.png
├── gbg-kaiyuan-md-26.png
├── gbg-kaiyuan-md-27.png
├── gbg-kaiyuan-md-28.png
├── gbg-kaiyuan-md-29.png
├── gbg-kaiyuan-md-3.png
├── gbg-kaiyuan-md-30.png
├── gbg-kaiyuan-md-31.png
├── gbg-kaiyuan-md-32.png
├── gbg-kaiyuan-md-33.png
├── gbg-kaiyuan-md-34.png
├── gbg-kaiyuan-md-35.png
├── gbg-kaiyuan-md-36.png
├── gbg-kaiyuan-md-37.png
├── gbg-kaiyuan-md-38.png
├── gbg-kaiyuan-md-39.png
├── gbg-kaiyuan-md-4.png
├── gbg-kaiyuan-md-40.png
├── gbg-kaiyuan-md-41.png
├── gbg-kaiyuan-md-42.png
├── gbg-kaiyuan-md-43.png
├── gbg-kaiyuan-md-44.png
├── gbg-kaiyuan-md-45.png
├── gbg-kaiyuan-md-46.png
├── gbg-kaiyuan-md-47.png
├── gbg-kaiyuan-md-48.png
├── gbg-kaiyuan-md-49.png
├── gbg-kaiyuan-md-5.png
├── gbg-kaiyuan-md-50.png
├── gbg-kaiyuan-md-51.png
├── gbg-kaiyuan-md-52.png
├── gbg-kaiyuan-md-53.png
├── gbg-kaiyuan-md-54.png
├── gbg-kaiyuan-md-55.png
├── gbg-kaiyuan-md-56.png
├── gbg-kaiyuan-md-57.png
├── gbg-kaiyuan-md-58.png
├── gbg-kaiyuan-md-59.png
├── gbg-kaiyuan-md-6.png
├── gbg-kaiyuan-md-60.png
├── gbg-kaiyuan-md-61.png
├── gbg-kaiyuan-md-62.png
├── gbg-kaiyuan-md-63.png
├── gbg-kaiyuan-md-64.png
├── gbg-kaiyuan-md-65.png
├── gbg-kaiyuan-md-66.png
├── gbg-kaiyuan-md-67.png
├── gbg-kaiyuan-md-68.png
├── gbg-kaiyuan-md-69.png
├── gbg-kaiyuan-md-7.png
├── gbg-kaiyuan-md-70.png
├── gbg-kaiyuan-md-71.png
├── gbg-kaiyuan-md-72.png
├── gbg-kaiyuan-md-73.png
├── gbg-kaiyuan-md-74.png
├── gbg-kaiyuan-md-75.png
├── gbg-kaiyuan-md-76.png
├── gbg-kaiyuan-md-77.png
├── gbg-kaiyuan-md-78.png
├── gbg-kaiyuan-md-79.png
├── gbg-kaiyuan-md-8.png
├── gbg-kaiyuan-md-80.png
├── gbg-kaiyuan-md-81.png
├── gbg-kaiyuan-md-82.png
├── gbg-kaiyuan-md-83.png
├── gbg-kaiyuan-md-84.png
├── gbg-kaiyuan-md-85.png
├── gbg-kaiyuan-md-86.png
├── gbg-kaiyuan-md-87.png
├── gbg-kaiyuan-md-88.png
├── gbg-kaiyuan-md-89.png
├── gbg-kaiyuan-md-9.png
├── gbg-kaiyuan-md-90.png
├── gbg-kaiyuan-md-91.png
├── gbg-kaiyuan-md-92.png
├── gbg-kaiyuan-md-93.png
├── gbg-kaiyuan-md-94.png
├── gbg-kaiyuan-md-95.png
├── gbg-kaiyuan-md-96.png
├── gbg-kaiyuan-md-97.png
├── gbg-kaiyuan-md-98.png
├── gbg-kaiyuan-md-99.png
├── css
│ └── style.css
└── index.html
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── gradle.properties
├── circle.yml
├── LICENSE
├── .travis.yml
├── gradlew.bat
├── gradlew
└── README.md
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/badge/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':badge'
2 |
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-0.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-1.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-10.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-100.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-101.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-101.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-102.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-102.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-103.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-103.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-104.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-104.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-105.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-105.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-106.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-106.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-107.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-107.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-108.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-108.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-109.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-109.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-11.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-110.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-110.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-111.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-111.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-112.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-112.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-113.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-113.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-114.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-115.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-115.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-116.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-116.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-12.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-13.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-14.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-15.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-16.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-17.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-18.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-19.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-2.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-20.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-21.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-22.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-23.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-24.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-25.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-26.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-27.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-28.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-28.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-29.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-3.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-30.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-31.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-32.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-33.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-34.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-34.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-35.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-35.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-36.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-37.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-37.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-38.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-39.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-39.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-4.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-40.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-41.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-41.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-42.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-43.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-43.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-44.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-44.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-45.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-45.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-46.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-46.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-47.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-47.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-48.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-49.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-49.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-5.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-50.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-51.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-51.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-52.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-52.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-53.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-53.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-54.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-54.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-55.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-55.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-56.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-56.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-57.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-58.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-59.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-59.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-6.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-60.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-61.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-61.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-62.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-62.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-63.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-63.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-64.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-65.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-65.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-66.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-66.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-67.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-67.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-68.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-68.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-69.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-69.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-7.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-70.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-71.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-71.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-72.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-73.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-73.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-74.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-74.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-75.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-75.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-76.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-77.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-77.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-78.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-78.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-79.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-79.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-8.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-80.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-81.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-81.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-82.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-82.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-83.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-83.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-84.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-84.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-85.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-85.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-86.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-86.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-87.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-88.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-88.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-89.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-89.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-9.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-90.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-90.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-91.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-91.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-92.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-92.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-93.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-93.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-94.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-94.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-95.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-95.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-96.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-97.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-97.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-98.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-98.png
--------------------------------------------------------------------------------
/pic/gbg-kaiyuan-md-99.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdky005/AndroidBadge/HEAD/pic/gbg-kaiyuan-md-99.png
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
在平时的开发过程中,我们经常会查阅很多的资料,最长使用的是 github 的开源项目。通常在项目的主页面能看到当前的项目的简介,并且时不时能在解决的最上面看到好多的彩色标签,看起来很酷,很专业,有逼格。一下子就能提升很多的好感度。
14 | 15 |18 | 19 |
我们以最流行的 android 开源项目 MPAndroidChart 为例来看看。
20 | 21 | 22 | 23 |下面我们将 这些标签称之为 徽章 (shields)。
31 | 32 |我们尝试在 github 里面搜索 以 android 关键字 开发语言为 java 的开源项目。
35 | 36 |
统计情况如下:
39 | 40 |

















我们是筛选容器就是 30个,统计日期:2017年04月27日(随着时间推移,可能略微有变动)。使用标签的有 18个,未使用的有12个。 使用概率大约是:60%。如果筛选容器的范围再大一点可能更多,没有使用徽章的12个项目,可能由于历史原因,或者个人原因未使用,但是不管怎么说,使用徽章的人会越来越多。
74 | 75 |徽章 shields
78 | 79 |徽章的使用不仅仅是为了装 B,而是为了让开源想更高效。进入项目主页一眼能看出需要的东西,例如该项目能否编译通过,当前最新的版本是什么等。
80 | 81 |徽章能突出视野,github 默认给我们展示的是黑白世界,但是通过 徽章,将会得到改变。重要的信息可以一目了然。
82 | 83 |一份不太靠谱的标准,不过你应该掌握:
86 | 87 |
(PS: 上图中的图标顺序对应下面的顺序)
90 | 91 |这里我用一个简单的 android 项目来做一个说明,其他语言也是可以的,这里仅仅展示一个实例。
104 | 105 |我的本机的android环境说明如下:
106 | 107 |用其他版本或者环境也是可以的, 这里只是说明。 如果任何遇到问题,可以在我的博客里面留言,联系详情为:http://www.gdky005.com/about/ 因为该文的完整版真的很长,涉及到很多的技术,所以专门设立了 QQ群:621094999, 有疑问或非常感兴趣的同学,可以来次探讨,也许一些新功能就是你们发觉的呢。 (PS:本应该在文末尾添加联系方式的,但是无奈,很多网站都有爬虫系统,好不容易写的文章就被爬走了,导致很多小伙伴遇到问题后,各种留言,但是我就是看不到,所以这次采取特殊方式,见谅哈)
121 | 122 |

进入 jitpack android 可以看到 jitpack 为我们提供的文档帮助。 

, 对应官网中说的 『group='com.github.YourUsername’』, 其实可以不写,写不写都会自动生成。 即使你写成了别的,最终还是以这样的格式输出。AndroidBadge 中 的 build.gradle :
144 | 145 |classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' // Add this line
146 |
147 |
148 | AndroidBadge 里面的 badge (library) :
149 | 150 |apply plugin: 'com.github.dcendents.android-maven'
151 |
152 |
153 | 
。 那个协议,你们随意,这里只是演示。
,拷贝当前项目地址。
, 点击后会让选择,直接 选择 ok 就行。将项目添加到 git 管理
。 项目中的文件都变成绿色后:
,耐心等待完成后, 本地项目已经被 git 管理起来了,然后把代码提交到 github 即可。可能会有冲突,自行解决即可。
, 并提交到 github。

创建第一个 release 分支:
发布成功以后就能看到: 
一般用 release 就可以了, 在适当的时候 用 tag。
172 | 173 |
, 等里面的那个圈圈 转完 以后,出现 绿色的这个:
说明已经发布 aar 成功,那么我们 可以直接使用了。 如果点开这个东西,会看到编译的和发布的过程。
点击 get 后,能看到: 


AndroidBadge 中 的 build.gradle :
192 | 193 |maven { url 'https://jitpack.io' }
194 |
195 |
196 | AndroidBadge 里面的 app 的 build.gradle :
197 | 198 |compile 'com.github.gdky005:AndroidBadge:v1.0.0'
199 |
200 |
201 | 好的,现在我们已经添加成功了,在 MainActivity 里面是是吧,看能否调到之前在 library 里面的写的 Utils.getVersion()。很高兴的是我们调出来了:
在项目的最底下也能看到:
。 运行 app 项目:
让咱们一起试试吧:
208 | 209 |
。
,
, 
多了一个 v1.0.1, 点击 get 吧。


。至此, jitpack 基本也差不多了,但是貌似缺少了最重要的一点吧。
218 | 219 |还是在刚刚的 jitpack 界面,只是我们把 页面拉倒底部。
点击后:
是不是看到了熟悉的 md 文档的格式呢? 看不懂也没关系,下面会专门讲解。

,点击该文件。


棒棒的,添加成功。ps: 这个是公开的,如果需要使用私有的,请使用 .com 域名。
237 | 238 |需要提醒的是:每次提交代码后都会重新下载需要的资源文件哦,所以时间很长,耐心等待吧。
239 | 240 |travis-ci 就是 自动化 CI 工具,类似于大公司经常使用的 Jenkins,但是 travis-ci 是在云端的,而是支持 github, 还免费,我们可以 用 travis-ci 做很多的事情,不仅仅是 编译看 项目有没有问题。例如在项目构建结束以后,我们可以打包,并发布 apk 到都 蒲公英, fir,也可以用邮件通知给相关的开发人员和业务任务。 做一些简单处理,轻轻松松。这部分内容到后面尽快整理,在写一篇。
243 | 244 |
。
, 如果没有项目或者没有你新建的项目,请点击右上方的 Sync account 按钮。
,开启 Travis 构建。点击这个可以配置该项目:



.travis.yml 文件 源代码
261 | 262 |language: android
263 | jdk: oraclejdk8
264 | sudo: false
265 |
266 | android:
267 | components:
268 | - tools
269 | - build-tools-25.0.2
270 | - android-25
271 | - extra-android-m2repository
272 | - extra-android-support
273 | licenses:
274 | - android-sdk-license-.+
275 | - '.+'
276 |
277 | before_install:
278 | - chmod +x gradlew
279 | - mkdir "$ANDROID_HOME/licenses" || true
280 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
281 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
282 |
283 | script:
284 | - ./gradlew assembleRelease
285 |
286 |
287 |
288 | 因为该文很长很长,所以暂时就不解释具体含义了,可以看看官方文档。
289 | 290 |
, 黑框上的白色点点点击后会变成绿色,会自动滚动到最下面。
喝一杯咖啡,慢慢等待吧,最难熬的时候已经过去,此刻是享受的时候了。
回到首页刷新后,能看到:
说明我们已经构建成功了。
初次使用 Travis 的试试,总遇到 说 android 的一些协议未接受而构建失败,导致耗费了一两天,曾经一度想放弃,但是最终坚持了下来,通过各种搜索,摸索,猜测,终于搞定。其实最初的项目是这个:https://github.com/gdky005/TestJitpack ,里面有很多辛酸史记录,从提交记录能看得出来,有兴趣的可以研究研究,也许能解决你现在的问题。
304 | 305 |Travis CI 协议问题解决方法:http://stackoverflow.com/questions/37615379/travis-ci-build-doesnt-work-with-android-constraint-layout
306 | 307 |最重要部分在这里:
308 | 309 |machine:
310 | environment:
311 | ANDROID_HOME: /usr/local/android-sdk-linux
312 |
313 | dependencies:
314 | pre:
315 | - mkdir -p "$ANDROID_HOME/licenses"
316 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
317 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
318 |
319 |
320 | 激动的时刻再次到来,让我们找找徽章在哪里呢?
323 | 324 |
让我们来选择 markdonw 格式:
并复制上。
同样如上修改 readme.md。 
加空格后,直接贴上去:
,这里需要说明的是,如果换成,图标也会换行哦。这样写就能保证所有的图标在一行了。
回到项目首页以后就能发现:
添加 Travis 徽章成功。
335 | 336 |Bye the way! 上面是最初级的构建过程,如果遇到单元测试就不行了,还得参考 我的开源项目 TestJitpack。 不过有点乱,后面整理下。
337 | 338 |Circle CI 相对来说比 Travis CI 好一些,至少界面上来说哈。还提供 ssh 的连接,构建过程相对来说 比较透明直观。例如:
Travis CI 的文档资料相对 Circle CI 来说 比较多, Circle CI 资料少之又少。
347 | 348 |Travis CI 的使用率还是很高的, 不过 Circle CI 相对来说比较 年轻化,符合主流的科技感,更智能。
349 | 350 |说到是否需要一起使用,其实都行,不过我在观察 github 主流项目的时候 有不少项目都是同时使用的,多一个技能总没有坏处吧。其实会了 Travis CI,在加 Circle CI 真是简单不少呢,只是基本语法不太一样。
351 | 352 |
, 在 project 里面自己的账号下搜索刚创建的项目。
,点击绿色 Build project.
, 但是这次肯定会失败,因为我们还没有添加 Circle 需要的文件呢。
circle.yml 源代码:
368 | 369 |machine:
370 | java:
371 | version: oraclejdk8
372 | environment:
373 | ANDROID_HOME: /usr/local/android-sdk-linux
374 |
375 | dependencies:
376 | pre:
377 | - mkdir -p "$ANDROID_HOME/licenses"
378 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
379 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
380 |
381 |
382 | override:
383 | - echo y | android update sdk --no-ui --filter "android-25"
384 | - echo y | android update sdk --no-ui --filter "build-tools-25.0.2"
385 | - echo y | android update sdk --no-ui --filter "extra-android-m2repository"
386 | - echo y | android update sdk --no-ui --filter "extra-android-support"
387 | - echo y | android update sdk --no-ui --filter "extra-google-m2repositor"
388 | - ./gradlew dependencies || true
389 |
390 | test:
391 | override:
392 | - ./gradlew build
393 |
394 |
395 |
点击进来后,会看到:
, 说明已经开始 构建了, 下载需要的东西:
。
, 相对 Travis 来说展示更直观。
说明构建成功。我们再来把 Circle CI 的徽章找到,并添加到我们的 github 上去吧。

我们把 徽章的 markdown 链接拷贝下来放入到我们的 主项目页面的里面。
回项目主页刷新后:
非常 happy, 已经添加成功了。
Github上许多开源项目都使用了Codecov来展示单元测试结果, 就它了。
415 | 416 |根据文中的指示:我们能看到一个开源的 github 项目 https://github.com/codecov/example-android, 不过看起来点晕晕的,但是还是看下了。
419 | 420 |我们之后都直接使用 Trivas CI 构建了。
421 | 422 |添加项目就不说了,进入后,点击 project changes, 找到自己的项目:
,等生产报告后,进入该网站就能看见结果。
Codecov不支持自己生成Android的测试覆盖率报告,它能做的是接收Jacoco生成的报告并进行可视化
427 | 428 |1) 在 app 的 build.gradle 文件中 添加依赖
429 | 430 | //Jacoco 生成报告的依赖
431 | androidTestCompile('com.android.support.test:runner:0.5', {
432 | exclude group: 'com.android.support', module: 'support-annotations'
433 | })
434 | // Set this dependency to use JUnit 4 rules
435 | androidTestCompile('com.android.support.test:rules:0.5', {
436 | exclude group: 'com.android.support', module: 'support-annotations'
437 | })
438 | // Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource
439 | androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2', {
440 | exclude group: 'com.android.support', module: 'support-annotations'
441 | exclude group: 'com.android.support', module: 'support-v4'
442 | exclude group: 'com.android.support', module: 'appcompat-v7'
443 | exclude group: 'com.android.support', module: 'design'
444 | exclude group: 'com.android.support', module: 'recyclerview-v7'
445 | })
446 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
447 | exclude group: 'com.android.support', module: 'support-annotations'
448 | })
449 |
450 |
451 | 2) 在 需要构建测试覆盖率报告的Module (AndroidBadge 项目中的 app) 的gradle文件中设置。 
debug{
454 | testCoverageEnabled true
455 | }
456 |
457 |
458 | 3) 可以在尝试在本地生成报告:
459 | 460 |./gradlew :app:createDebugAndroidTestCoverageReport 生成测试报告。 app 就是咱们项目中要测试的 module
461 |
462 |
463 | 测试报告地址:app/build/reports/coverage/debug/index.html。
464 | 465 |after_success:
473 | - bash <(curl -s https://codecov.io/bash)
474 |
475 |
476 |
477 | 
因为之前修改过很多次,过程很繁琐,直接给配置文件了,相信大家一眼就能看出来。
482 | 483 |完整的配置文件是:
484 | 485 |language: android
486 | jdk: oraclejdk8
487 | sudo: false
488 |
489 | env:
490 | global:
491 | - ANDROID_API_LEVEL=25
492 | - ANDROID_BUILD_TOOLS_VERSION=25.0.2
493 | - ANDROID_ABI=armeabi-v7a
494 | - ANDROID_TAG=google_apis
495 | - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default)
496 |
497 | android:
498 | components:
499 | - platform-tools
500 | - tools # to install Android SDK tools 25.1.x
501 | - build-tools-$ANDROID_BUILD_TOOLS_VERSION
502 | - android-$ANDROID_API_LEVEL
503 | - sys-img-armeabi-v7a-google_apis-$ANDROID_API_LEVEL
504 |
505 | licenses:
506 | - android-sdk-license-.+
507 | - '.+'
508 |
509 | before_install:
510 | - chmod +x gradlew
511 | - mkdir "$ANDROID_HOME/licenses" || true
512 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
513 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
514 |
515 | before_script:
516 | # Create and start emulator
517 | - echo no | android create avd --force -n test -t "android-"$ANDROID_API_LEVEL --abi $ANDROID_ABI --tag $ANDROID_TAG
518 | - emulator -avd test -no-skin -no-window &
519 | - android-wait-for-emulator
520 | - adb shell input keyevent 82 &
521 |
522 | script:
523 | - ./gradlew assembleRelease
524 | - ./gradlew :app:createDebugAndroidTestCoverageReport --info --stacktrace
525 |
526 | after_success:
527 | - bash <(curl -s https://codecov.io/bash)
528 |
529 |
530 | Travis-CI 对 android 的单元测试支持不是很好,因为需要开启虚拟机,开启这个过程就得10分钟(我的测试时间),很耗费时间。有时候也连接不上,一次跑下来估计得个 20分钟左右吧。所以,稳定性确实不是很高。如果不做单元测试,而只是做发布之类的,稳定性还是高的。
533 | 534 |单元测试应都会吧, 这里检测的标准就是说 每个类和方法都必须检测到,否则就算没有覆盖。我这里也就简单在项目中写过例子,剩下的你们自己玩吧。 
所以 要不要使用单元测试 还是根据项目决定吧。
537 | 538 |
让 codecov 慢慢构建吧,我们先继续。
545 | 546 |官网:https://android-arsenal.com/api
547 | 548 |Api_Level 是 arsenal 网站给各位开发者的一个福利,我们的 android 开源项目一般都有一个最低的构建版本。平时我们都是在 md 文件中写上 支持版本是 14+等很多样式,但是 不够醒目,有了 Api_Level 后,打开开源项目主页就知道,最低版本是多少。 不用看文档也能明白,轻松不少。 对应的 api 的一些特性和修改也能在这里展现。
551 | 552 |如果你的开源项目最低支持版本是:14,那么就选择这里:

把这个拷贝下来,放入我们的 md 文档中吧。 
codacy 编程代码自动审查服务平台,可以帮我们分析存在的问题 或者说是 bug,主要包括代码质量、语法规范、功能可用性方面的检查。
565 | 566 |进入官网,添加自己的需要的 project。
完成后,等待一段时间就好了,会给你发邮件通知,已经完成。
571 | 572 |完成后的效果是:
,咱们的这个项目评级是 B。

拷贝下来,手动放到 咱们的项目的 md 文档中把。比较放心一些,如果点击后面的 add badge ,会自动加到项目中,需要我们 pull request 里面处理下。
579 | 580 |搞定。
581 | 582 |彰显个人魅力,体现某种功能。例如咱们做一个跳转到我的博客的 个人徽章。
589 | 590 |滚动网页到最下面:
在对应的地方填写相应的东西(也支持中文哦), 完成后点击后面的 Make Badge 按钮试试看。
595 | 596 |我想我的个人图标是这种浅蓝色:
,那么我就在 color 中直接写:7AD6FD
点击生成 一个地址, 先保存下面。
徽章的格式即是 markdown 的格式:
603 | 604 |[\](D)
605 |
606 |
607 | A 表示的页面中需要显示的内容, B 表示的是图片的地址,D 表示的是点击后需要跳转的链接的地址。
608 | 609 |图片地址是上面存下来的。 前面显示内容:作者。按照上面的规范出来的结果就是:
612 | 613 |[\](http:\//www.gdky005.com)
614 |
615 |
616 | 把这段代码 粘贴到 我们的 md 文档中,个性专属徽章就出来了,而且点击后能到我们想去的地方。
617 | 618 |
很酷吧,其实还可以做很多这样的事情。
621 | 622 |本文的 中的 项目地址是: https://github.com/gdky005/AndroidBadge
623 | 624 |需要逐步了解项目的过程或者 根据步骤出现问题的话,可以check 对应的节点,看看代码是否不同,然后自行修改,我特意保存了该进度。如果下图中 git提交的记录:
相信小伙伴们肯定能做出更有意思的东西,到时候记得与我和大家分享,比较有特色的,我会将你们的链接挂载到 github 项目里面。
627 | 628 |因为该文真的很长,涉及到很多的技术,所以专门设立了 QQ群:621094999, 有需要帮助或许分享新技能的小伙伴请进入。
629 | 630 |本文完整地址请在 我的博客 里面查看,会修复 文章存在的问题,并补充一些相关细节。针对 小伙伴们提出的问题,将在博客中修改和增加。如果大家觉得不错,并且很喜欢的话,麻烦 GitHub 中 start 下,不胜感激。
631 | 632 |咱们不玩虚的,玩点有技术含量的东西。
635 | 636 | 637 | 638 | 639 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AndroidBadge 2 | 3 | [](https://jitpack.io/#gdky005/AndroidBadge) [](https://travis-ci.org/gdky005/AndroidBadge) [](https://circleci.com/gh/gdky005/AndroidBadge/tree/master) [](https://codecov.io/gh/gdky005/AndroidBadge) [](https://android-arsenal.com/api?level=14) [](https://www.codacy.com/app/gdky005/AndroidBadge?utm_source=github.com&utm_medium=referral&utm_content=gdky005/AndroidBadge&utm_campaign=Badge_Grade) [](http://www.gdky005.com) 4 | 5 | 写一个 android 项目用于展示 在开源项目中的徽章 shields。方便大伙提升技能。 6 | 7 | ### 个人博客 8 | 9 | 10 | [http://www.gdky005.com/](http://www.gdky005.com/) 11 | 12 | 13 | # 打造一个高逼格的android开源项目——小白攻略 14 | 15 | ### 小引子 16 | 17 | 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目。通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看到页面汇中有好多的彩色标签,看起来很酷,很专业,很有逼格,能提升很多的好感度。 18 | 19 | 20 | ### 前言 21 | 22 | 本文又是一篇很长的文章,如之前写的某篇文章一样,基本是一口气连续两三天的写。写啊写啊写,不知不觉就写了好多,其实有很多是素材图片,务必做到每个细节我都实践一遍。 23 | 24 | 考虑到同学们的时间有限,各取所需,所以按照我的惯例,首先有一篇完整版,其次,有一篇缩略版。可是这次缩略版不好做,所以综合考虑,把每个单独的知识点拆分出来,抓住重点,尽量让大家看的开心。 25 | 26 | **这里需要提醒的是:** 27 | 28 | *看了完整版就不用看精简集合了,内容都一样。完整版具有一定的连贯性。* 29 | *精简版就看的清爽哈,以备自己玩的时候,快速查找相关资料和步骤。* 30 | 31 | 这里优先汇总下: 32 | 33 | 34 | 35 | 36 | 37 | 38 | ### 相关链接: 39 | 40 | 完整版: 41 | [打造一个高逼格的android开源项目——小白全攻略](http://www.gdky005.com/2017/06/15/%E6%89%93%E9%80%A0%E4%B8%80%E4%B8%AA%E9%AB%98%E9%80%BC%E6%A0%BC%E7%9A%84android%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E2%80%94%E2%80%94%E5%B0%8F%E7%99%BD%E5%85%A8%E6%94%BB%E7%95%A5/) 42 | 43 | 精简集合版: 44 | [徽章系列1: Top 30 android 开源项目徽章](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%971%EF%BC%9A-Top-30-android-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%BE%BD%E7%AB%A0/) 45 | [徽章系列2:JitPack 的使用](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%972%EF%BC%9AJitPack-%E7%9A%84%E4%BD%BF%E7%94%A8/) 46 | [徽章系列3: Travis CI 的使用](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%973%EF%BC%9A-Travis-CI-%E7%9A%84%E4%BD%BF%E7%94%A8/) 47 | [徽章系列4: Circle CI 的使用](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%974%EF%BC%9A-Circle-CI-%E7%9A%84%E4%BD%BF%E7%94%A8/) 48 | [徽章系列5: Codecov 的使用](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%975%EF%BC%9A-Codecov-%E7%9A%84%E4%BD%BF%E7%94%A8/) 49 | [徽章系列6: Api\_Level 的使用](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%976%EF%BC%9A-Api-Level-%E7%9A%84%E4%BD%BF%E7%94%A8/) 50 | [徽章系列7: codacy 的使用](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%977%EF%BC%9A-codacy-%E7%9A%84%E4%BD%BF%E7%94%A8/) 51 | [徽章系列8:生成个性徽章](http://www.gdky005.com/2017/06/15/%E5%BE%BD%E7%AB%A0%E7%B3%BB%E5%88%978%EF%BC%9A%E7%94%9F%E6%88%90%E4%B8%AA%E6%80%A7%E5%BE%BD%E7%AB%A0/) 52 | 53 | 总分类: 54 | [徽章(shields )系列文章总分类](http://www.gdky005.com/categories/shields/) 55 | 56 | github 地址: 57 | [徽章项目 Demo github 地址:](https://github.com/gdky005/AndroidBadge) 58 | [https://github.com/gdky005/AndroidBadge](https://github.com/gdky005/AndroidBadge) 59 | 60 | **下面正文,正式开始。** 61 | 62 | 63 | ### 范例 64 | 65 | 我们以最流行的 android 开源项目 [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart "MPAndroidChart") 为例来看看。 66 | 67 | [](#) 68 | 69 | 1. 前两个蓝色的标签:开始两个蓝色的标签是开源项目主要贡献者 Twitter 的联系方式,点击后可以跳入到 Twitter 的主页,查看该大神的 动态。 70 | 2. 橘色的标签:是国外比较有名的 开源项目网站 [android-arsenal](https://android-arsenal.com), 很多开源项目都会在这里找到,有该项目的详细介绍。包含组员,版本号,github 项目基础信息等等。点击后会进入 MPAndroidChart 项目的首页,能看到有好多想知道的,不想知道的各种信息。 71 | 3. release蓝色的标签: 点击后能进入到比较有名的 [jitpack.io](https://jitpack.io/#PhilJay/MPAndroidChart) 对应的MPAndroidChart 页面,直接获取 MPAndroidChart 的最新版本,也能看到之前的构建历史。下面会重点介绍 jitpack.io 的使用。 72 | 4. 绿色的标签: 这个比较有意思,是 当前想支持的最低版本,MPAndroidChart的最低版本是 api-8。 点击后会进入到Android 2.2–2.2.3 Froyo (API level 8) 的详细介绍。这个功能是 android-arsenal 专门提供 开发者使用的。 下面也会有所介绍。 73 | 74 | 下面我们将 这些标签称之为 徽章 ([shields](https://shields.io/))。 75 | 76 | ### Top 30 android 开源项目徽章 77 | 78 | 我们尝试在 github 里面搜索 以 android 关键字 开发语言为 java 的开源项目。 79 |  80 | 统计情况如下: 81 | 82 | 1. Retrofit 0 83 | 2. okhttp 0 84 | 3. Butter Knife 0 85 | 4. MPAndroidChart 4  86 | 5. Android-Universal-Image-Loader 2  87 | 6. glide 1  88 | 7. leakcanary 0 89 | 8. EventBus 1  90 | 9. picasso 0 91 | 10. zxing 3  92 | 11. iosched 0 93 | 12. Fresco 1  94 | 13. lottie-android 0 95 | 14. RxAndroid 3  96 | 15. libgdx 1  97 | 16. SlidingMenu 0 98 | 17. PhotoView 1  99 | 18. android-async-http 1  100 | 19. material-dialogs 5  101 | 20. AndroidUtilCode 0 102 | 21. androidannotations 3  103 | 22. Material-Animations 1  104 | 23. fastjson 5  105 | 24. ViewPagerIndicator 0 106 | 25. plaid 0 107 | 26. PocketHub 1  108 | 27. tinker 4  109 | 28. Android-CleanArchitecture 2   110 | 29. Android-PullToRefresh 0 111 | 30. MaterialDesignLibrary 1  112 | 113 | 我们是筛选容器就是 30个,统计日期:2017年04月27日(随着时间推移,可能略微有变动)。使用标签的有 18个,未使用的有12个。 使用概率大约是:60%。如果筛选容器的范围再大一点可能更多,没有使用徽章的12个项目,可能由于历史原因,或者个人原因未使用,但是不管怎么说,使用徽章的人会越来越多。 114 | 115 | ### 为什么要使用徽章? 116 | 徽章 [shields](https://github.com/badges/shields) 117 | 118 | 徽章的使用不仅仅是为了装 B,而是为了让开源想更高效。进入项目主页一眼能看出需要的东西,例如该项目能否编译通过,当前最新的版本是什么等。 119 | 120 | 徽章能突出视野,github 默认给我们展示的是黑白世界,但是通过 徽章,将会得到改变。重要的信息可以一目了然。 121 | 122 | ### 最常用徽章有哪些? 123 | 一份不太靠谱的标准,不过你应该掌握: 124 |  125 | (PS: 上图中的图标顺序对应下面的顺序) 126 | 127 | 1. jitpack 徽章:[JitPack](https://jitpack.io) 是一个仓库,类似 maven,binary, 主要是帮我们生产 android 项目的 aar or jar 的平台。基于 GitHub,可以很方便将 library 发布到远程,然后可以用 gradle 依赖到任何一个项目中。 128 | 2. travis-ci 徽章:[Travis-CI](https://travis-ci.org) 是一个线托管的CI服务,不需要自己搭服务器,在网页上点几下就好,用起来更方便。最重要的是,它对开源项目是免费的。 129 | 3. circle-ci 徽章:[Cricle-CI](https://circleci.com/) 是也一个线托管的CI服务,和上面相同,不过这个相对来说比较好用一些,可以 SSH 到测试容器,方便在出问题的时候上去调试找原因,界面相对好看一些。 130 | 4. codecov 徽章:[Codecov](https://codecov.io) 是开源的测试结果展示平台,将测试结果可视化。Github上许多开源项目都使用了Codecov来展示单测结果。 131 | 5. api level 徽章:[Api-Leavel](https://android-arsenal.com/api) 是 android-arsenal 网站提供的 android api 展示的徽章。可以在项目主页中直接使用 badge 的内容。 132 | 6. codacy 徽章:编程代码自动审查服务平台。帮助开发者及时发现代码中的 bug,提升软件运行质量,主要包括代码质量、语法规范、功能可用性方面的检查。 133 | 7. 个人专属 徽章:[shiedls](https://shields.io/) 根据自己的需求可以定制很多样式的徽章,全凭个人 爱好,怎么开心怎么玩。 134 | 135 | ### 环境说明 136 | 这里我用一个简单的 android 项目来做一个说明,其他语言也是可以的,这里仅仅展示一个实例。 137 | 138 | 我的本机的android环境说明如下: 139 | - Mac 140 | - Android Studio 2.4 preview 4 141 | - gradle: 3.4.1 142 | - java: 1.8.0\_73 143 | - buildToolsVersion: 25.0.2 144 | - compileSdkVersion: 25 145 | - minSdkVersion: 14 146 | - support: appcompat-v7:25.1.0 147 | - constraint: constraint-layout:1.0.0-beta4 148 | - classpath: com.android.tools.build:gradle:2.4.0-alpha4 149 | 150 | 用其他版本或者环境也是可以的, 这里只是说明。 如果任何遇到问题,可以在我的博客里面留言,联系详情为:[http://www.gdky005.com/about/](http://www.gdky005.com/about/) 因为该文的完整版真的很长,涉及到很多的技术,所以专门设立了 QQ群:621094999, 有疑问或非常感兴趣的同学,可以来次探讨,也许一些新功能就是你们发觉的呢。 (PS:本应该在文末尾添加联系方式的,但是无奈,很多网站都有爬虫系统,好不容易写的文章就被爬走了,导致很多小伙伴遇到问题后,各种留言,但是我就是看不到,所以这次采取特殊方式,见谅哈) 151 | 152 | 153 | 154 | ### JitPack 的使用 155 | 156 | 官网: [https://jitpack.io](https://jitpack.io) 157 | 158 | ##### 创建 Android Library 159 | 1. 在 AS 中创建标准的 android 项目: 160 | 2. 创建 Library:   161 | 3. 创建 badge library 成功。 162 | ##### 配置相关文件 163 | 进入 [jitpack android](https://jitpack.io/docs/ANDROID/) 可以看到 jitpack 为我们提供的文档帮助。  164 | 1. 在项目的根目录下的 build.gradle 文件中添加: 165 | 2. 在 library 下的 build.gradle 中添加: , 对应官网中说的 『group='com.github.YourUsername’』, 其实可以不写,写不写都会自动生成。 即使你写成了别的,最终还是以这样的格式输出。 166 | 167 | AndroidBadge 中 的 build.gradle : 168 | 169 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' // Add this line 170 | 171 | AndroidBadge 里面的 badge (library) : 172 | 173 | apply plugin: 'com.github.dcendents.android-maven' 174 | 175 | ##### 发布到 Github (这里直接展示 AS 中的界面图形操作,会命令行的同学随意) 176 | 177 | 1. 登录自己的 github 账号,然后创建一个 项目,在首页右边能看到: 178 | 2. 点击 大绿色 按钮,并填写信息:。 那个协议,你们随意,这里只是演示。 179 | 3. 创建成功后:,拷贝当前项目地址。 180 | 4. 在 AS 的项目中创建 git 仓库:, 点击后,直接 选择 ok。将项目添加到 git 管理。 项目中的文件都变成绿色后:,耐心等待完成后, 本地项目已经被 git 管理起来了,然后把代码提交到 github 即可。可能会有冲突,自行解决即可。 181 | 5. 现在我们给 library 的 badge 项目添加一个工具类:, 并提交到 github。 182 | 183 | ##### Github 打 release or tag 184 |   185 | 创建第一个 release 分支: 186 | 发布成功以后就能看到:  187 | 188 | 一般用 release 就可以了, 在适当的时候 用 tag。 189 | ##### 在 JitPack 上生成 aar 190 | 1. 进入 [https://jitpack.io/](https://jitpack.io/)。 191 | 2. 将 github 的项目地址: [https://github.com/gdky005/AndroidBadge](https://github.com/gdky005/AndroidBadge), 直接拷贝 到 jitpack 网页中的文本框中。 192 | 3. 点击 Look Up 后:, 等里面的那个圈圈 转完 以后,出现 绿色的这个: 说明已经发布 aar 成功,那么我们 可以直接使用了。 如果点开这个东西,会看到编译的和发布的过程。 193 | 4. 如果是红色的,说明有错误,点开查看,修改后重新构建。 194 | 195 | ##### 在 app Demo 中测试是否生效 196 | 197 | 点击 get 后,能看到:  198 | 199 | 1. 给项目根目录下的 build.gradle 添加: 200 | 2. 给app 项目里面的 build.gradle 添加: 201 | 202 | AndroidBadge 中 的 build.gradle : 203 | 204 | maven { url 'https://jitpack.io' } 205 | 206 | 207 | AndroidBadge 里面的 app 的 build.gradle : 208 | 209 | compile 'com.github.gdky005:AndroidBadge:v1.0.0' 210 | 211 | 212 | 213 | 好的,现在我们已经添加成功了,在 MainActivity 里面是是吧,看能否调到之前在 library 里面的写的 Utils.getVersion()。很高兴的是我们调出来了: 214 | 在项目的最底下也能看到: 。 运行 app 项目: 215 | 216 | 217 | ##### 问题来了,我们修改library 后也能调用到吗? 218 | 让咱们一起试试吧: 219 | 1. 修改 badge 项目中的 1.0.0 为 1.0.1 : 。 220 | 2. 提交代码后,push 到 github。 提交成功以后,我们重复上面的打 release 步骤 , ,  221 | 3. 然后再去 jitpack 上看看: 多了一个 v1.0.1, 点击 get 吧。   222 | 4. 发布成功后,我们去 app 里面试试。  223 | 5. 同步后,直接运行 app。非常好,我们的修改的东西已经变了:。 224 | 225 | 至此, jitpack 基本也差不多了,但是貌似缺少了最重要的一点吧。 226 | 227 | ##### jitpack 的徽章怎么弄 228 | 229 | 还是在刚刚的 jitpack 界面,只是我们把 页面拉倒底部。 点击后: 是不是看到了熟悉的 md 文档的格式呢? 看不懂也没关系,下面会专门讲解。 230 | 1. 拷贝内容: 231 | 2. 打开 github 的 AndroidBridge 项目:,点击该文件。 232 | 3. 让我们在线编辑下:  233 | 4. 给 github 中的 这个 readme.md 文件添加点东西吧。 234 | 5. 让我们 保存下。  235 | 6. 然后回到项目[首页](https://github.com/gdky005/AndroidBadge)看看: 棒棒的,添加成功。 236 | 237 | 238 | ### Travis CI 的使用 239 | 240 | 官网: [http://travis-ci.org/](http://travis-ci.org/) 241 | ps: 这个是公开的,如果需要使用私有的,请使用 .com 域名。 242 | 需要提醒的是:每次提交代码后都会重新下载需要的资源文件哦,所以时间很长,耐心等待吧。 243 | 244 | ##### TravisCI 有什么用? 245 | travis-ci 就是 自动化 CI 工具,类似于大公司经常使用的 Jenkins,但是 travis-ci 是在云端的,而是支持 github, 还免费,我们可以 用 travis-ci 做很多的事情,不仅仅是 编译看 项目有没有问题。例如在项目构建结束以后,我们可以打包,并发布 apk 到都 蒲公英, fir,也可以用邮件通知给相关的开发人员和业务任务。 做一些简单处理,轻轻松松。这部分内容到后面尽快整理,在写一篇。 246 | 247 | ##### 添加 github 项目到 travis-ci 248 | 1. 进入 Travis 官网后,使用 GitHub 账号 登录,成功后:。 249 | 2. 点击 加号 ,能看到你 GitHub 里面的所有:, 如果没有项目或者没有你新建的项目,请点击右上方的 Sync account 按钮。 250 | 3. 点击这里:,开启 Travis 构建。点击这个可以配置该项目: 251 | 4. 默认是空的: 252 | 253 | ##### 在 项目中添加 travis-ci 需要的 .travis.yml 文件 254 | 1. 在项目根目录下直接创建 一个 .travis.yml 的文件。 255 | 2. 直接在文件里面添加代码: 256 | 257 | **.travis.yml 文件 源代码** 258 | 259 | language: android 260 | jdk: oraclejdk8 261 | sudo: false 262 | 263 | android: 264 | components: 265 | - tools 266 | - build-tools-25.0.2 267 | - android-25 268 | - extra-android-m2repository 269 | - extra-android-support 270 | licenses: 271 | - android-sdk-license-.+ 272 | - '.+' 273 | 274 | before_install: 275 | - chmod +x gradlew 276 | - mkdir "$ANDROID_HOME/licenses" || true 277 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" 278 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" 279 | 280 | script: 281 | - ./gradlew assembleRelease 282 | 283 | 284 | 因为该文很长很长,所以暂时就不解释具体含义了,可以看看官方文档。 285 | 286 | ##### push 项目到 github, travis-ci 自动监测构建 287 | 1. 提交到代码,并 push 到 github。会自动触发 Travis 的自动构建。 288 | 2. 下面黑色部分是构建的过程:, 黑框上的白色点点点击后会变成绿色,会自动滚动到最下面。 289 | 290 | 喝一杯咖啡,慢慢等待吧,最难熬的时候已经过去,此刻是享受的时候了。 291 | 292 | 回到首页刷新后,能看到: 说明我们已经构建成功了。 293 | 294 | ##### .travis.yml 需要注意的地方 295 | 296 | 初次使用 Travis 的试试,总遇到 说 android 的一些协议未接受而构建失败,导致耗费了一两天,曾经一度想放弃,但是最终坚持了下来,通过各种搜索,摸索,猜测,终于搞定。其实最初的项目是这个:[https://github.com/gdky005/TestJitpack](https://github.com/gdky005/TestJitpack) ,里面有很多辛酸史记录,从提交记录能看得出来,有兴趣的可以研究研究,也许能解决你现在的问题。 297 | 298 | Travis CI 协议问题解决方法:[http://stackoverflow.com/questions/37615379/travis-ci-build-doesnt-work-with-android-constraint-layout](http://stackoverflow.com/questions/37615379/travis-ci-build-doesnt-work-with-android-constraint-layout) 299 | 300 | 最重要部分在这里: 301 | 302 | machine: 303 | environment: 304 | ANDROID_HOME: /usr/local/android-sdk-linux 305 | 306 | dependencies: 307 | pre: 308 | - mkdir -p "$ANDROID_HOME/licenses" 309 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" 310 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" 311 | 312 | 313 | ##### 添加 travis-ci 徽章到 github 314 | 激动的时刻再次到来,让我们找找徽章在哪里呢? 315 |  316 | 317 | 让我们来选择 markdonw 格式: 并复制上。 318 | 319 | 同样如上修改 readme.md。  320 | 321 | 加空格后,直接贴上去:,这里需要说明的是,如果换成,图标也会换行哦。这样写就能保证所有的图标在一行了。 322 | 323 | 回到项目首页以后就能发现: 324 | 325 | 添加 Travis 徽章成功。 326 | 327 | 328 | Bye the way! 上面是最初级的构建过程,如果遇到单元测试就不行了,还得参考 我的开源项目 [TestJitpack](https://github.com/gdky005/TestJitpack)。 不过有点乱,后面整理下。 329 | 330 | 331 | ### Circle CI 的使用 332 | 333 | 官网: [https://circleci.com/](https://circleci.com/) 334 | 335 | ##### Circle CI 和 Travis CI 有什么区别?需要一起使用吗? 336 | Circle CI 相对来说比 Travis CI 好一些,至少界面上来说哈。还提供 ssh 的连接,构建过程相对来说 比较透明直观。例如: 337 | 338 | Travis CI 的文档资料相对 Circle CI 来说 比较多, Circle CI 资料少之又少。 339 | 340 | Travis CI 的使用率还是很高的, 不过 Circle CI 相对来说比较 年轻化,符合主流的科技感,更智能。 341 | 342 | 说到是否需要一起使用,其实都行,不过我在观察 github 主流项目的时候 有不少项目都是同时使用的,多一个技能总没有坏处吧。其实会了 Travis CI,在加 Circle CI 真是简单不少呢,只是基本语法不太一样。 343 | 344 | ##### 添加项目到 Circle CI 345 | 1. 登录主页面:, 在 project 里面自己的账号下搜索刚创建的项目。 346 | 2. 一般直接选择 Ubuntu 即可:,点击绿色 Build project. 347 | 3. 能看到:, 但是这次肯定会失败,因为我们还没有添加 Circle 需要的文件呢。 348 | 349 | ##### 在 项目中添加 Circle CI 需要的 circle.yml 文件 350 | 351 | 1. 在项目的根目录下 添加 circle.yml 文件; 352 | 2. 添加 circle 的代码到文件中: 353 | 354 | **circle.yml 源代码:** 355 | 356 | machine: 357 | java: 358 | version: oraclejdk8 359 | environment: 360 | ANDROID_HOME: /usr/local/android-sdk-linux 361 | 362 | dependencies: 363 | pre: 364 | - mkdir -p "$ANDROID_HOME/licenses" 365 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" 366 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" 367 | 368 | 369 | override: 370 | - echo y | android update sdk --no-ui --filter "android-25" 371 | - echo y | android update sdk --no-ui --filter "build-tools-25.0.2" 372 | - echo y | android update sdk --no-ui --filter "extra-android-m2repository" 373 | - echo y | android update sdk --no-ui --filter "extra-android-support" 374 | - echo y | android update sdk --no-ui --filter "extra-google-m2repositor" 375 | - ./gradlew dependencies || true 376 | 377 | test: 378 | override: 379 | - ./gradlew build 380 | 381 | ##### push 项目到 github, Circle CI 自动监测构建 382 | 383 | 1. 提交代码后,发布到 github,Circle CI 会自动执行。 384 | 2.  点击进来后,会看到:, 说明已经开始 构建了, 下载需要的东西:。 385 | 3. 构建中的一些步骤:, 相对 Travis 来说展示更直观。 386 | 4. 看到  说明构建成功。 387 | 388 | ##### 添加 Circle CI 徽章到 github 389 | 我们再来把 Circle CI 的徽章找到,并添加到我们的 github 上去吧。 390 | 391 | 我们把 徽章的 markdown 链接拷贝下来放入到我们的 主项目页面的里面。 392 | 393 | 回项目主页刷新后: 非常 happy, 已经添加成功了。 394 | 395 | 396 | ### 接下来添加什么呢? 397 | Github上许多开源项目都使用了Codecov来展示单元测试结果, 就它了。 398 | 399 | ### Codecov 的使用 400 | 401 | 根据文中的指示:我们能看到一个开源的 github 项目 [https://github.com/codecov/example-android](https://github.com/codecov/example-android), 不过看起来点晕晕的,于是摸索了一段时间。 402 | 403 | 我们之后都直接使用 Trivas CI 构建了。 404 | 405 | 添加项目就不说了,进入后,点击 project changes, 找到自己的项目:,等生产报告后,进入该网站就能看见结果。 406 | 407 | ##### 利用 Jacoco 生成报告 408 | 409 | Codecov不支持自己生成Android的测试覆盖率报告,它能做的是接收Jacoco生成的报告并进行可视化 410 | 411 | 1) 在 app 的 build.gradle 文件中 添加依赖 412 | 413 | //Jacoco 生成报告的依赖 414 | androidTestCompile('com.android.support.test:runner:0.5', { 415 | exclude group: 'com.android.support', module: 'support-annotations' 416 | }) 417 | // Set this dependency to use JUnit 4 rules 418 | androidTestCompile('com.android.support.test:rules:0.5', { 419 | exclude group: 'com.android.support', module: 'support-annotations' 420 | }) 421 | // Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource 422 | androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2', { 423 | exclude group: 'com.android.support', module: 'support-annotations' 424 | exclude group: 'com.android.support', module: 'support-v4' 425 | exclude group: 'com.android.support', module: 'appcompat-v7' 426 | exclude group: 'com.android.support', module: 'design' 427 | exclude group: 'com.android.support', module: 'recyclerview-v7' 428 | }) 429 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 430 | exclude group: 'com.android.support', module: 'support-annotations' 431 | }) 432 | 433 | 2) 在 需要构建测试覆盖率报告的Module (AndroidBadge 项目中的 app) 的gradle文件中设置。  434 | 435 | debug{ 436 | testCoverageEnabled true 437 | } 438 | 439 | 3) 可以在尝试在本地生成报告: 440 | 441 | ./gradlew :app:createDebugAndroidTestCoverageReport 生成测试报告。 app 就是咱们项目中要测试的 module 442 | 443 | 测试报告地址:app/build/reports/coverage/debug/index.html。 444 | 445 | ##### 上报数据给 Codecov 446 | 1. 使用Github账号登录 https://codecov.io/, 并提供授权给该应用。 447 | 2. 在.travis.yml文件中添加命令将测试覆盖率报告上传给Codecov。 448 | 449 | after_success: 450 | - bash <(curl -s https://codecov.io/bash) 451 | 452 | 453 |  454 | 455 | 456 | 457 | ##### Codecov 需要用到 单元测试,所以必须要在 配置文件中添加模拟器 458 | 因为之前修改过很多次,过程很繁琐,直接给配置文件了,相信大家一眼就能看出来。 459 | 460 | 完整的配置文件是: 461 | 462 | language: android 463 | jdk: oraclejdk8 464 | sudo: false 465 | 466 | env: 467 | global: 468 | - ANDROID_API_LEVEL=25 469 | - ANDROID_BUILD_TOOLS_VERSION=25.0.2 470 | - ANDROID_ABI=armeabi-v7a 471 | - ANDROID_TAG=google_apis 472 | - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default) 473 | 474 | android: 475 | components: 476 | - platform-tools 477 | - tools # to install Android SDK tools 25.1.x 478 | - build-tools-$ANDROID_BUILD_TOOLS_VERSION 479 | - android-$ANDROID_API_LEVEL 480 | - sys-img-armeabi-v7a-google_apis-$ANDROID_API_LEVEL 481 | 482 | licenses: 483 | - android-sdk-license-.+ 484 | - '.+' 485 | 486 | before_install: 487 | - chmod +x gradlew 488 | - mkdir "$ANDROID_HOME/licenses" || true 489 | - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" 490 | - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" 491 | 492 | before_script: 493 | # Create and start emulator 494 | - echo no | android create avd --force -n test -t "android-"$ANDROID_API_LEVEL --abi $ANDROID_ABI --tag $ANDROID_TAG 495 | - emulator -avd test -no-skin -no-window & 496 | - android-wait-for-emulator 497 | - adb shell input keyevent 82 & 498 | 499 | script: 500 | - ./gradlew assembleRelease 501 | - ./gradlew :app:createDebugAndroidTestCoverageReport --info --stacktrace 502 | 503 | after_success: 504 | - bash <(curl -s https://codecov.io/bash) 505 | 506 | 507 | ##### codecov 总结 508 | 509 | Travis-CI 对 android 的单元测试支持不是很好,因为需要开启虚拟机,开启这个过程就得10分钟(我的测试时间),很耗费时间。有时候也连接不上,一次跑下来估计得个 20分钟左右吧。所以,稳定性确实不是很高。如果不做单元测试,而只是做发布之类的,稳定性还是高的。 510 | 511 | 单元测试应都会吧, 这里检测的标准就是说 每个类和方法都必须检测到,否则就算没有覆盖。我这里也就简单在项目中写过例子,剩下的你们自己玩吧。  512 | 513 | **所以 要不要使用单元测试 还是根据项目决定吧。 ** 514 | 515 | 516 | ##### 获取 codecov 的徽章 517 | 518 |  519 | 520 | ### Api\_Level 的使用 521 | 让 codecov 慢慢构建吧,我们先继续。 522 | 523 | 官网:[https://android-arsenal.com/api](https://android-arsenal.com/api) 524 | 525 | ##### Api\_Level 有什么用? 526 | Api\_Level 是 arsenal 网站给各位开发者的一个福利,我们的 android 开源项目一般都有一个最低的构建版本。平时我们都是在 md 文件中写上 支持版本是 14+等很多样式,但是 不够醒目,有了 Api\_Level 后,打开开源项目主页就知道,最低版本是多少。 不用看文档也能明白,轻松不少。 对应的 api 的一些特性和修改也能在这里展现。 527 | ##### Api\_Level 怎么玩? 528 | 如果你的开源项目最低支持版本是:14,那么就选择这里:  529 | 530 | 把这个拷贝下来,放入我们的 md 文档中吧。  531 | 532 | 533 | ### codacy 的使用 534 | 535 | 官网: [https://www.codacy.com](https://www.codacy.com) 536 | 537 | ##### codacy 是什么? 538 | codacy 编程代码自动审查服务平台,可以帮我们分析存在的问题 或者说是 bug,主要包括代码质量、语法规范、功能可用性方面的检查。 539 | 540 | ##### codacy 怎么使用? 541 | 542 | 进入官网,添加自己的需要的 project。 543 | 544 | 完成后,等待一段时间就好了,会给你发邮件通知,已经完成。 545 | 546 | 完成后的效果是:,咱们的这个项目评级是 B。 547 | 548 | ##### codacy 徽章呢? 549 | 550 |  551 | 552 | 拷贝下来,手动放到 咱们的项目的 md 文档中把。比较放心一些,如果点击后面的 add badge ,会自动加到项目中,需要我们 pull request 里面处理下。 553 | 554 | 搞定。 555 | 556 | ### 生成个性徽章 557 | 官网: [https://shields.io/](https://shields.io/) 558 | 559 | ##### 有什么用? 560 | 彰显个人魅力,体现某种功能。例如咱们做一个跳转到我的博客的 个人徽章。 561 | ##### 怎么玩? 562 | 滚动网页到最下面: 563 | 564 | 在对应的地方填写相应的东西(也支持中文哦), 完成后点击后面的 Make Badge 按钮试试看。 565 | 566 | 我想我的个人图标是这种浅蓝色:  ,那么我就在 color 中直接写:7AD6FD 567 | 568 |  点击生成 一个地址, 先保存下面。 569 | 570 | 571 | 572 | ##### 这个原理是什么呢? (回答最开始的问题) 573 | 徽章的格式即是 markdown 的格式: 574 | 575 | [\](D) 576 | 577 | A 表示的页面中需要显示的内容, B 表示的是图片的地址,D 表示的是点击后需要跳转的链接的地址。 578 | 579 | ##### 合成我的个人专属图标吧 580 | 图片地址是上面存下来的。 前面显示内容:作者。按照上面的规范出来的结果就是: 581 | 582 | [\](http:\//www.gdky005.com) 583 | 584 | 585 | 把这段代码 粘贴到 我们的 md 文档中,个性专属徽章就出来了,而且点击后能到我们想去的地方。 586 | 587 |  588 | 589 | 很酷吧,其实还可以做很多这样的事情。 590 | 591 | 592 | 593 | 本文的 中的 项目地址是: [https://github.com/gdky005/AndroidBadge](https://github.com/gdky005/AndroidBadge) 594 | 需要逐步了解项目的过程或者 根据步骤出现问题的话,可以check 对应的节点,看看代码是否不同,然后自行修改,我特意保存了该进度。如果下图中 git提交的记录:  595 | 596 | 相信小伙伴们肯定能做出更有意思的东西,到时候记得与我和大家分享,比较有特色的,我会将你们的链接挂载到 github 项目里面。 597 | 598 | 因为该文真的很长,涉及到很多的技术,所以专门设立了 QQ群:621094999, 有需要帮助或许分享新技能的小伙伴请进入。 599 | 600 | 601 | 本文完整地址请在 [我的博客](http://www.gdky005.com/) 里面查看,会修复 文章存在的问题,并补充一些相关细节。针对 小伙伴们提出的问题,将在博客中修改和增加。如果大家觉得不错,并且很喜欢的话,麻烦 GitHub 中 start 下,不胜感激。 602 | 603 | ### 最后真想说一句 604 | 咱们不玩虚的,玩点有技术含量的东西。 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | --------------------------------------------------------------------------------