如何制作Jar包并在android中调用jar包

如何制作Jar包并在android中调用jar包,第1张

千锋扣丁学堂Android开发学习为您解答:

jar包有两种,一种是纯粹的库功能,没有main入口函数,故无法直接执行;一种是包含main的可执行包!

如有hello/hello.java文件

$ cd hello/$ javac hello.java$ java Hello (Hello为类名,如果Hello类具有main函数的话,可以这么执行)

第一种jar包命令:

jar cvf hello.jar hello

或者

$ jar cvf hello.jar hello/*.class

通过如下命令查看两个jar的内容:

$ jar tf hello.jarMETA-INF/META-INF/MANIFEST.MFhello/hello/hello.class

显示结果是一样的。

对于第二种可执行jar包,方法其实可以跟第一种一样,然后再修改MANIFEST.MF文件。

在MANIFEST.MF文件中只需要添加一行:

Main-Class: 可执行主类全名(即包含main函数的类名称)

即可。

但也可以预先创建MANIFEST.MF文件,内容跟上面一样,让该文件与hello目录保持在同一级,然后:

$ jar cvfm hello.jar MANIFEST.MF hello

然后就可以通过:

$ java -jar hello.jar

运行了。

===================

在实际项目中,可能需要很多个类文件,建议每个类文件均放到一个独立的文件之中,文件名与该类名应一致,类的声明为“public class xxx”(当然也可以将很多个类放到同一个文件中,但只有一个类能声明成public(即与文件名一致的那个类),这将导致其它未声明为public的类 无法为其它程序调用)。

比如有两个位于同一目录的类文件(它们之间有调用关系),将会被打包成sp_sdk.jar作为库文件使用,文件目录关系如下:

$ ls -l sp/android/printer-rw-r--r-- 1 zwang zwang 944 2011-06-25 17:52 FontProperty.class-rw-r--r-- 1 zwang zwang 1319 2011-06-25 17:51 FontProperty.java-rw-r--r-- 1 zwang zwang 5498 2011-06-25 17:53 PrintGraphics.class-rw-r--r-- 1 zwang zwang 5751 2011-06-25 17:51 PrintGraphics.java

各个java文件的开头需要声明如下(否则其它文件无法import这两个类):

package sp.android.printer

然后编译命令是:

$ javac sp/android/printer/FontProperty.java $ javac sp/android/printer/PrintGraphics.java

注意编译的位置,因为各自已经声明了“package sp.android.printer”,所以直接进入到sp/android/printer/目录下是编译不过的。

然后生成jar文件:

$ tar cvf sp_sdk.jar sp

然后就可以创建测试程序调用该库了(测试程序里面就可以“import sp.android.printer.*”了)。

假如测试程序test.java与sp_sdk.jar同一目录,编译及运行命令:

$ javac test.java$ java Test

如果不在同一目录,编译及运行命令:

$ javac -classpath .:/path/to/sp_sdk.jar test.java$ java -cp .:/path/to/sp_sdk.jar Test

如果调用第三方jar包的资源文件,在制作jar包和告诉别人如何调用你的jar包时经常用到。通常有两种方法,具体如下:

1)在应用程序端访问第三方jar包里面的raw文件,方法如下:

InputStream

is=org.hisense.facerecog.R.class.getResourceAsStream("data.xml")

File cascadeDir = this.getDir("cas",

Context.MODE_PRIVATE)

mCascadeFile = new File(casDir,

"data.xml")

FileOutputStream os = new

FileOutputStream(mCascadeFile)

其中org.hisense.facerecog.R为jar包中资源文件R.java的路径,this为当前应用程序环境。

2)在第三方jar包中直接访问其资源文件,将其拷贝到应用程序端,需要给出应用程序环境:Context

context

方法如下:

InputStream is =

this.getClass().getResourceAsStream("/res/raw/ data .xml")

File cascadeDir = context.getDir("cas",

Context.MODE_PRIVATE)

mCascadeFile = new File(casDir,

" data.xml")

FileOutputStream os = new

FileOutputStream(mCascadeFile)

其中this为第三方jar中的类运行环境,context为应用程序环境。

两中方法最后都会在应用程序根目录下生成cas/data.xml文件,对应于第三方jar包中的/res/raw/data.txt文件


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7807500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存