首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 系統源碼編譯時通過宏開關控制功能裁剪

     編輯:程式設計疑難解答

需求

Android 系統源碼中添加功能(如通話錄音),需通過編譯時宏開關控制是否包含,以適配不同客戶需求。

實現方案:BuildConfig + Gradle

// build.gradle (模塊級)
android {
    defaultConfig {
        buildConfigField "boolean", "ENABLE_CALL_RECORD", "false"
    }
    productFlavors {
        clientA {
            buildConfigField "boolean", "ENABLE_CALL_RECORD", "true"
        }
        clientB {
            buildConfigField "boolean", "ENABLE_CALL_RECORD", "false"
        }
    }
}

代碼中使用

// Java/Kotlin
if (BuildConfig.ENABLE_CALL_RECORD) {
    // 啟用錄音功能
    startCallRecording();
}

// C/C++ (Android.bp / Android.mk)
// Android.bp
cc_library {
    name: "libcallrecord",
    cflags: ["-DENABLE_CALL_RECORD=1"],
    // 客戶 A 專用編譯
    target: {
        vendor: {
            enabled: true,
            cflags: ["-DENABLE_CALL_RECORD=1"],
        },
    },
}

編譯命令

# 編譯客戶 A 版本
lunch aosp_arm64-userdebug
m clientA

# 編譯客戶 B 版本
m clientB

優勢

  • 編譯期裁剪,無運行時開銷
  • 生成的 APK/系統鏡像體積最優
  • 源碼統一維護,差異配置隔離
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved