zoukankan      html  css  js  c++  java
  • Android 类库打包、发布方法

      开发Android应用的时候,对于可用于多个应用的公用的部分,或是打算发布给第三方进行应用集成的部分,要把这部分打包成类库怎么做呢?
      Android应用使用ADT打包成apk,apk中包含了运行程序所需要的一切,包括:class、asset、res、AndroidManifest.xml等。而对于类库项目(library project),ADT生成的jar包里只包含编译生成的class文件,不包含res资源文件,res只能在应用项目打包apk的时候打进apk包。

      那考虑自行导出jar如何? 针对类库项目(library project)执行导出(export),导出时把res打上勾,这样导出的jar包里确实包含了res下的资源文件。很不幸,经反复试验得知,即使在jar包里包含了res,目标应用项目在编译时仍然不会对jar包里的res进行处理,打成apk包时是不会包含jar里的res的。这样一来,通过在jar包里包含res以供目标应用项目使用的路走不通了。

    先做个总结:
      1. android类库(library project)能支持打包成jar,并且jar里的字节码类文件能够成功被打进目标应用项目的apk包里。如果类库中不包含activity等需要界面资源的内容,或者在类库中手工读取资源,而不使用ADT的从res下读取资源的机制,这个类库jar的使用完全没问题,不需特别关注。
      2. res下的资源文件打进jar包没有意义,目标应用项目在打apk包时不会从jar中读取res打进apk。猜测不支持从jar中读res的可能的原因是担心资源名与目标应用项目中重复(纯属个人猜测)。

    打不成jar包,直接把源码给出去又不合适,怎么办?

      下面是一个办法:
      1. 开发类库项目(library project,即Project -> Properties -> Android -> Check "Is Library"),正常编译,生成jar包(在bin下,jar中只包含src下的类生成的字节码,不包含gen下自动生成的类,也不包含res)。假设这个类库叫做mylib,生成的jar名称为mylib.jar。
      2. 新建一个类库项目(library project,同样设置 Project -> Properties -> Android -> Check "Is Library" ),假设这个类库叫做mylibdeploy,设置其命名空间与mylib相同。在mylibdeploy下新建一个libs目录,把mylib.jar导入到libs目录下。再将mylib项目下的assets、res目录复制到mylibdeploy下。
      3. 开发目标应用(常规Android project,不勾选“Is Library”),在这个目标应用项目中设置对mylibdeploy的引用。引用方法如下: 打开android应用设置 Project -> Properties -> Android , 点“Add...”按钮选择mylibdeploy。经如此设置后,在目标应用项目中就可以引用mylib中的类了。

      4.    最后编译、导出成apk,这个apk里会包含mylibdeploy下的res,也会包含相应的gen下自动生成的类编译后的文件。

      对于需要向外发布的类库,将mylibdeploy直接发出。可以将其压缩打包成zip或者其它的什么格式,只要使用方能解开就行。使用方(目标应用开发方)按照第3步的方式引用mylibdeploy,就能正常使用mylib.jar,正常打包apk。

      当然,在打包jar(上例中的mylib.jar)时,可以根据需要对其进行部分混淆生成不易被反编译的jar包。

      这种发布包的办法并不完美,期待ADT的改进,未来也许可以直接发布JAR。

    参考:
    [1]. Managing Projects from Eclipse with ADT
      http://developer.android.com/tools/projects/projects-eclipse.html

    [2]. Android Developer Tools
      http://developer.android.com/tools/help/adt.html

    [3]. How to export the project as a JAR file
      http://groups.google.com/group/android-developers/browse_thread/thread/bc4b509765bd1956

    [4]. How to create Android library in Eclipse?
      http://groups.google.com/group/android-developers/browse_thread/thread/ce546a393cbb8bcf

    [5]. Android类库打包方法探究

      http://www.cnblogs.com/wangchuanju/articles/android_lib_jar.html

  • 相关阅读:
    1063. Set Similarity
    A1047. Student List for Course
    A1039. Course List for Student
    最大公约数、素数、分数运算、超长整数计算总结
    A1024. Palindromic Number
    A1023. Have Fun with Numbers
    A1059. Prime Factors
    A1096. Consecutive Factors
    A1078. Hashing
    A1015. Reversible Primes
  • 原文地址:https://www.cnblogs.com/yaozhongxiao/p/3995402.html
Copyright © 2011-2022 走看看