我胡漢三又回來了!在結束了本科最後一門考試後,如願來到鵝廠,趕在畢業正式入職前,先來實習感受下工作氛圍。現在剛結束了實習的第一週,按照習慣,以下是本週的知識清單:
- meta-data
- Gradle文件
- compile & implementation
- jar & aar
- 一點小感悟
a.作用:是一個鍵值對,用於幫助父組件存儲附加數據
meta-data和strings的區別:
- strings只能在應用內部被讀取
- meta-data是系統註冊的信息,系統及外界都可以獲取到meta-data配置的數據
b.位置:可包含在AndroidManifest中的<application>
、<activity>
、<activity-alias>
、<provider>
、<receiver>
、<service>
標籤下,以上組件元素可包含任意數量的<meta-data>
子元素
c.屬性
<meta-data
android:name="string"
android:resource="resource specification"
android:value="string" />
android:name
:鍵名,唯一標識android:resource
:資源ID,通過Bundle.getInt()
獲取其值android:value
:鍵值,類型和獲取方法如圖:
將資源ID指定爲
android:resource
、android:value
的值時區別:
- 將存儲在@string/kangaroo資源中的值分配給zoo名稱:
<meta-data android:name = "zoo" android:value = "@string/kangaroo" />
- 將數字ID分配給zoo名稱:
<meta-data android:name = "zoo" android:resource = "@string / kangaroo" />
d.使用:meta-data中的數據存儲於一個Bundle
對象中,可通過PackageItemInfo.metaData
字段來獲取
下面通過一個例子理解下,假設配置清單如下:
<application
...
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="meta_act"
android:resource="@string/app_name" />
</activity>
<meta-data
android:name="meta_app"
android:value="testValue" />
</application>
對value、resource值的讀取方法如下:
//獲取value的方法,這裏通過getString獲取,結果爲testValue
private String getMetaDataFromApp() {
String value = "";
try {
ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
Bundle bundle = appInfo.metaData;
value = bundle.getString("meta_app");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return value;
}
//獲取resource的方法,通過getInt獲取,結果爲id值
private int getMetaDataIdFromAct() {
int resId= 0;
try {
ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
Bundle bundle = activityInfo.metaData;
resId = bundle.getInt("meta_act");
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return resId;
}
e.應用:
- 接入第三方庫,比如使用百度地圖需要進行用戶信息配置:
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="USER-KEY" />
2.Gradle文件
一個Android Studio項目中有三個Gradle相關文件:
- Project的
settings.gradle
:指定可被Gradle識別的Module,方法是include
//添加:app和:common這兩個module參與構建
include ':app',':common'
- Project的
build.gradle
:整個Project的共有屬性,包括配置版本、插件、依賴庫等信息 - Module的
build.gradle
:各個module私有的配置文件
更多Gradle知識後續會更新《Android Gradle權威指南》讀書筆記
3.compile & implementation
在Android studio版本3.0以後,有關第三方庫或module的依賴方式中,compile被棄用,而是由implementation替代。implementation相比於compile的好處有:
- 隱藏對外不必要的接口:將該依賴隱藏在內部,而不對外部公開
一句話就是:compile可以依賴傳遞,而implementation不可以。比如當前項目結構如下,在LibraryA中使用implementation依賴LibraryC,那麼App Moudle是無法訪問到LibraryC提供的接口的,只能由LibraryA訪問到。
- 加快編譯速度:比如改動LibraryC接口的相關代碼,只需要單獨編譯LibraryA即可, 如果使用舊的compile,App Moudle部分也需要重新編譯。
4.jar & aar
- jar文件(Java Archive File):只包含class文件和清單文件,不包含資源文件
- 特點:以zip文件格式爲基礎,不同的是,jar文件不僅用於壓縮和發佈,還用於部署和封裝庫、組件和插件程序,並可被像編譯器和JVM直接使用
- 優勢:有zip沒有的功能,如安全性、減少下載時間、傳輸平臺擴展、包密封、包版本控制、可移植性
- aar文件(Android Archive):包含class及res下的所有的資源文件
- 打包方法
5.一點小感悟
或許是因爲和鵝廠有過一些交集,來到這裏竟感覺莫名的心安,這種微妙的心境用那句“我知道你會來,只是時間早晚”形容最合適不過了。
作爲一隻初來乍到的鮮鵝,沒啥見識,覺得鵝廠裏的一切都太讚了!很幸運在濱海大廈辦公,這真的是最最最理想的工作地了,豪華又智能,每個細節都彰顯一種美,連空氣都是香甜的;還有超好吃的餐廳、超大氣的體育館,轉角遇到AI技術,吃喝玩樂應有盡有;工位真的很大,機器設備都是全新的(剛來看到工位上放着好幾個大箱子的時候我都驚呆了,萬萬沒想到還要做這種體力活);以及日常福利真的不要太多(尤其趕上年底),要送就送一年VIP,搖身一變成壕鵝。
除了無敵的工作環境和資源,一起共事的小夥伴也棒呆,技術強就不說了,保養好到看不出年齡,每日一問:大佬你工作多久了?除了顏值高,性格也好,尤其組長簡直是活寶;工作氛圍也很好,大家總是學到廢寢忘食,到處都是技術討論的聲音,忍不住哀嚎我就是個大菜雞。
這幾日爲了快速熟悉業務,組長給我分了個BUG,可能因爲項目體量不小了,可讀的文檔有限,看着大佬們忙前忙後的也不敢多打擾,就自己埋頭嚼代碼,最後導師都忍不住問我怎麼都沒問題,也服了自己這股傻勁,其實先問清楚業務邏輯再看代碼會快很多。
當然也會有頭疼的時候,比如資源太多、分佈又雜經常手忙腳亂,比如寫文檔的編輯器不太好使,比如更加清楚自己的菜,所以爲了能在鵝廠搬磚還要更努力纔是呀!
最後,再一次吹爆我大濱海,每次都忍不住拿起手機拍,但僅僅拍到其萬分之一的美,於是默默收起手機,心中慨嘆,這種美大概適合親自來體驗吧!附上官方介紹:Hi,這裏是騰訊全球新總部濱海大廈!