深入淺出Android makefile(4)--LOCAL_STATIC_LIBRARIES_iteye_Android

文章目錄

  • 作用概述
  • 具體作用
  • 1. 資源合併
  • 2. 代碼依賴
  • 3. Manifest 合併
  • 使用示例
  • 與相關變量的區別
  • 實際應用場景
  • 注意事項


LOCAL_STATIC_ANDROID_LIBRARIES 是 Android 構建系統(基於 Makefile)中的一個重要變量,主要用於聲明對

靜態 Android 庫 的依賴。

作用概述

這個變量告訴構建系統:當前模塊需要鏈接哪些靜態的 Android 庫模塊。這些庫會在編譯時被靜態鏈接到最終的 APK 中。

具體作用

1. 資源合併

  • 將依賴庫中的資源(layout、drawable、values 等)合併到當前模塊
  • 資源 ID 會在編譯時重新分配,避免衝突
  • 支持資源覆蓋(當前模塊的資源可以覆蓋庫中的同名資源)

2. 代碼依賴

  • 確保依賴庫的 Java/Kotlin 代碼被編譯幷包含在最終的 dex 文件中
  • 提供對庫中類和方法訪問能力

3. Manifest 合併

  • 自動合併依賴庫的 AndroidManifest.xml 內容
  • 包括權限、組件聲明等

使用示例

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := MyApp
LOCAL_SRC_FILES := $(call all-java-files-under, src)

# 聲明依賴的靜態 Android 庫
LOCAL_STATIC_ANDROID_LIBRARIES := \
    android-support-v7-appcompat \
    android-support-design \
    my-custom-library

LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_MANIFEST_FILE := $(LOCAL_PATH)/AndroidManifest.xml

include $(BUILD_PACKAGE)

與相關變量的區別

變量

作用

示例

LOCAL_STATIC_ANDROID_LIBRARIES

Android AAR 庫

support libraries

LOCAL_STATIC_JAVA_LIBRARIES

純 Java JAR 庫

guava, gson

LOCAL_SHARED_LIBRARIES

原生共享庫

libc, libutils

實際應用場景

# 依賴 Google 的 AndroidX 庫
LOCAL_STATIC_ANDROID_LIBRARIES := \
    androidx.appcompat_appcompat \
    androidx-constraintlayout_constraintlayout \
    com.google.android.material_material

# 依賴自定義的 Android 庫模塊
LOCAL_STATIC_ANDROID_LIBRARIES := \
    my-ui-components \
    my-network-library

注意事項

  1. 模塊必須先定義:依賴的庫模塊必須在當前模塊之前定義
  2. 資源衝突:注意處理資源命名衝突
  3. ProGuard:如果使用代碼混淆,需要確保庫的 ProGuard 規則被正確應用

這個變量在模塊化開發和代碼複用中起着關鍵作用,是現代 Android 應用開發的重要組成部分。


結束語
Flutter是一個由Google開發的開源UI工具包,它可以讓您在不同平台上創建高質量、美觀的應用程序,而無需編寫大量平台特定的代碼。