app在源码中编译,mk和bp脚本写法

通过make可以编译成app或者共享库,全编之后,可以使用mm/mmm/mma命令来单编app,下面以源码中具体的例子来说明mk文件写法

mk文件写法

cat Android.mk

LOCAL_PATH:= $(call my-dir)   // 指定源文件位于当前目录

include $(CLEAR_VARS)   // 清除 LOCAL\_ 开头的变量(LOCAL_PATH除外)的makefile文件
LOCAL_USE_AAPT2 := true // 使用aapt2编译

LOCAL_MODULE_TAGS := optional  // 该模块在所有版本下都编译
LOCAL_PACKAGE_NAME := XXXXX  // 应用名
LOCAL_PRIVATE_PLATFORM_APIS := true // sdk的hide的api來编译

LOCAL_MULTILIB=32  // 编译32位app
LOCAL_STATIC_ANDROID_LIBRARIES :=  // 引用Android系统库
    android-support-v4 
    android-support-v7-appcompat 
    android-support-v7-cardview 
    android-support-v7-recyclerview 
    android-support-v13 
    android-support-design \\

LOCAL_STATIC_JAVA_LIBRARIES :=  // 引用三方库,下面需要把这些库预编译
    eventbus-3.1.1 
    eventbus-3.1.1-sources 
    fastjson-1.2.35 
    okhttp-3.2.0 
    greendao-3.2.2

LOCAL_STATIC_JAVA_AAR_LIBRARIES :=  // 引用三方库,下面需要把这些库预编译
    aara 
    aarb

LOCAL_AAPT_FLAGS := --auto-add-overlay   // 将下面这些包一起打包到应用
                    \--extra-packages xxxxx 
                    \--extra-packages xxxxx 
                    \--extra-packages xxxxx  
                    \--extra-packages xxxxx  
                    \--extra-packages xxxxx  
                    \--extra-packages xxxx 

LOCAL_JNI_SHARED_LIBRARIES := libjni  // 指定jni库
LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main)  // 指定java源代码文件
LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml  // 指定AndroidManifest
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res  // 指定res  

LOCAL_ASSET_DIR := $(LOCAL_PATH)/app/src/main/assets // 指定assets

LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res // 增加系统res
LOCAL_CERTIFICATE := platform  // 使用平台签名
LOCAL_OVERRIDES_PACKAGES := XXXXX  // 覆盖掉XXXXX 

LOCAL_PREBUILT_JNI_LIBS :=  // 指定so文件
    app/src/main/jniLibs/armeabi-v7a/libc++\_shared.so 
    app/src/main/jniLibs/armeabi-v7a/xxx.so 
    app/src/main/jniLibs/armeabi-v7a/xxx.so 
    app/src/main/jniLibs/armeabi-v7a/xxx.so 
    app/src/main/jniLibs/armeabi-v7a/xxx.so 
    app/src/main/jniLibs/armeabi-v7a/xxx.so 
    app/src/main/jniLibs/armeabi-v7a/xxx.so

LOCAL_DEX_PREOPT := false  // 不进行odex优化
LOCAL_PROGUARD_ENABLED := disabled  // 不进行混淆
include $(BUILD_PACKAGE)   // 编译生成apk

// 下面是指定预编译的三方库

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=eventbus-3.1.1:app/libs/eventbus-3.1.1.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=eventbus-3.1.1-sources:app/libs/eventbus-3.1.1-sources.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=aliyun-log-android-sdk-2.0.0:app/libs/aliyun-log-android-sdk-2.0.0.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=core-0.0.5:app/libs/core-0.0.5.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=facedetection-0.0.5:app/libs/facedetection-0.0.5.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=fastjson-1.2.35:app/libs/fastjson-1.2.35.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=handgesturedetection-0.0.6:app/libs/handgesturedetection-0.0.6.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=aara:app/libs/aara.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES +=aarb:app/libs/aarb.aar
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_DEX_PREOPT := false
include $(BUILD_MULTI_PREBUILT)

include $(LOCAL_PATH)/app/src/main/jni/Android.mk  // 引入另外一个mk文件。此处引入生成so的mk,即上面配置的LOCAL_JNI_SHARED_LIBRARIES := libjni

bp文件写法

~/source/packages/apps/Gallery2$ cat Android.bp

package { // 增加一些申明信息,可选
    default_applicable_licenses: ["Android-Apache-2.0"],
}

android_app { // 编译成apk
    name: "Gallery2", // 应用名

    static_libs: [ // 引用Android系统静态库
        "androidx.fragment_fragment",
        "androidx.documentfile_documentfile",
        "androidx.legacy_legacy-support-core-ui",
        "androidx.core_core",
        "androidx.legacy_legacy-support-v13",
        "com.android.gallery3d.common2",
        "xmp_toolkit",
        "mp4parser",
    ],

    srcs: [  // 指定java源代码文件
        "src/**/*.java",
        "src_pd/**/*.java",
    ],

    resource_dirs: ["res"], // 指定res

    product_specific: true, // 编译出来放在/product目录下(默认是放在/system目录下)

    overrides: [ // 覆盖掉一些应用
        "Gallery",
        "Gallery3D",
        "GalleryNew3D",
    ],

    sdk_version: "current", // 类似mk中LOCAL_SDK_VERSION,指定后不能使用系统hideapi

    target_sdk_version: "28", // 指定Android sdk版本

    jni_libs: [  // 指定项目中jni库
        "libjni_eglfence",
        "libjni_filtershow_filters",
        "libjni_jpegstream",
    ],

    optimize: { // 优化混淆配置
        proguard_flags_files: ["proguard.flags"],
    },

    libs: ["org.apache.http.legacy"], // 引用动态库

    optional_uses_libs: ["com.google.android.media.effects"], // 指定一个可选使用的库。如果该库可用,则将其链接到应用程序中。

    jarjar_rules: "jarjar-rules.txt", // 使用jarjar工具修改jar的包名
}

将app添加方案配置

一般需要将app的PACKAGE_NAME(mk中配置的LOCAL_PACKAGE_NAME)添加到方案配置文件中,然后进行全编,固件中就包含该apk。具体做法要看公司

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值