Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Android.mk创建AAR存档文件_Android_Android Source_Android Library_Ndk Build_Android.mk - Fatal编程技术网

如何从Android.mk创建AAR存档文件

如何从Android.mk创建AAR存档文件,android,android-source,android-library,ndk-build,android.mk,Android,Android Source,Android Library,Ndk Build,Android.mk,我正在尝试构建一个定制的Android系统,为此我想使用一个单独的库来包含一些定制视图。为此,我使用 ... LOCAL_MODULE:= com.zzz.ui include $(BUILD_JAVA_LIBRARY) ... 但缺点是我不能使用任何资源,所有的ui定制和布局安排都必须通过编程来完成 现在我想更改它并创建一个Android库,生成一个*.aar,在其中我还可以添加资源,并直接从布局文件和一些绘图文件中放大视图。我怎样才能做到这一点呢?经过我的调查,我发现了类似的东西。 虽然

我正在尝试构建一个定制的Android系统,为此我想使用一个单独的库来包含一些定制视图。为此,我使用

...
LOCAL_MODULE:= com.zzz.ui
include $(BUILD_JAVA_LIBRARY)
...
但缺点是我不能使用任何资源,所有的ui定制和布局安排都必须通过编程来完成


现在我想更改它并创建一个Android库,生成一个*.aar,在其中我还可以添加资源,并直接从布局文件和一些绘图文件中放大视图。我怎样才能做到这一点呢?

经过我的调查,我发现了类似的东西。

虽然这个答案是零碎的,但是从这一点上我可以看出,我可以使用以下步骤从我想要的任何模块构建AAR:

  • 在您的模块中提供本地资源目录定义;这里有问题 工具链会自动尝试编译/合并所有 其中的xml文件,因此如果在其中找到任何xml(使用有效的 android res文件夹结构和命名)它引发了一个错误。到 解决方法:例如,您可以将其放入给定的res文件夹中 “values”文件夹,然后在其中放置一个非空的dummy.xml,例如 范例

    
    09
    

    (至少需要一个有效的资源名称定义)

  • 为模块/项目提供AndroidManifest.xml。空的 舱单就行了

    
    

  • 更改Android.mk,使其包含静态java库 以makefile为目标并指向资源目录

    LOCAL\u RESOURCE\u DIR:=$(LOCAL\u PATH)/res include
    $(构建静态JAVA库)

  • 现在执行构建。对于这一点,需要一种稍微不同的方法 需要使用mmm(必须在最高层启动 AOSP源树的名称):

    make out/target/common/obj/JAVA\u LIBRARIES/\u mediates/javalib.aar

  • aar随后将在
    out/target/common/obj/JAVA\u LIBRARIES/\u intermediates/javalib.aar
    中生成

    注:

  • 创建aar需要javac而不是jack。因此,这也将在out/target/common/obj/JAVA_LIBRARIES/_intermediates/aar中生成classes.jar(与M之前的工具链一样),其中包含适合外部项目编译的javac编译类

  • 您可以在第行之前修改工具链文件@build/core/static\u java\u library.mk-add$(warning$(build\u aar))

    builded\u aar:=$(intermediates.COMMON)/javalib.aar

    这将显示当调用AOSP代码树的topdir makefile时,适合构建自身aar的所有模块


  • 要从AOSP构建系统构建.aar,需要为库创建make文件

    假设您要创建名为xyz.aar的库,其包名为com.xyz.xyz,并且您的库在内部使用名为abc.aar、包名为com.abc.abc的其他aar,则生成文件可能如下所示:-

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE_TAGS := optional
    
    LOCAL_MODULE := xyz
    
    LOCAL_STATIC_JAVA_LIBRARIES :=android-common \
        android-support-v4 \
        android-support-design \
        android-support-v7-appcompat \
        android-support-design-res \
        android-support-v7-cardview
    
    LOCAL_STATIC_JAVA_AAR_LIBRARIES:= abc
    
    LOCAL_SRC_FILES := $(call all-java-files-under, java)
    
    res_dirs := res \
    
    LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs)) \
        prebuilts/sdk/current/support/v7/cardview/res \
        prebuilts/sdk/current/support/v7/appcompat/res \
        prebuilts/sdk/current/support/design/res \
    
    LOCAL_AAPT_FLAGS := \
        --auto-add-overlay \
        --extra-packages android.support.v7.cardview \
        --extra-packages android.support.v7.appcompat \
        --extra-packages android.support.design \
        --extra-packages com.abc.abc
    
    
    LOCAL_JACK_ENABLED := disabled 
    LOCAL_PROGUARD_ENABLED := disabled 
    
    include $(BUILD_STATIC_JAVA_LIBRARY)
    
    include $(CLEAR_VARS)
    
    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := all_static_libs
    
    include $(BUILD_MULTI_PREBUILT)
    
    include $(call all-makefiles-under,$(LOCAL_PATH))
    
    在上面的make file中,不要使用include$(BUILD\u STATIC\u AAR\u LIBRARY)使用include$(BUILD\u STATIC\u JAVA\u LIBRARY)并在变量LOCAL\u模块中设置AAR库名称

    要编译make文件,请使用以下命令

    >生成xyz out/target/common/obj/JAVA_库/xyz_中间产物/xyz.aar


    您的xyz.aar将位于out/target/common/obj/JAVA_LIBRARIES/xyz_intermediates/xyz.aar的位置。事实证明,它非常简单。 只需运行以下命令:

  • 首先构建JAR
    make out/target/common/obj/JAVA_LIBRARIES/YourLibName_mediates/javalib.jar
    此命令生成classes.jar、classes-full-debug.jar和构建AAR包所需的其他文件
  • 然后做AAR
    make out/target/common/obj/JAVA_LIBRARIES/YourLibName_mediates/javalib.aar
  • 注:

  • 如果有任何关于丢失的“R.txt”文件的消息,只需从“out/target/common/obj/JAVA_LIBRARIES/YourLibName_mediates/”的src目录复制它即可

  • 您不需要对Android.mk文件进行任何更改


  • 您好,我遇到一个错误:**没有规则使目标为'classes header.jar'。停。@TinyAngel检查第一个note@Shadow我不得不check@TinyAngel你的解决方案是什么?您能分享吗?@FarhanArRafi,在从Android.mk中删除AAPT标志后,成功生成了R.txt。谢谢