`
ai_longyu
  • 浏览: 478773 次
社区版块
存档分类
最新评论

Android下编译自己的库文件jar并在应用中调用

 
阅读更多
Android下编译自己的库文件jar并在应用中调用
2010年09月28日 星期二 下午 02:46
主要为了解决如下问题:
项目中使用了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>

分享到:
评论

相关推荐

    AndroidStudio-NDK开发 编译c代码提供so库和jar包 另外一个app调用,实例源码

    AndroidStudio-NDK开发 编译c代码提供so库和jar包 另外一个app调用,实例源码

    android @hide 隐藏API framework.jar

    android 4.2 需要调用 @hide 隐藏API 可用本包里重新编译过的jar包.必须将此jar包设置成优先于android.jar

    Unity与Android交互的适配包android-support-v4.jar,android-support-v7-appcompat.jar

    1、android-support-v4.jar,android-support-v7-appcompat.jar,非常实用的jar文件,不可缺少,兼容Android 对应版本,包中包含类许多我们可以调用的,如widget、view、util等等。 2、导入Unity或者Android Studio...

    android APK反编译工具Apktool

    2.到code.google上下载apktool.jar以及相关文件:http://code.google.com/p/android-apktool/downloads/list 包括apktool.jar和apktool的工具包 3.解压apktool-install-windows.zip到任意文件夹,把apktool.jar 到...

    Android将Activity打包成jar包供第三方调用

    Android将Activity打包成jar包供第三方调用,代码的核心是MResource这个类,利用反射根据资源名字获取资源ID

    安卓反编译文件所用到的工具及方法

    首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。 具体步骤: 1.首先将apk文件,将后缀改为zip,解压,得到其中的classes...

    Android.mk文件分析

    使用它来编译程序时,不管是动态库、可执行的二进制文件,还是Jar库、APK包,只要沿着一个简单的思路来做三大步就可以了:清除旧变量,设置新变量,调用编译函数。 明白了以后,发现Makefile语法不是问题,有很多...

    Android.mk引入第三方jar包和so库文件的方法

    主要介绍了Android.mk引入第三方jar包和so库文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java反编译工具dex2jar&amp;jd;-gui

    另外,Activity,Service,ContentProvider等会被android系统调用到的class是不会被混淆的。 &gt; 一、解压缩apk文件得到classes.dex文件 &gt; 二、使用附件的dex2jar.sh脚本将classes.dex转换为classes.dex.dex2jar.jar...

    解包打包android内核system.img文件所需工具

    因此需要将修改后的apk包再用dexopt-wrapper优化apk包后生成出odex文件,然后删除apk包里的classes.dex,并在相同目录下放置与apk包同名的odex文件。 按照原system目录的文件结构组织好后,目录复制到linux环境下...

    【PaddlePaddle】Java demo测试

    这里有一个脚本prepare_demo.bash可以自动拷贝so库、jar包和模型文件到android工程下对应的位置。 bash prepare_demo.bash arm64-v8a 注意这里选择你的android设备支持的架构。 虽然Paddle-Lite/lit

    Apk2Java V1.1 [Android软件全自动反编译工具] 最新版

    Android软件开发人员必备工具, 内嵌所有需要的反编译工具,在之前1.0版的基础上增加了格式化java源文件中的id绑定。本软件基于Windows .Net开发,所以需要已安装.net Framework 2.0. 反编译后的代码仅供学习参考。 ...

    反编译工具dex2jar-0.0.9.15 和jd-gui

    Windows系统调用bat文件,而MAC系统中则调用sh脚本即可。 1)将apk文件后缀名直接改为.zip,并解压。得到其中的classes.dex文件 ,它就是java源代码经过编译再通过dx工具打包而成的。 2)将classes.dex文件复制到dex...

    反编译Andoird工具集(附反编译步骤)

    类似Sun JavaMe的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    Delphi D10.X 在安卓APP开发中使用Jar包的注意事项

    请注意:这里是一些注意事项,或说“在开发过程中可能遇到的坑”,不是具体的怎么做JAR的调用开发。 需要准备的一些工具 工欲善其事必先利其器,以下这些工具对你开发会起到帮助作用的。当然,不用工具也是可以的,...

    PatchDroid 增量升级的Android客户端jar包

    so根据bspatch编译而成,可根据...导入patchdroid.jar,并把armeabi文件夹复制到项目的libs文件夹下。使用之前必须确保至少调用一次PatchClient.loadLib()。调用PatchClient的applyPatchToOwn或applyPatch方法即可。

    Apk2Java V1.0 [Android软件全自动反编译工具]

    功能步骤介绍: 自动从apk文件中抽取classes.dex文件; 自动反编译classess.dex文件生成jar文件;...自动调用jd-gui.exe打开jar文件; 自动另存为jd-gui打开的所有源码到src目录; 自动格式化xml文件;

    android_hide_api_6.0.jar

    android 6.0 需要调用 @hide 隐藏API 可用本包里重新编译过的jar包 替换sdk目录里面的android.jar 就可以了。

    Google Android SDK开发范例大全(完整版)

    每个 Android 应用程序都在 Dalvik VM 的一个实例中运行,这个实例驻留在一个由 Linux 内核管理的进程中,如下图所示。 图 2. Dalvik VM Android 应用程序由一个或多个组件组成: 活动 具有可视 UI 的应用...

Global site tag (gtag.js) - Google Analytics