如何在 android 框架 [AOSP] java 文件中使用像 jsoup 库这样的外部 jar(不是 Android Studio 或 Java IDE)
How to use external jar like jsoup library in android framework [AOSP] java files (NOT Android Studio or Java IDE)
我希望在 Android 开源项目中使用 jsoup 库。
为此我做了两件事:-
第 1 步:
- 创建了一个通用的目录jsoup如下:
[android]prebuilts/misc/common/jsoup/
- 在这个 jsoup 文件夹中,我添加了 jsoup-1.13。1.jar 下载自:https://jsoup.org/download
- 在同一个 jsoup 文件夹中,我添加了另一个文件
Android.mk
{如下所示的名称和代码:}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jsoup
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := jsoup-1.13.1.jar
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_DEX_PREOPT := false
include $(BUILD_PREBUILT)
第 2 步:
- 转到另一个make文件如下:[android]/frameworks/base/Android.mk
- 在这个 Android.mk 文件中,我添加了如下所示的行(在设置 LOCAL_JAVA_LIBRARIES 变量之后):
LOCAL_STATIC_JAVA_LIBRARIES += jsoup
问题:
- 我添加了一个文件sample.java如下-
[android]frameworks/base/services/core/java/com/android/server/am/sample.java
- 在这个 sample.java 文件中,我有如下导入语句-
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
- 当我构建整个修改后的 android 代码时,出现以下错误并且构建失败:
frameworks/base/services/core/java/com/android/server/am/sample.java:48: error: package org.jsoup does not exist
frameworks/base/services/core/java/com/android/server/am/sample.java:49: error: package org.jsoup.nodes does not exist
frameworks/base/services/core/java/com/android/server/am/sample.java:50: error: package org.jsoup.select does not exist
- 我什至尝试使用提及 Android.bp 而不是 Android.mk 的方法,但同样的构建错误。
- 此外,我对 jar 文件的命名感到困惑,因为 import 语句包含 org.jsoup... 但 jar 文件本身只是 jsoup。 (我是否必须更改导入语句,如 import jsoup ... 或将 jar 文件的名称更改为 org.jsoup...)
- 除涉及 Android.mk 或 Android.bp 之外的任何其他方法也是高度可接受的。
拜托,我不知道在 AOSP 中包含外部 jar 文件。该代码在 IntelliJ IDE Java 中本地运行良好。非常感谢任何帮助。提前致谢。
您可以将您的解决方案基于已添加到 AOSP 中的其他一些 jar。
例如,在 external/zxing/
:
中查看 ZXING 库的 Android.bp
java_import {
name: "zxing-core-1.7",
host_supported: true,
installable: false,
jars: ["core.jar"],
}
再看看另一个Makefile上的用法: :
LOCAL_STATIC_JAVA_LIBRARIES := \
androidx-constraintlayout_constraintlayout-solver \
androidx.lifecycle_lifecycle-runtime \
androidx.lifecycle_lifecycle-extensions \
guava \
jsr305 \
carsettings-contextual-card-protos-lite \
carsettings-log-bridge-protos-lite \
carsettings-logtags \
statslog-settings \
zxing-core-1.7
最后,根据您要添加的文件的路径 frameworks/base/services/core/java/com/android/server/am/sample.java
,您将库添加到错误的 makefile。
您更改的那个 (frameworks/base/Android.mk
) 是为了制作 framework.jar
,而您试图在 services.jar
上添加一个 class
要修改的正确生成文件是:frameworks/base/services/core/Android.bp
基于 ENTIRELY 根据 @RickSanchez
提供的答案,我按照他的答案的指导进行了这些步骤,提出了一个构建成功:
- 创建目录:
[android]prebuilts/misc/common/jsoup/
- 在此目录
jsoup
文件夹中,我包含了从 https://jsoup.org/download 下载的蓝图文件 Android.bp
和 jsoup-1.13.1.jar
- 借助 Blueprint Soong Flag 描述信息 here,
我创建了上面提到的
Android.bp
如下:
Android.bp
java_import {
name: "jsoup-1.13.1",
host_supported: true,
installable: false,
jars: ["jsoup-1.13.1.jar"],
}
下一个任务是将上面创建的本地蓝图文件的引用提供给 frameworks/base/services/core/Android.bp
中的 Android.bp
为此,我做了以下编辑:
在 Android.bp
中添加以下内容(如果存在)或修改以下块 -
static_libs: [
"jsoup-1.13.1", /*use jsoup lib */
"android.hardware.authsecret-V1.0-java",
....
....
],
现在构建成功,sample.java 可以成功使用 jsoup 库
我希望在 Android 开源项目中使用 jsoup 库。 为此我做了两件事:-
第 1 步:
- 创建了一个通用的目录jsoup如下:
[android]prebuilts/misc/common/jsoup/
- 在这个 jsoup 文件夹中,我添加了 jsoup-1.13。1.jar 下载自:https://jsoup.org/download
- 在同一个 jsoup 文件夹中,我添加了另一个文件
Android.mk
{如下所示的名称和代码:}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jsoup
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := jsoup-1.13.1.jar
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_DEX_PREOPT := false
include $(BUILD_PREBUILT)
第 2 步:
- 转到另一个make文件如下:[android]/frameworks/base/Android.mk
- 在这个 Android.mk 文件中,我添加了如下所示的行(在设置 LOCAL_JAVA_LIBRARIES 变量之后): LOCAL_STATIC_JAVA_LIBRARIES += jsoup
问题:
- 我添加了一个文件sample.java如下- [android]frameworks/base/services/core/java/com/android/server/am/sample.java
- 在这个 sample.java 文件中,我有如下导入语句-
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
- 当我构建整个修改后的 android 代码时,出现以下错误并且构建失败:
frameworks/base/services/core/java/com/android/server/am/sample.java:48: error: package org.jsoup does not exist
frameworks/base/services/core/java/com/android/server/am/sample.java:49: error: package org.jsoup.nodes does not exist
frameworks/base/services/core/java/com/android/server/am/sample.java:50: error: package org.jsoup.select does not exist
- 我什至尝试使用提及 Android.bp 而不是 Android.mk 的方法,但同样的构建错误。
- 此外,我对 jar 文件的命名感到困惑,因为 import 语句包含 org.jsoup... 但 jar 文件本身只是 jsoup。 (我是否必须更改导入语句,如 import jsoup ... 或将 jar 文件的名称更改为 org.jsoup...)
- 除涉及 Android.mk 或 Android.bp 之外的任何其他方法也是高度可接受的。
拜托,我不知道在 AOSP 中包含外部 jar 文件。该代码在 IntelliJ IDE Java 中本地运行良好。非常感谢任何帮助。提前致谢。
您可以将您的解决方案基于已添加到 AOSP 中的其他一些 jar。
例如,在 external/zxing/
:
java_import {
name: "zxing-core-1.7",
host_supported: true,
installable: false,
jars: ["core.jar"],
}
再看看另一个Makefile上的用法: :
LOCAL_STATIC_JAVA_LIBRARIES := \
androidx-constraintlayout_constraintlayout-solver \
androidx.lifecycle_lifecycle-runtime \
androidx.lifecycle_lifecycle-extensions \
guava \
jsr305 \
carsettings-contextual-card-protos-lite \
carsettings-log-bridge-protos-lite \
carsettings-logtags \
statslog-settings \
zxing-core-1.7
最后,根据您要添加的文件的路径 frameworks/base/services/core/java/com/android/server/am/sample.java
,您将库添加到错误的 makefile。
您更改的那个 (frameworks/base/Android.mk
) 是为了制作 framework.jar
,而您试图在 services.jar
要修改的正确生成文件是:frameworks/base/services/core/Android.bp
基于 ENTIRELY 根据 @RickSanchez
提供的答案,我按照他的答案的指导进行了这些步骤,提出了一个构建成功:
- 创建目录:
[android]prebuilts/misc/common/jsoup/
- 在此目录
jsoup
文件夹中,我包含了从 https://jsoup.org/download 下载的蓝图文件 - 借助 Blueprint Soong Flag 描述信息 here,
我创建了上面提到的
Android.bp
如下:
Android.bp
和 jsoup-1.13.1.jar
Android.bp
java_import {
name: "jsoup-1.13.1",
host_supported: true,
installable: false,
jars: ["jsoup-1.13.1.jar"],
}
下一个任务是将上面创建的本地蓝图文件的引用提供给
中的frameworks/base/services/core/Android.bp
Android.bp
为此,我做了以下编辑: 在
Android.bp
中添加以下内容(如果存在)或修改以下块 -static_libs: [ "jsoup-1.13.1", /*use jsoup lib */ "android.hardware.authsecret-V1.0-java", .... .... ],
现在构建成功,sample.java 可以成功使用 jsoup 库