主要为了解决如下问题:
项目中使用了Android未公开的API,在Eclipse下会有红叉显示。
不同的项目抽出相同部分的代码共用。
必需的前提条件:
需要有Android源代码,编译的库文件主要是封装未公开API或者共用代码。
工程1:Java库文件工程
该工程最终会生成以jar结尾的Java库文件,并会被安装到设备的以下目录:
/system/framework/
另外还会安装相关库文件的说明文件,使系统能够找到库文件:
/system/etc/permissions/
1、建立工程
在Eclipse下新建一个空的Java工程。
在工程的
Java Build Path -> Libraries
下,导入Android的SDK中的 android.jar 库。
为工程创建相应的包和java文件。
下面假设包路径为 com.mytest.lib,最终生成的库为 mylib.jar。
2、为工程添加注册文件
在库文件工程的根目录下创建以下文件:
<permission xml file name>.xml
该文件是用来向系统注册库用的,名称可以自己定,在下面假设该文件为 mylibxml.xml。
在文件中加入以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<permissions>
<library
name="com.mytest.lib"
file="/system/framework/mylib.jar"
/>
</permissions>
其中的 library 用于将其下的 name 和 file 两个属性关联起来,name 的值后边会用到。
这里的 name 指定为工程的包名。
这里的 file 指定为库文件的存放路径,应该是:
/system/framework/<jar file name>.jar
3、为工程添加makefile文件:
在库文件工程的根目录下创建以下文件:
Android.mk
该文件是用来编译工程的,名称固定。
在文件中加入以下内容:
LOCAL_PATH:= $(call my-dir)
#MAKE_JAR
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := mylib
include $(BUILD_JAVA_LIBRARY)
#MAKE_XML
include $(CLEAR_VARS)
LOCAL_MODULE := mylibxml.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
其中,MAKE_JAR 部分的 LOCAL_MODULE 部分指定为想要生成的库文件的名字,
需要与 .xml 文件中的 library 下的 file 部分一致。
其中,MAKE_XML 部分的 LOCAL_MODULE 部分指定为用于注册库的 .xml 文件。
4、生成应用程序可用的库文件
此时的工程,如果使用了未公开的API的话,在eclipse下应该是有红叉的。
这些错误不用管,只需要保证程序在Android的源码下能够编译通过即可。
将工程的java文件以及 .xml 和 .mk 按照目录结构拷贝到以下目录:
<Android source folder>/packages/apps/<project name>/
运行以下命令:
$ cd <Android source folder>
$ . ./build/envsetup.sh
$ mmm packages/apps/<project name>
将会生成一个 .jar 文件和一个 .xml 文件。
以上两个文件是应用程序在运行时需要用到的。
调试应用前,需要将两个文件拷贝到设备的相应目录上去:
.jar 文件:/system/framework/
.xml 文件:/system/etc/permissions/
拷贝到设备使用以下命令:
$ sudo adb push <.jar or .xml file path> <path in device>
拷贝完以后需要重启设备。
5、生成在Eclipse可以引用的库文件
在源码下编译的 .jar 文件在Eclipse中是不能使用的,需要单独生成。
在Eclipse下选中工程根目录,选择文件菜单中的导出Export,然后选择jar类型。
导出为jar文件时,只需要选中相应的java文件即可。
这样生成的jar文件仅仅供应用程序在Eclipse下使用,除非是以下情况:
库文件没有使用非公开的API,并且,
应用本身在Eclipse下编译就能够使用,不需要到源码下编译。
暂且为该文件命名为mylibtemp.jar
工程2:Android应用工程
1、建立工程
新建一个Android工程。
在工程的
Java Build Path -> Libraries
下,导入 mylibtemp.jar 库。
使用 mylibtemp.jar 中的类编写代码。
下面假设最后生成的应用程序文件为 myapp.apk。
2、编辑AndroidManifest.xml文件
编辑工程根目录下的 AndroidManifest.xml 文件。
在 application 下添加以下内容:
<uses-library
android:name="com.mytest.lib">
</uses-library>
其中的 :name 表示所引用的库文件的包名。
其与库工程的 .xml 文件中的 name 应该是一致的。
这样在应用运行时就能够找到相应的 .jar 文件了。
如果引用了多个库,需要添加多个 uses-library 标签。
3、为工程添加makefile文件:
在库文件工程的根目录下创建以下文件:
Android.mk
该文件是用来编译工程的,名称固定。
在文件中加入以下内容:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_JAVA_LIBRARIES := mylib
LOCAL_PACKAGE_NAME := myapp
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
其中的 LOCAL_JAVA_LIBRARIES 表示程序会用到的库文件。
其名成与库工程下的 .mk 文件中 MAKE_JAR 部分下的 LOCAL_MODULE 应该是一致的。
其中的 LOCAL_PACKAGE_NAME 表示应用最后生成的名称。
4、编译应用程序
将工程的 src、res、assets 文件夹以及文件:
Android.mk 和 AndroidManifest.xml
按照目录结构拷贝到以下目录:
<Android source folder>/packages/apps/<project name>/
引用的 .jar 库文件并不需要。
运行以下命令:
$ cd <Android source folder>
$ . ./build/envsetup.sh
$ mmm packages/apps/<project name>
将会生成一个 .apk 文件。
运行以下命令将应用安装到设备:
$ sudo adb install [-r] <apk file path>
分享到:
相关推荐
本实例源码提供了完整的流程,展示了如何在Android Studio中进行NDK开发,编译C代码生成.so库和.jar包,并在另一个应用中调用。 首先,我们需要理解NDK的核心概念。NDK是一组工具,允许开发者使用C和C++编写部分...
以下是使用Android Studio编译JAR文件的详细步骤和相关知识点。 1. **修改build.gradle文件**: 在你需要打包成JAR的module的`build.gradle`文件中,需要添加一些额外的配置。通常,这个文件会包含关于项目构建...
在Android开发中,源码编译的jar包是开发者深入理解系统运作、定制化系统或者进行二次开发的重要工具。本文将详细阐述如何编译Android源码以生成`classes.jar`,以及这个过程中的关键知识点。 首先,让我们了解`...
标题中的“android @hide 隐藏API framework.jar”指的是一个针对Android 4.2(API级别17)版本的特殊处理,它涉及到了如何使用和理解Android系统中的隐藏API,并且提供了一个重新编译过的`framework.jar`文件,这个...
本文将详细介绍ZBar在Android中的应用,以及如何使用标准的SO库和JAR包。 ZBar是一个跨平台的条码图像处理库,支持多种条码格式,如EAN-13、UPC-A、Code 39、Interleaved 2 of 5等。它提供了Java和C++两种编程语言...
在编译完成后,我们可以在 Android 项目中使用 JNI 来调用.so 动态库中的 C/C++ 方法。 通过 JNI,我们可以在 Android 项目中调用.so 动态库中的 C/C++ 方法,实现与 native 代码的交互。这可以帮助我们实现更加...
而“Android端上传文件的jar包”则可能是一个包含了实现此类功能的预编译Java类库,方便开发者快速集成到自己的项目中。 这个jar包可能包含以下关键知识点: 1. **网络请求库**:上传文件通常需要一个网络请求库来...
此压缩包“GDAL 2.4.3 编译完成的Android库(包含so可直接用).zip”提供了GDAL 2.4.3版本针对Android平台编译好的库文件,其中包含了可以直接在Android应用中使用的.so动态链接库。 GDAL的核心功能是支持多种地理...
通过以上步骤,你就能在Android Studio中成功地通过jar调用jni so库。记住,正确管理和配置本地库对于避免运行时错误和提高应用性能至关重要。在实际项目中,可能还需要处理多平台兼容性、资源管理和错误处理等问题...
描述中提到的"jar包为自己编译",意味着开发者已经手动编译了与Spatialite相关的Java库(jsqlite.jar),这个库通常包含了访问和操作Spatialite数据库所需的API。开发者可能这样做是为了确保与特定Android环境的兼容...
`apktool.bat`是一个批处理文件,用于在命令行环境下调用Java的`apktool.jar`。在Windows上,你可以通过以下步骤操作: 1. 将`apktool.bat`和`apktool.jar`放置在同一目录下。 2. 打开命令提示符窗口,导航到该目录...
这个过程包括创建JAR文件以及在Android项目中引入和调用JAR库。下面将详细介绍如何操作。 首先,我们要理解什么是JAR文件。JAR(Java Archive)是Java平台特有的归档格式,它用于打包Java类文件和其他资源,便于...
"android+H5 的jar包"就是这种融合的一个体现,它通常包含了一些预编译的Java类库,用于帮助Android应用与H5页面进行交互。 在Android应用中集成H5,主要涉及以下几个关键技术点: 1. **WebView组件**:这是...
1. **添加依赖**:首先,需要将`libwebp.jar`添加到项目的`libs`目录,并在`build.gradle`文件中配置依赖,以便在编译时将其打包到APK中。 2. **处理JNI**:对于`libwebp.so`,需要在`jniLibs`目录下按照架构...
将这些jar包导入到Android项目的`libs`目录下,并在构建路径中包含它们,以便于项目编译和运行时使用。 总的来说,通过SMBJ库,Android开发者可以轻松地实现在Android设备上访问和操作Windows共享文件夹,实现跨...
`moffice-aidl.jar`通常包含了一些基础服务的AIDL接口定义,而`moffice-event-interface.jar`可能包含了事件监听相关的接口,使得开发者可以在自己的应用中接收到WPS的事件通知,例如文档加载完成、编辑状态改变等。...
在Android项目中,开发者可以将编译好的libyuv库集成到应用中,通过JNI(Java Native Interface)调用C++代码来实现高效视频处理。通常,这涉及到编写JNI接口,生成对应的头文件,然后在Java层创建对应的函数调用。 ...
这个"onnxruntime-android so文件"是该引擎的一部分,主要包含预编译的库文件,使得开发者能够在Android应用中集成ONNX Runtime,以执行优化过的ONNX模型。 1. ONNX(Open Neural Network Exchange):ONNX是一种...
标题“含有用户界面的JAR制作及其在Android项目中的使用”揭示了本次讨论的核心主题,即如何创建包含用户界面元素的Java Archive (JAR) 文件,并将其整合到Android应用程序开发中。这一过程对于开发者来说是相当实用...
在Android开发领域,为了保护应用程序的源代码不被轻易获取,开发者通常会将Java源代码编译成Dalvik Executable (DEX) 文件,这是一种优化过的字节码格式,用于在Android设备上运行。然而,有时候我们需要对已发布的...