android制作jar包:

新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmanifest.xml和res文件夹,就可以了。否则在调用jar包的时候会出现“Error generating final archive: Found duplicate file for APK: AndroidManifes”这个错误。


如果在android用调用jar包,需要在工程的属性的Java build path中点击Add external JARS(也可以选择Add Library)添加jar包,在程序中调用调用jar包中的函数即可。

添加jar包:(jar在windows下编译了就可用了,不需要交叉编译,这也体现了java一次编译跨平台的特点

也可以在Java build path中点击Add Library添加jar包(可参考Android中引入第三方Jar包的方法,测试可行(http://www.havenliu.com/android/548.html))



在程序中调用jar包中的方法 (本文中 小写的hello是包名,大写的Hello类名,test是方法):






-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




制作可执行的的jar包需要添加MANIFEST.MF。不需要执行的jar包,不需要MANIFEST.MF,只需要把用的class文件打包就可以了。 (jar cvf a.jar hello.class hello2.class)

制作可执行的的jar包,注意MANIFEST.MF  ,M(必须大写)ain-C(必须大写)lass:(必须有个空格)包名.类名(必须回车),必须回车

否则运行jar包(java -jar a.jar)时候会出现Fail to load main-class manifest attribute from a.jar" 这个错误。

-----------------------------------------------------------------------------------------------------------------------------------

其他文档:

jar包中资源问题总结(http://blog.csdn.net/yy4040/article/details/6641688)

之前提出来一个问题,参见

http://topic.csdn.net/u/20110630/14/ad71749c-631b-4fef-950d-92d5d6983628.html

分析结果如下:

1、jar被包含进其他项目后,最终生成的apk文件中包含jar中的资源(目录结构也是一样的),这个可以通过zip打开jar和apk查看。

2、jar中的资源应该也是被jvm管理起来的,但是由于其实际id与原始jar项目中产生的id不一致,导致使用原始jar项目中的资源id不能访问到实际资源。只能通过getClass().getClassLoader().getResourceAsStream()的方式进行访问。


对于使用jar方式进行组件开发,有以下需要注意:

1. jar包中一般只包含代码不包含资源。

2. 如果要在jar中包含资源,则资源文件不应该放在默认的res目录下(因为导入其他项目后可能出现重名冲突),应该在package目录下创建专用的资源目录,如此通过pakcage的不重名来确保导入后资源不冲突。同时,jar中代码不能直接使用R类中资源id进行访问,应该通过getClass().getClassLoader().getResourceAsStream()进行加载。

3. 字付串资源可以定义成常量的方式来使用。



Android下编译自己的库文件jar并在应用中调用 (转自http://hi.baidu.com/gaogaf/item/cef2285e2372bb444fff2046) 主要为了解决如下问题:
项目中使用了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。
在文件中加入以下内容:
<?xml version="1.0" encoding="UTF-8"?>


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]



以下为制作可执行jar包方法:

转自:http://blog.chinaunix.net/uid-20640731-id-60041.html

今天试了一下制作可执行的Jar文件的方法。 具体如下: 首先,创建一个项目文件夹jartest,在jartest目录中建立hello包。 其次,按照以下步骤: 1、在目录hello下编写Hello.java(自己的类名)文件。 示例内容如下: package hello;
public class Hello {
 public static void main(String args[]){
               System.out.println("Hello World!");
}
}   2、编译生成hello.class文件。   3、在hello的同级目录建立MANIFEST.MF(名字不限制)文件。 示例内容如下: Main-Class: hello.Hello 此文件最为重要,要点有: M(必须大写)ain-C(必须大写)lass:(必须有个空格)包名.类名(必须回车)   4、运行明令 jar cvfm a.jar MANIFEST.MF hello/ 生成a.jar   5、测试运行java -jar a.jar   6、输出结果: Hello World! 完整的运行过程如下: ================================================== D:Program FilesJavasrcjartesthello>javac Hello.java D:Program FilesJavasrcjartesthello>cd.. D:Program FilesJavasrcjartest>jar cvfm a.jar MANIFEST.MF hello/
标明清单(manifest)
增加:hello/(读入= 0) (写出= 0)(存储了 0%)
增加:hello/Hello.class(读入= 422) (写出= 289)(压缩了 31%)
增加:hello/Hello.java(读入= 136) (写出= 108)(压缩了 20%) D:Program FilesJavasrcjartest>java -jar a.jar
Hello World! D:Program FilesJavasrcjartest> ================================================== 编译后可以将Hello.java删除。

按照下文http://blog.chinaunix.net/uid-20640731-id-60041.html测试了,成功。


制作可执行的的jar包需要添加MANIFEST.MF。不需要执行的jar包,不需要MANIFEST.MF,只需要把用的class文件打包就可以了。 (jar cvf a.jar hello.class hello2.class)

制作可执行的的jar包,注意MANIFEST.MF  ,M(必须大写)ain-C(必须大写)lass:(必须有个空格)包名.类名(必须回车),必须回车

否则运行jar包(java -jar a.jar)时候会出现Fail to load main-class manifest attribute from a.jar" 这个错误。


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




制作可执行的的jar包需要添加MANIFEST.MF。不需要执行的jar包,不需要MANIFEST.MF,只需要把用的class文件打包就可以了。 (jar cvf a.jar hello.class hello2.class)

制作可执行的的jar包,注意MANIFEST.MF  ,M(必须大写)ain-C(必须大写)lass:(必须有个空格)包名.类名(必须回车),必须回车

否则运行jar包(java -jar a.jar)时候会出现Fail to load main-class manifest attribute from a.jar" 这个错误。

-----------------------------------------------------------------------------------------------------------------------------------

更多相关文章

  1. 在Android中自动实现横竖屏切换的问题
  2. Linux 下使用 NDK 编译 protobuf 2.6.1
  3. Android(安卓)android.uid.shared MK编译或eclipse编译后签名
  4. Android(安卓)实现简单的插件化模块化.
  5. Android(安卓)SDK Manager无法更新的解决
  6. Android开发常用的linux命令、命令行操作、抓包等
  7. android Immutable bitmap passed to Canvas constructor异常
  8. Android(安卓)studio 下的svn配置使用
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android--使用XMLPull解析xml
  2. Android图片裁剪——第三方开源框架Andro
  3. 关于Android蓝牙设备的连接使用
  4. Android(安卓)Studio二维码扫描
  5. android apns push 不需要注册邮件的,简
  6. android SQLite 管理工具,firefox插件下载
  7. Android(安卓)异步任务队列实现
  8. Android状态栏合集-管你透不透明
  9. android ContentResolver详解
  10. Android用户界面开发:Fragment