轉自:打造一個高逼格的android開源項目html
在平時的開發過程當中,咱們常常會查閱不少的資料,最常參考的是 github 的開源項目。一般在項目的主頁面能看到項目的簡介和基本使用,而且時不時能看到頁面匯中有好多的彩色標籤,看起來很酷,很專業,頗有逼格,能提高不少的好感度。java
本文又是一篇很長的文章,如以前寫的某篇文章同樣,基本是一口氣連續兩三天的寫。寫啊寫啊寫,不知不覺就寫了好多,其實有不少是素材圖片,務必作到每一個細節我都實踐一遍。linux
考慮到同窗們的時間有限,各取所需,因此按照個人慣例,首先有一篇完整版,其次,有一篇縮略版。但是此次縮略版很差作,因此綜合考慮,把每一個單獨的知識點拆分出來,抓住重點,儘可能讓你們看的開心。android
這裏須要提醒的是:ios
看了完整版就不用看精簡集合了,內容都同樣。完整版具備必定的連貫性。
精簡版就看的清爽哈,以備本身玩的時候,快速查找相關資料和步驟。nginx
這裏優先彙總下:git
完整版:
打造一個高逼格的android開源項目——小白全攻略github
精簡集合版:
徽章系列1: Top 30 android 開源項目徽章
徽章系列2:JitPack 的使用
徽章系列3: Travis CI 的使用
徽章系列4: Circle CI 的使用
徽章系列5: Codecov 的使用
徽章系列6: Api_Level 的使用
徽章系列7: codacy 的使用
徽章系列8:生成個性徽章面試
總分類:
徽章(shields )系列文章總分類docker
github 地址:
徽章項目 Demo github 地址:
https://github.com/gdky005/AndroidBadge
下面正文,正式開始。
咱們以最流行的 android 開源項目 MPAndroidChart 爲例來看看。
下面咱們將 這些標籤稱之爲 徽章 (shields)。
咱們嘗試在 github 裏面搜索 以 android 關鍵字 開發語言爲 java 的開源項目。
統計狀況以下:
咱們是篩選容器就是 30個,統計日期:2017年04月27日(隨着時間推移,可能略微有變更)。使用標籤的有 18個,未使用的有12個。 使用機率大約是:60%。若是篩選容器的範圍再大一點可能更多,沒有使用徽章的12個項目,可能因爲歷史緣由,或者我的緣由未使用,可是無論怎麼說,使用徽章的人會愈來愈多。
徽章 shields
徽章的使用不只僅是爲了裝 B,而是爲了讓開源想更高效。進入項目主頁一眼能看出須要的東西,例如該項目可否編譯經過,當前最新的版本是什麼等。
徽章能突出視野,github 默認給咱們展現的是黑白世界,可是經過 徽章,將會獲得改變。重要的信息能夠一目瞭然。
一份不太靠譜的標準,不過你應該掌握:
(PS: 上圖中的圖標順序對應下面的順序)
這裏我用一個簡單的 android 項目來作一個說明,其餘語言也是能夠的,這裏僅僅展現一個實例。
個人本機的android環境說明以下:
用其餘版本或者環境也是能夠的, 這裏只是說明。 若是任何遇到問題,能夠在個人博客裏面留言,聯繫詳情爲:http://www.gdky005.com/about/ 由於該文的完整版真的很長,涉及到不少的技術,因此專門設立了 QQ羣:621094999, 有疑問或很是感興趣的同窗,能夠來次探討,也許一些新功能就是大家發覺的呢。 (PS:本應該在文末尾添加聯繫方式的,可是無奈,不少網站都有爬蟲系統,好不容易寫的文章就被爬走了,致使不少小夥伴遇到問題後,各類留言,可是我就是看不到,因此此次採起特殊方式,見諒哈)
AndroidBadge 中 的 build.gradle :
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' // Add this line
AndroidBadge 裏面的 badge (library) :
apply plugin: 'com.github.dcendents.android-maven'
建立第一個 release 分支:
發佈成功之後就能看到:
通常用 release 就能夠了, 在適當的時候 用 tag。
點擊 get 後,能看到:
AndroidBadge 中 的 build.gradle :
maven { url 'https://jitpack.io' }
AndroidBadge 裏面的 app 的 build.gradle :
compile 'com.github.gdky005:AndroidBadge:v1.0.0'
好的,如今咱們已經添加成功了,在 MainActivity 裏面是是吧,看可否調到以前在 library 裏面的寫的 Utils.getVersion()。很高興的是咱們調出來了:
在項目的最底下也能看到:
。 運行 app 項目:
讓我們一塊兒試試吧:
至此, jitpack 基本也差很少了,可是貌似缺乏了最重要的一點吧。
仍是在剛剛的 jitpack 界面,只是咱們把 頁面拉倒底部。
點擊後:
是否是看到了熟悉的 md 文檔的格式呢? 看不懂也不要緊,下面會專門講解。
官網: http://travis-ci.org/
ps: 這個是公開的,若是須要使用私有的,請使用 .com 域名。
須要提醒的是:每次提交代碼後都會從新下載須要的資源文件哦,因此時間很長,耐心等待吧。
travis-ci 就是 自動化 CI 工具,相似於大公司常用的 Jenkins,可是 travis-ci 是在雲端的,而是支持 github, 還免費,咱們能夠 用 travis-ci 作不少的事情,不只僅是 編譯看 項目有沒有問題。例如在項目構建結束之後,咱們能夠打包,併發布 apk 到都 蒲公英, fir,也能夠用郵件通知給相關的開發人員和業務任務。 作一些簡單處理,輕輕鬆鬆。這部份內容到後面儘快整理,在寫一篇。
.travis.yml 文件 源代碼
language: android jdk: oraclejdk8 sudo: false android: components: - tools - build-tools-25.0.2 - android-25 - extra-android-m2repository - extra-android-support licenses: - android-sdk-license-.+ - '.+' before_install: - chmod +x gradlew - mkdir "$ANDROID_HOME/licenses" || true - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" script: - ./gradlew assembleRelease
由於該文很長很長,因此暫時就不解釋具體含義了,能夠看看官方文檔。
喝一杯咖啡,慢慢等待吧,最難熬的時候已通過去,此刻是享受的時候了。
回到首頁刷新後,能看到:
說明咱們已經構建成功了。
初次使用 Travis 的試試,總遇到 說 android 的一些協議未接受而構建失敗,致使耗費了一兩天,曾經一度想放棄,可是最終堅持了下來,經過各類搜索,摸索,猜想,終於搞定。其實最初的項目是這個:https://github.com/gdky005/TestJitpack ,裏面有不少辛酸史記錄,從提交記錄能看得出來,有興趣的能夠研究研究,也許能解決你如今的問題。
Travis CI 協議問題解決方法:http://stackoverflow.com/questions/37615379/travis-ci-build-doesnt-work-with-android-constraint-layout
最重要部分在這裏:
machine:
environment:
ANDROID_HOME: /usr/local/android-sdk-linux dependencies: pre: - mkdir -p "$ANDROID_HOME/licenses" - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
激動的時刻再次到來,讓咱們找找徽章在哪裏呢?
讓咱們來選擇 markdonw 格式:
並複製上。
一樣如上修改 readme.md。
加空格後,直接貼上去:
,這裏須要說明的是,若是換成,圖標也會換行哦。這樣寫就能保證全部的圖標在一行了。
回到項目首頁之後就能發現:
添加 Travis 徽章成功。
Bye the way! 上面是最初級的構建過程,若是遇到單元測試就不行了,還得參考 個人開源項目 TestJitpack。 不過有點亂,後面整理下。
Circle CI 相對來講比 Travis CI 好一些,至少界面上來講哈。還提供 ssh 的鏈接,構建過程相對來講 比較透明直觀。例如:
Travis CI 的文檔資料相對 Circle CI 來講 比較多, Circle CI 資料少之又少。
Travis CI 的使用率仍是很高的, 不過 Circle CI 相對來講比較 年輕化,符合主流的科技感,更智能。
說到是否須要一塊兒使用,其實都行,不過我在觀察 github 主流項目的時候 有很多項目都是同時使用的,多一個技能總沒有壞處吧。其實會了 Travis CI,在加 Circle CI 真是簡單很多呢,只是基本語法不太同樣。
circle.yml 源代碼:
machine:
java: version: oraclejdk8 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: pre: - mkdir -p "$ANDROID_HOME/licenses" - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" override: - echo y | android update sdk --no-ui --filter "android-25" - echo y | android update sdk --no-ui --filter "build-tools-25.0.2" - echo y | android update sdk --no-ui --filter "extra-android-m2repository" - echo y | android update sdk --no-ui --filter "extra-android-support" - echo y | android update sdk --no-ui --filter "extra-google-m2repositor" - ./gradlew dependencies || true test: override: - ./gradlew build
咱們再來把 Circle CI 的徽章找到,並添加到咱們的 github 上去吧。
咱們把 徽章的 markdown 連接拷貝下來放入到咱們的 主項目頁面的裏面。
回項目主頁刷新後:
很是 happy, 已經添加成功了。
Github上許多開源項目都使用了Codecov來展現單元測試結果, 就它了。
根據文中的指示:咱們能看到一個開源的 github 項目https://github.com/codecov/example-android, 不過看起來點暈暈的,因而摸索了一段時間。
咱們以後都直接使用 Trivas CI 構建了。
添加項目就不說了,進入後,點擊 project changes, 找到本身的項目:
,等生產報告後,進入該網站就能看見結果。
Codecov不支持本身生成Android的測試覆蓋率報告,它能作的是接收Jacoco生成的報告並進行可視化
1) 在 app 的 build.gradle 文件中 添加依賴
//Jacoco 生成報告的依賴 androidTestCompile('com.android.support.test:runner:0.5', { exclude group: 'com.android.support', module: 'support-annotations' }) // Set this dependency to use JUnit 4 rules androidTestCompile('com.android.support.test:rules:0.5', { exclude group: 'com.android.support', module: 'support-annotations' }) // Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-v4' exclude group: 'com.android.support', module: 'appcompat-v7' exclude group: 'com.android.support', module: 'design' exclude group: 'com.android.support', module: 'recyclerview-v7' }) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' })
2) 在 須要構建測試覆蓋率報告的Module (AndroidBadge 項目中的 app) 的gradle文件中設置。
debug{
testCoverageEnabled true }
3) 能夠在嘗試在本地生成報告:
./gradlew :app:createDebugAndroidTestCoverageReport 生成測試報告。 app 就是我們項目中要測試的 module
測試報告地址:app/build/reports/coverage/debug/index.html。
在.travis.yml文件中添加命令將測試覆蓋率報告上傳給Codecov。
after_success:
- bash <(curl -s https://codecov.io/bash)
由於以前修改過不少次,過程很繁瑣,直接給配置文件了,相信你們一眼就能看出來。
完整的配置文件是:
language: android jdk: oraclejdk8 sudo: false env: global: - ANDROID_API_LEVEL=25 - ANDROID_BUILD_TOOLS_VERSION=25.0.2 - ANDROID_ABI=armeabi-v7a - ANDROID_TAG=google_apis - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default) android: components: - platform-tools - tools # to install Android SDK tools 25.1.x - build-tools-$ANDROID_BUILD_TOOLS_VERSION - android-$ANDROID_API_LEVEL - sys-img-armeabi-v7a-google_apis-$ANDROID_API_LEVEL licenses: - android-sdk-license-.+ - '.+' before_install: - chmod +x gradlew - mkdir "$ANDROID_HOME/licenses" || true - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" before_script: # Create and start emulator - echo no | android create avd --force -n test -t "android-"$ANDROID_API_LEVEL --abi $ANDROID_ABI --tag $ANDROID_TAG - emulator -avd test -no-skin -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & script: - ./gradlew assembleRelease - ./gradlew :app:createDebugAndroidTestCoverageReport --info --stacktrace after_success: - bash <(curl -s https://codecov.io/bash)
Travis-CI 對 android 的單元測試支持不是很好,由於須要開啓虛擬機,開啓這個過程就得10分鐘(個人測試時間),很耗費時間。有時候也鏈接不上,一次跑下來估計得個 20分鐘左右吧。因此,穩定性確實不是很高。若是不作單元測試,而只是作發佈之類的,穩定性仍是高的。
單元測試應都會吧, 這裏檢測的標準就是說 每一個類和方法都必須檢測到,不然就算沒有覆蓋。我這裏也就簡單在項目中寫過例子,剩下的大家本身玩吧。
因此 要不要使用單元測試 仍是根據項目決定吧。
讓 codecov 慢慢構建吧,咱們先繼續。
官網:https://android-arsenal.com/api
Api_Level 是 arsenal 網站給各位開發者的一個福利,咱們的 android 開源項目通常都有一個最低的構建版本。平時咱們都是在 md 文件中寫上 支持版本是 14+等不少樣式,可是 不夠醒目,有了 Api_Level 後,打開開源項目主頁就知道,最低版本是多少。 不用看文檔也能明白,輕鬆很多。 對應的 api 的一些特性和修改也能在這裏展示。
若是你的開源項目最低支持版本是:14,那麼就選擇這裏:
把這個拷貝下來,放入咱們的 md 文檔中吧。
codacy 編程代碼自動審查服務平臺,能夠幫咱們分析存在的問題 或者說是 bug,主要包括代碼質量、語法規範、功能可用性方面的檢查。
進入官網,添加本身的須要的 project。
完成後,等待一段時間就行了,會給你發郵件通知,已經完成。
完成後的效果是:
,我們的這個項目評級是 B。
拷貝下來,手動放到 我們的項目的 md 文檔中把。比較放心一些,若是點擊後面的 add badge ,會自動加到項目中,須要咱們 pull request 裏面處理下。
搞定。
彰顯我的魅力,體現某種功能。例如我們作一個跳轉到個人博客的 我的徽章。
滾動網頁到最下面:
在對應的地方填寫相應的東西(也支持中文哦), 完成後點擊後面的 Make Badge 按鈕試試看。
我想個人我的圖標是這種淺藍色:
,那麼我就在 color 中直接寫:7AD6FD
點擊生成 一個地址, 先保存下面。
徽章的格式便是 markdown 的格式:
[\](D)
A 表示的頁面中須要顯示的內容, B 表示的是圖片的地址,D 表示的是點擊後須要跳轉的連接的地址。
圖片地址是上面存下來的。 前面顯示內容:做者。按照上面的規範出來的結果就是:
[\](http:\//www.gdky005.com)
把這段代碼 粘貼到 咱們的 md 文檔中,個性專屬徽章就出來了,並且點擊後能到咱們想去的地方。
很酷吧,其實還能夠作不少這樣的事情。
本文的 中的 項目地址是: https://github.com/gdky005/AndroidBadge
須要逐步瞭解項目的過程或者 根據步驟出現問題的話,能夠check 對應的節點,看看代碼是否不一樣,而後自行修改,我特地保存了該進度。若是下圖中 git提交的記錄:
相信小夥伴們確定能作出更有意思的東西,到時候記得與我和你們分享,比較有特點的,我會將大家的連接掛載到 github 項目裏面。
由於該文真的很長,涉及到不少的技術,因此專門設立了 QQ羣:621094999, 有須要幫助或許分享新技能的小夥伴請進入。
本文完整地址請在 個人博客 裏面查看,會修復 文章存在的問題,並補充一些相關細節。針對 小夥伴們提出的問題,將在博客中修改和增長。若是你們以爲不錯,而且很喜歡的話,麻煩 GitHub 中 start 下,不勝感激。
我們不玩虛的,玩點有技術含量的東西。