鵝廠實習| 週記(一)

我胡漢三又回來了!在結束了本科最後一門考試後,如願來到鵝廠,趕在畢業正式入職前,先來實習感受下工作氛圍。現在剛結束了實習的第一週,按照習慣,以下是本週的知識清單:

  • meta-data
  • Gradle文件
  • compile & implementation
  • jar & aar
  • 一點小感悟

1.meta-data(元數據)

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:resourceandroid: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,這裏是騰訊全球新總部濱海大廈!

大廳——第一條“腰帶”


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章