• 转发如何写Android.mk



    在Android源码开发过程中,需要整合进第三方APP到系统中,作为内置应用。如果是第三方APP是以APK形式整合进项目中,那么根据平台和公司的要求,只需修改编译脚本就可以实现整合,这里不再赘述;本文讲解拿到的第三方app是源码,需要自己写android.mk文件实现编译apk功能。


    现在Android app ide主要是两个工具eclipse和android studio。Eclipse已经从google的android开发者网站中移除了下载链接,现在主流的android app开发工具就是Android studio。


    android 源码中package/app目录下的应用大部分还是eclipse的代码结构,第三方app如果是eclipse编写的,那么去源码中package/app目录下找一个应用的android.mk 类比改一下就可以。这里主要讲一下android studio 项目的android.mk怎么写。


    android studio编写的app,app源码代码结构就跟eclipse不一样,实际上有用的app目录下的内容。我的android.mk就放在app/src/main目录下(一般android.mk都放在应用目录下,但实际上android源码在编译时会遍历package/app目录下的android.mk文件,不放心可以在项目应用根目录下写android.mk)


    首先查看app/src/main目录下的build.gradle文件,在这个文件中会写明在开发中引用了哪些包,如果不是android源码中带有的(如android-support-v4,android-support-v7-xxx等),那么要去android studio的安装目录下找到这些jar包,放到app/src/main/libs/目录下(没有就自己创建一个),因为android studio在使用时会自动下载需要的包到安装目录下,所以在拿到源码时实际上这些包是没有的,在本地用android studio导入项目,它会自动联网同步这些包。

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS) (经典开头两句)
    LOCAL_PACKAGE_NAME := xxx(apk的名字,如果这个值写的是Test,那么编译出来的就是Test.apk)
    LOCAL_CERTIFICATE := platform (系统签名)
    
    LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
    src_dirs := java/
    LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
    ##声明使用的java文件和资源文件地址,如果使用到aidl,需要特别声明,常见写法如下
    #LOCAL_SRC_FILES += \
    # src/xx/xx/xx/aidl/XxxOne.aidl \
    # src/xx/xx/xx//aidl/XxxTwo.aidl
    LOCAL_MULTILIB := 32(添加这句是为了防止在编译后使用apk时,提示so是32位而不是64位导致应用fc)
    LOCAL_PREBUILT_JNI_LIBS_x86 := jniLibs/x86/libxxx.so
    LOCAL_PROGUARD_ENABLED := disabled (添加这句是为了防止在编译后使用apk时,提示找不到so库中对应的方法导致fc)
    #如果使用了jni就要这么写
    
    LOCAL_STATIC_JAVA_LIBRARIES += design \
    android-support-v4 \
    android-support-v7-appcompat \
    android-support-v7-recyclerview \
    recyclerview-v7 \
    itextpdf(第三方包名)
    
    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += \
    itextpdf:libs/itextpdf-5.5.9.jar
    #第三方包需要通过LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES声明
    
    LOCAL_PROGUARD_FLAG_FILES := proguard.flags
    ##在编译时如果提示包中有warning时,需要按照要求在文件中写dontwarn,proguard.flags需要自行创建,android studio不会创建这个文件

    下面是我写的android.mk,以供参考:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    
    LOCAL_PACKAGE_NAME := 应用名
    
    
    LOCAL_CERTIFICATE := platform
    
    
    #如果使用的系统的包,需要引入他们使用的资源文件,否则会提示编译资源找不到的错误
    LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
    LOCAL_RESOURCE_DIR += frameworks/support/v7/gridlayout/res
    LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
    LOCAL_RESOURCE_DIR += frameworks/support/design/res
    
    LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
    
    src_dirs := java/
    
    LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
    
    #LOCAL_SRC_FILES += \
    # src/xx/xx/xx/XxxOne.aidl \
    # src/xx/xx/xx/XxxTwo.aidl
    
    LOCAL_STATIC_JAVA_LIBRARIES += design \
    android-support-v4 \
    itextpdf \
    android-support-v7-appcompat \
    android-support-v7-recyclerview \
    recyclerview-v7
    
    LOCAL_PREBUILT_JNI_LIBS := jniLibs/xx/libxxx.so
    
    LOCAL_MULTILIB := 32
    
    LOCAL_PROGUARD_FLAG_FILES := proguard.flags
    
    LOCAL_AAPT_FLAGS := --auto-add-overlay
    LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
    LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.gridlayout
    LOCAL_AAPT_FLAGS += --extra-packages com.android.datetimepicker
    LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
    LOCAL_AAPT_FLAGS += --extra-packages android.support.design
    
    LOCAL_PROGUARD_ENABLED := disabled
    
    include $(BUILD_PACKAGE)
    
    include $(CLEAR_VARS)
    
    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += \
    itextpdf:libs/itextpdf-5.5.9.jar
    
    include $(BUILD_MULTI_PREBUILT)
    
    include $(call all-makefiles-under,$(LOCAL_PATH))

    特别补充:

    1.第三方APP如果使用到了design-xx.jar包中的类,编译可以通过,但是在使用时APP会出现crash问题,log反应是design中类找不到。design是android提供的jar包,出现这个问题是,要去framework/support/design/目录下执行mm编译出design对应的jar包,再编译app,这时编译出的apk就没有找不到类的异常了
    2.可以把android.mk放到应用的跟根目录下,这时候需要修改java文件,资源文件,包的引用目录地址
    ————————————————
    版权声明:本文为CSDN博主「dzy_mails」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/dzy_mails/article/details/51909112

  • 相关阅读:
    Django数据库查询优化-事务-图书管理系统的搭建
    模型层字段-多表查询-神奇的双下划线查询-F,Q查询
    Django的View(视图)-settings源码的解析-模板层-模板语法
    Django路由层与视图层
    Django框架的前奏(安装及介绍)
    面向对象的三大特性
    一,类的初识
    一,对象初识
    装饰器
    闭包
  • 原文地址:https://www.cnblogs.com/huhe/p/15872290.html
Copyright © 2020-2023  润新知