android 源码下编译可供第三方应用使用的JAR包

简介: android 源码下编译可供第三方应用使用的JAR包

平台


RK3288 + Android 7.1


概述


增加供第三方式应用调用的SDK接口, 并以JAR包的方式提供全应用开发者.


实现


增加JAVA代码并编写Android MK

Android.mk, JAVA 代码忽略

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
#LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVA_LIBRARIES := core-oj core-libart framework
LOCAL_SRC_FILES := $(call all-java-files-under, java)
LOCAL_MODULE := sdkapi
#LOCAL_DX_FLAGS := --core-library
include $(BUILD_JAVA_LIBRARY)


修改源码MK文件, 增加编译模块sdkapi

diff --git a/build/target/product/core_minimal.mk b/build/target/product/core_minimal.mk
index 4674add..cc4a08b 100755
--- a/build/target/product/core_minimal.mk
+++ b/build/target/product/core_minimal.mk
@@ -100,7 +100,10 @@ PRODUCT_BOOT_JARS := \
     voip-common \
     ims-common \
     apache-xml \
    org.apache.http.legacy.boot \
+    sdkapi \


重新source后,编译模块mmm frameworks/base/sdkapi/

android@server:~/codes/rk3288_n712$ ll out/target/common/obj/JAVA_LIBRARIES/sdkapi_intermediates/
total 56
drwxrwxr-x   4 android android  4096 10月 26 10:56 ./
drwxrwxr-x 329 android android 20480 10月 26 10:55 ../
-rw-rw-r--   1 android android  4492 10月 26 10:56 classes.dex
-rw-rw-r--   1 android android  6922 10月 26 10:56 classes.jack
-rw-rw-r--   1 android android     0 10月 26 10:56 jack_res_jar_flags
drwxrwxr-x   2 android android  4096 10月 26 10:56 jack-rsc/
-rw-rw-r--   1 android android    78 10月 26 10:55 jack-rsc.java-source-list
-rw-rw-r--   1 android android  2745 10月 26 10:56 javalib.jar
drwxrwxr-x   2 android android  4096 10月 26 10:56 with-local/


未找到相应可用JAR包(classes.jar), 重新执行make

[ 27% 29/107] Check package name for  out/target/common/obj/JAVA_LIBRARIES/cor...sses.jar  out/target/common/obj/JAVA_LIBRARIES/xsapi_intermediates/classes.jar
FAILED: /bin/bash -c "(build/core/tasks/check_boot_jars/check_boot_jars.py build/core/tasks/check_boot_jars/package_whitelist.txt  out/target/common/obj/JAVA_LIBRARIES/core-oj_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/okhttp_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/core-junit_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/openapi_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/voip-common_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/ims-common_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/apache-xml_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/org.apache.http.legacy.boot_intermediates/classes.jar  out/target/common/obj/JAVA_LIBRARIES/sdkapi_intermediates/classes.jar  ) && (mkdir -p out/target/common/obj/PACKAGING/boot-jars-package-check_intermediates/ && touch out/target/common/obj/PACKAGING/boot-jars-package-check_intermediates/stamp )"
Error: out/target/common/obj/JAVA_LIBRARIES/sdkapi_intermediates/classes.jar: unknown package name of class file com/sdkapi/tools/DeviceApi.class


编译出错, LOG中的信息有三点


build/core/tasks/check_boot_jars/package_whitelist.txt

out/target/common/obj/JAVA_LIBRARIES/sdkapi_intermediates/classes.jar

unknown package name of class file com/sdkapi/tools/DeviceApi.class

第三点说明编译时找不到类, 经查证后, 发现跟第 1 点的文件相关.

修改

android@server:~/codes/rk3288_n712$ git diff build
diff --git a/build/core/tasks/check_boot_jars/package_whitelist.txt b/build/core/tasks/check_boot_jars/package_whitelist.txt
old mode 100644
new mode 100755
index 3cb6e28..46870a9
--- a/build/core/tasks/check_boot_jars/package_whitelist.txt
+++ b/build/core/tasks/check_boot_jars/package_whitelist.txt
@@ -109,7 +109,8 @@ dalvik\..*
 libcore\..*
 android\..*
 com\.android\..*
-
+com\.sdkapi\.tools
 ###################################################
 # core-junit.jar


增加 com.sdkapi.tools 到白名单后, 再次执行make, 编译成功.


查看输出文件

android@server:~/codes/rk3288_n712$ ll out/target/common/obj/JAVA_LIBRARIES/sdkapi_intermediates/
total 72
drwxrwxr-x   5 android android  4096 10月 26 11:00 ./
drwxrwxr-x 330 android android 20480 10月 26 11:00 ../
drwxrwxr-x   3 android android  4096 10月 26 11:00 classes/
-rw-rw-r--   1 android android  4492 10月 26 10:56 classes.dex
-rw-rw-r--   1 android android  3290 10月 26 11:00 classes-full-debug.jar
-rw-rw-r--   1 android android  6922 10月 26 10:56 classes.jack
-rw-rw-r--   1 android android  3290 10月 26 11:00 classes.jar
-rw-rw-r--   1 android android  3290 10月 26 11:00 classes-jarjar.jar
-rw-rw-r--   1 android android     0 10月 26 10:56 jack_res_jar_flags
drwxrwxr-x   2 android android  4096 10月 26 10:56 jack-rsc/
-rw-rw-r--   1 android android    78 10月 26 10:55 jack-rsc.java-source-list
-rw-rw-r--   1 android android  2745 10月 26 10:56 javalib.jar
drwxrwxr-x   2 android android  4096 10月 26 10:56 with-local/


将classes.jar文件拷贝出来发送给应用开发人员即可.


扩展


android 修改新增jar 路径

Android6.0上frameworks增加代码编译错误

[android6.0]添加System Jar记录


相关文章
|
3月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
273 1
|
3月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
95 0
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
88 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
3月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
466 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
3月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
139 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
3月前
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
120 0
|
3月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
201 0
|
4月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
470 2
[JarEditor]可直接修改jar包的IDEA插件
下一篇
无影云桌面