Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39388
  • 博文数量: 25
  • 博客积分: 605
  • 博客等级: 中士
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-03 21:57
文章分类

全部博文(25)

文章存档

2012年(22)

2011年(3)

我的朋友

分类: LINUX

2012-05-01 11:08:04

其实如果不用eclipse的话不用这么复杂。但有几点要注意,

这句要放在    里。

还有就是LOCAL_MODULE_TAGS的问题。 这2个低级错误搞了我三四天

 

 

项目中使用了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、为工程添加注册文件 
在库文件工程的根目录下创建以下文件: 
.xml 
该文件是用来向系统注册库用的,名称可以自己定,在下面假设该文件为 mylibxml.xml。 
在文件中加入以下内容: 
 
 
name="com.mytest.lib" 
file="/system/framework/mylib.jar" 
/> 
 
其中的 library 用于将其下的 name 和 file 两个属性关联起来,name 的值后边会用到。 
这里的 name 指定为工程的包名。 
这里的 file 指定为库文件的存放路径,应该是: 
/system/framework/.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 按照目录结构拷贝到以下目录: 
/packages/apps/
运行以下命令: 
$ cd  
$ . ./build/envsetup.sh 
$ mmm packages/apps/ 
将会生成一个 .jar 文件和一个 .xml 文件。 
以上两个文件是应用程序在运行时需要用到的。 
调试应用前,需要将两个文件拷贝到设备的相应目录上去: 
.jar 文件:/system/framework/ 
.xml 文件:/system/etc/permissions/ 
拷贝到设备使用以下命令: 
$ sudo adb push <.jar or .xml file path>  
拷贝完以后需要重启设备。 

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 下添加以下内容: 
android:name="com.mytest.lib"> 
 
其中的 :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 
按照目录结构拷贝到以下目录: 
/packages/apps/
引用的 .jar 库文件并不需要。 
运行以下命令: 
$ cd  
$ . ./build/envsetup.sh 
$ mmm packages/apps/ 
将会生成一个 .apk 文件。 
运行以下命令将应用安装到设备: 
$ sudo adb install [-r]

阅读(279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~