将libs/中的jar文件添加到Android.mk

7

我差点在Adding a external jar reference in Android.mk中找到了答案,但还不太明白。

我的项目在libs/目录下包含commons-io-2.4.jar和jsch-0.1.49.jar。在eclipse中一切都很好地构建。现在我想编写一个Android.mk文件以自动构建我的项目。

我的Android.mk看起来像这样,但它无法工作。

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

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

LOCAL_PACKAGE_NAME := MyProject
LOCAL_CERTIFICATE := platform

LOCAL_STATIC_JAVA_LIBRARIES := jsch-0.1.49 commons-io-2.4

LOCAL_PROGUARD_FLAGS      := -include $(LOCAL_PATH)/proguard.flags

include $(BUILD_PACKAGE)

LOCAL_STATIC_JAVA_LIBRARIES := libs
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libs:jsch-0.1.49 libs:commons-io-2.4

include $(BUILD_MULTI_PREBUILT)

我确定只是我掌握的一些秘诀有误,但我找不出问题所在。

有没有关于Android.mk文件的好参考资料?我只找到了与ndk相关的教程。


你可以在这里找到关于AOSP构建系统如何工作的好参考资料:http://www.kandroid.org/online-pdk/guide/build_cookbook.html - Plinio.Santos
以上链接已失效。 - dgelormini
https://wladimir-tm4pda.github.io/porting/build_cookbook.html 可能是同样的东西。 - Edward Falk
2个回答

23

好的,经过几个小时的谷歌搜索和尝试,似乎已经找到了解决方案。
在此记录下来,以便其他人查找:

关键是要:

  1. 使用符号名称为要包含的库定义 LOCAL_STATIC_JAVA_LIBRARIES,例如 libjsch
  2. 执行 CLEAR_VARS (为什么?)
  3. LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES 定义为 libjsch:<path-to-jar-file>
  4. 包含 BUILD_MULTI_PREBUILT

(测试表明,任何符号名称(例如“foo”)都可以正常工作,只要它在两个声明中匹配即可。)

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

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

LOCAL_PACKAGE_NAME := MyProject

LOCAL_STATIC_JAVA_LIBRARIES := libjsch

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libjsch:libs/jsch-0.1.49.jar

include $(BUILD_MULTI_PREBUILT)

1
我该如何在 android.mk 中添加 .aar 文件? - ofskyMohsen
2
@ofskyMohsen,这个过程与这个答案相同,只需将LOCAL_STATIC_JAVA_LIBRARIES替换为LOCAL_STATIC_JAVA_AAR_LIBRARIES即可。 - Matt
请问如何导入libjsch库?类似于import.....的方式。 - Amruth A

7
非常感谢Edward Falk。我刚刚通过你给我的答案解决了我的问题,再次感谢。这是我的代码。 "lib" 这个关键词真是太让人头疼了。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := MDM

LOCAL_STATIC_JAVA_LIBRARIES := libandroid-async-http libgcm libjson-simple


LOCAL_JAVA_LIBRARIES += telephony-common mms-common

LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libandroid-async-http:libs/android-async-http-1.4.4.jar libgcm:libs/gcm.jar  libjson-simple:libs/json-simple-1.1.1.jar 

include $(BUILD_MULTI_PREBUILT)

请问您能告诉我如何导入json-simple,例如像这样导入......吗? - Amruth A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接