Android Library Maven發布SDK至(Github、碼云)

作者:雨田Android開發

鏈接:http://www.lxweimin.com/p/6182c474b66f

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

1 需求

你是否用過友盟、微信、微博、支付寶的sdk?

有沒有想研究一下對方的代碼,卻發現已經混淆了?

你有沒有想過有一天,你也會進入一家牛逼的企業,需要發布自己SDK?

又或者僅僅是滿足自己的虛榮心,發布一個自己得意的工具?

這篇文章正是為實現這一目的

2 開發環境及工具

MAC(Windows也無所謂,路徑不同而已)

Android Studio 2.3.1

JDK 1.8

Github

Maven

3 實現步驟

3.1 新建工程

新建一個工程TestModule,選擇empty activity,讓Android studio生成一個最簡單的activity,這個工程我們用來做什么的呢?

大家知道,你交付的代碼是需要有質量保證的,因此需要對他有過詳盡的測試,這個工程就是我們的測試工程,簡單來說就模擬用戶的開發環境

3.2 新建module

新版本的Android Studio已經支持模塊開發,我們選擇File-->New-->New Module,此時會有一個彈框,我們選擇Android Library,并起名為MySDK

image

新建成功后,你會發現左側工程導航欄里,多出了一個模塊工程,這個工程有著獨立的一套目錄結構,跟app一樣。他有自己獨立的gradle配置

image

3.2 建立功能類

在mysdk這個模塊下的操作跟普通的Android工程沒有任何區別,所以我們按平常一樣,建立一個新的activity,起名叫mySDKTest,并自動建好layout。這篇文章的重點不在功能,所以我們在這個layout中隨便建一個什么view,我們就建一個button吧,實現一個最簡單的功能,點擊這個button,就打印出一句“You clicked module button”。

假設,這個就是我們最終要封裝的功能。

image

<?xml version="1.0" encoding="utf-8"?><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"xmlns:android="http://schemas.android.com/apk/res/android"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/button"android:text="Button"/></LinearLayout>

publicclassmySDKTestextendsAppCompatActivity{privatestaticfinalStringTAG="mySDKTest";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_my_sdktest);Buttonbutton=(Button)findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){Log.i(TAG,"You clicked module button!!");}});}}

3.3測試功能

此時,你會發現你根本run不起來這個工程,根本沒有選項去跑這個功能,可選的只有app,沒有mysdk。

image

這就是我們在3.1新建工程時說這個工程是測試工程的原因,因為Module根本跑不起來的啊

3.4配置依賴

因此我們要用到app來測試SDK,所以我們要在app中配置依賴mysdk。

方法是在app的build.gradle里加入依賴語句

compile project(':mysdk')

此時,再去app的MainActivity里,你就可以import我們剛剛建立的mySDKTest了。

同樣,我們實現一個button,點擊跳轉到mysdk的activity。

Buttonbutton=(Button)findViewById(com.flame.mysdk.R.id.button);button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){Intentintent=newIntent(MainActivity.this,mySDKTest.class);startActivity(intent);}});

這樣就能跑起來測試了

跑起來后,點擊跳轉按鈕,會發現進入了sdk的頁面,再點擊按鈕,會打出那句log。

之后你可以根據自己的需求,繼續開發,并測試。

image

3.5 管理依賴

3.5.1簡單方式

我們假設,你已經完成了功能開發和測試,現在需要發布出去或者提交給用戶,如何給到用戶呢?

我們打開mysdk的目錄,在build-->outputs-->aar下面是有生成的AAR文件,你把這個文件拷貝一份給用戶其實,也是可以的,大家搜一下導入AAR文件即可。

image

3.5.2 Maven + Github

Apache Maven是Apache開發的一個工具,提供了用于貢獻library的文件服務器。

通過Maven + Github的方式,我們可以更簡單的發布,更便捷的做版本管理;用戶可以更簡單的導入。

也是我們重點要講的內容

3.5.2.1配置打包gradle

在mysdk的目錄下,新建一個名為maven-release-aar.gradle的文件,并在build.gradle中添加如下字段:

applyfrom:'maven-release-kline-aar.gradle'

image

3.5.2.2配置maven-release-aar.gradle

可以這么理解,maven-release-aar.gradle就是我們用來設置打包的腳本,在文件中添加如下代碼:

注意看注釋!!

// 1.maven-插件apply plugin:'maven'//?

2.maven-信息ext{// ext is a gradle closure allowing the declaration of global propertiesPUBLISH_GROUP_ID='com.flame'PUBLISH_ARTIFACT_ID='mySDK'PUBLISH_VERSION=android.defaultConfig.versionName}// 3.maven-輸出路徑

uploadArchives{

? ? ? ?repositories.mavenDeployer{

//這里就是最后輸出地址,

在自己電腦上新建個文件夾,把文件夾路徑粘貼在此//注意”file://“ + 路徑,有三個斜杠,別漏了(如果路徑找不到注意要帶上對應盤路徑)

repository(url:"file:///C:/Users/flame/Documents/sourceTree/mysdk")

pom.project{

groupId project.PUBLISH_GROUP_ID

artifactId project.PUBLISH_ARTIFACT_ID

version project.PUBLISH_VERSION

}

}

}

//以下代碼會生成jar包源文件,如果是不開源碼,請不要輸入這段//aar包內包含注釋

taskandroidSourcesJar(type:Jar){

classifier='sources'fromandroid.sourceSets.main.java.sourceFiles

}

artifacts{

archives androidSourcesJar

}

3.5.2.3生成AAR文件

接下來就是生成最終的AAR文件了,在Android studio右側有個gradle側邊欄,點擊會有如下畫面,選擇mysdk,點擊uploadArchives

image

最后build成功

image

再去上面配置好的maven輸出路徑下看,會發現已經有生成文件了。

注意看,version是1.0,而且有jar包,解壓jar包就會得到全部源文件

如果在上一步不開源,注釋掉生成jar包的代碼,這里就不會有jar包

image

3.5.2.4.1上傳至github

將整個文件夾上傳至Github,注意,要上傳的是完整的路徑

在github中新建organization,create new-new organization.

此處需要注意,create new有兩個選項,new repository和new organization,此處務必要選擇organization,雖然區別不大,但是假如選擇repository的話不能夠作為私有倉庫導入到新項目(報Failed to resolve錯誤)

3.5.2.4.2上傳至碼云(

這是另外一篇文章,不要糾結兩篇文章的項目路徑,只要參考對應操作完成即可。

作者:啥啥啥娜娜)

鏈接:http://www.lxweimin.com/p/3e0b213ab03d

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


1,首先在碼云上新建一個項目,如下圖所示


2,本地新建一個文件夾


3,進入新建的文件夾,點擊鼠標右鍵,選擇git bash here


然后在窗口輸入 git init ?這時候文件夾會多出一個.git文件夾,看不到文件夾的,點擊鼠標右鍵選擇“顯示不顯示隱藏的文件”就可以看到這個文件夾了

4,進入剛剛在碼云新建的項目里,復制框框里的路徑

5,然后在回到本地新建的文件夾里

繼續操作git ? ?

輸入git remote add origin + 你剛剛在碼云復制的那行路徑

6,繼續輸入 git pull origin master 命令,將碼云上的倉庫pull到本地文件夾

7,將要上傳的文件,添加到剛剛創建的文件夾? ?

8,使用git add .? (. 表示所有的)或者 git add + 文件名? ? ? ? ? ? // 將文件保存到緩存區


9,使用git commit -m '新添加的文件內容描述'? ? ?//添加文件描述



10、使用git push origin master ,將本地倉庫推送到遠程倉庫


11,回到碼云,刷新試試,就可以看到新建項目了?



3.5.2.5 管理版本

剛剛提到之所以用maven的一個原因就是版本控制,這里我們就演示一下,所謂的版本控制

打開mysdk的build.gradle,修改defaultConfig下的versionName 為"1.1"

image

再來一次#3.5.2.3 - uploadArchives,build成功后再看目錄,已經生成了新的版本1.1

再上傳至Github

這樣我們就有了清晰的版本控制

image

3.6 如何引用

在之前的章節中,我們已經生成了對應代碼,那么如何引用呢?

首先我們先要在app的build.gradle里面移除之前的依賴方法

//注釋掉這段,不需要了//compile project(':mysdk')

3.6.1 本地模式

代碼就在我們本地,我們當然可以就近引用咯

我們在app的build.gradle中加入如下代碼,這里已經省略了無關代碼

repositories{jcenter()//略//指定絕對路徑maven{url"file:///Users/flame/Documents/sourceTree/mysdk"}}dependencies{//略//mysdk,這里可以指定版本,我們有1.0,1.1兩個版本可選compile('com.flame:mySDK:1.1')}

3.6.2 網絡模式

上面提到的方法,當然是少數,畢竟我們大多數都是在網絡導入依賴庫,這里就是需要用到之前上傳至Github的代碼了。

只需把路徑指向Github即可

repositories{jcenter()//略//指定Github路徑maven{url"https://github.com/flameandroid/mysdk/raw/master"}}dependencies{//略?//mysdk,這里可以指定版本,我們有1.0,1.1兩個版本可選compile('com.flame:mySDK:1.1')}

3.7 混淆

我們打開External Libraries,會發現mySDK已經導入工程,而且還是完全開源的。

而很多時候我們是不需要開源的,那么如何做到呢?其實和普通的Android打包混淆一模一樣

把混淆過的代碼上傳至Github,這樣我們就完成了SDK的制作和發布

release{// 不顯示LogbuildConfigField"boolean","LOG_DEBUG","false"http://混淆minifyEnabledtrue//Zipalign優化zipAlignEnabledtrue// 移除無用的resource文件shrinkResourcestrue//前一部分代表系統默認的android程序的混淆文件,該文件已經包含了基本的混淆聲明,后一個文件是自己的定義混淆文件proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'}

4 注意事項

注意路徑一定要寫對,特別是大小寫,路徑的大小寫不對是找不到文件的,這雖然是低級錯誤,但其實挺常見的

注意Github路徑不是常見的https://github.com/flameandroid/mysdk.git

而是https://github.com/flameandroid/mysdk/raw/master

注意如果選擇了混淆,切勿在打包那步生成了jar,還上傳到Github了,否則白混淆了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容