开发者社区> 古镇月影> 正文

android 打包 第三方jar

简介: 引用:http://snmoney.blog.163.com/blog/static/440058201181011468397/ 发现网上有现成答案的,参考了以下这篇http://jojol-zhou.iteye.com/blog/729254虽然原作者是针对较早期的 Android 1.5(API-3)写的,但原理和用法相同。
+关注继续查看

引用:http://snmoney.blog.163.com/blog/static/440058201181011468397/

发现网上有现成答案的,参考了以下这篇
http://jojol-zhou.iteye.com/blog/729254

虽然原作者是针对较早期的 Android 1.5(API-3)写的,但原理和用法相同。

用到的路径和工具包括(容我偷个懒直接把部分的批处理内容直接cp出来了):

SET WORK_SPACE=E:\code\autopack_demo
SET PKG_PATH=com\xxx\apk\autopack_demo
SET JAVA_SPACE=D:\Progra~2\Java\jdk1.6.0_21\bin
SET ANDROID_SPACE=E:\android-sdk-windows
SET JAVAC=%JAVA_SPACE%\javac.exe
SET AAPT=%ANDROID_SPACE%\platform-tools\aapt.exe
SET DX=%ANDROID_SPACE%\platform-tools\dx.bat
REM 输出的路径
SET OUT_FOLDER=...
SET OUT_CLASS_FOLDER=...


依葫芦画瓢写批处理试运行,发现卡在一个问题上:项目中部分的功能模块引用了第三方的 jar 里的类

在编译的时候报错, 
javac 时凡事引用到jar的类的地方都报出了 class not found 之类的错误
gen/R.java 里也提对象不匹配 还有一大堆的东西

按着错误提示一个一个来解决,按照打包的流程

1. 先解决生成 R.java 这个环节

这里预先我把第三方的3rd.jar复制到了项目文件夹的 lib/ 下,然后再批处理里定义为
-------------------------------------------------------------------------------------------
SET THIRD_JAR=%WORK_SPACE%\lib\3rd.jar

REM 以下这行命令生成 R.java
%AAPT% package -m -J %GEN_FOLDER% -M %WORK_SPACE%\AndroidManifest.xml -S %RESOURCE_FOLDER% -I %ANDROID_JAR% -I % THIRD_JAR%
-------------------------------------------------------------------------------------------
在命令最后加上了 -I % THIRD_JAR%,这样有关 R.java 的报错消失了

2. javac 的错误提示..这里是把 .java 编译成 .class 提示找不到第三方的包
那么在原命令行略作修改 最后添加上 -classpath %THIRD_JAR% 这个引用参数,问题解决



再编译没有报错,把其他资源文件也打包进apk最后加上签名~生成了apk,好像成功咯
安装到手机里,运行,程序崩溃了... Android笔记34:命令行打包编译.apk 包含第三方.jar 的方法 - 恶 - 早衰男的巢

看DDMS 输出地日志~~ 问题还是在于第三方的类..not found ... 呃,不是已经编译通过了吗

回头看看那个apk文件,的确太小.. 没有包含那个jar 

做逆向研究... 看看从eclipse 编译出来的apk(104kb)和我打包出来的(26kb)到底差别在哪里...
把apk文件当做zip解压~看见尺寸的差异在于 classes.dex 这个文件
!原来问题在这里...

生成dex文件是用 %DX% 查了下 % DX% --help 用法,找到了解决问题的最后一步

3. 输出dex时把第三方的jar包含在内
在 dx --help里说的很明白了:
-------------------------------------------------------------------------------------------

E:\android\android-sdk-windows\platform-tools>dx --help
usage:
  dx --dex [--debug] [--verbose] [--positions=<style>] [--no-locals]
  [--no-optimize] [--statistics] [--[no-]optimize-list=<file>] [--no-strict]
  [--keep-classes] [--output=<file>] [--dump-to=<file>] [--dump-width=<n>]
  [--dump-method=<name>[*]] [--verbose-dump] [--no-files] [--core-library]
  [--num-threads=<n>] [<file>.class | <file>.{zip,jar,apk} | <directory>] ...
    Convert a set of classfiles into a dex file, optionally embedded in a
    jar/zip. Output name must end with one of: .dex .jar .zip .apk. Positions
    options: none, important, lines.
  dx --annotool --annotation=<class> [--element=<element types>]
  [--print=<print types>]
  dx --dump [--debug] [--strict] [--bytes] [--optimize]
  [--basic-blocks | --rop-blocks | --ssa-blocks | --dot] [--ssa-step=<step>]
  [--width=<n>] [<file>.class | <file>.txt] ...
    Dump classfiles, or transformations thereof, in a human-oriented format.
  dx --junit [-wait] <TestClass>
    Run the indicated unit test.
  dx -J<option> ... <arguments, in one of the above forms>
    Pass VM-specific options to the virtual machine that runs dx.
  dx --version
    Print the version of this tool (1.6).
  dx --help

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

在原先写的 dx 指令最后加上 jar的完整路径 也就是 %THIRD_JAR% 就ok了
%DX% --dex --output=%OUT_FOLDER%\classes.dex %OUT_CLASS_FOLDER% %THIRD_JAR%

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Android】jar包和AAR包
以前在使用 Eclipse 开发 Android 时,如果想代码打包,只有 jar 包一个方法,但是 jar包 只能把 Java 文件代码打包进去,如果要使用一个有布局和资源的库的话,除了将 jar 放入 libs 外,还要引入相关的资源和配置文件,很麻烦。
17 0
Android Studio使用外部jar包
Android Studio使用外部jar包
31 0
android 源码下编译可供第三方应用使用的JAR包
android 源码下编译可供第三方应用使用的JAR包
79 0
android 修改新增jar 路径
android 修改新增jar 路径
100 0
Android studio用AsyncHttpResponseHandler时导入jar包
Android studio用AsyncHttpResponseHandler时导入jar包
29 0
Android Studio用不了jar
Android Studio用不了jar
22 0
开发android项目的常用jar包
开发android项目的常用jar包
182 0
Android Bintray、JCenter 替代方案MavenCentral(发布jar,aar到Maven中央仓库)
Android Bintray、JCenter 替代方案MavenCentral(发布jar,aar到Maven中央仓库)
364 0
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
272 0
android 项目jar包冲突问题解决
android 项目jar包冲突问题解决
487 0
Android面试题-手把手教你如何解决as jar包冲突
Android面试题-手把手教你如何解决as jar包冲突
98 0
Android Studio 知识储备 之 ☀️ 轻松搞定 “jar和aar“ 两兄弟 的导入与导出
Android Studio 使用心得 之 AS中jar包和aar包的导入与使用 在使用Android Studio的过程中,经常需要将工程打包或者导入。 特别是在使用Unity做东西的时候,如果有用到安卓的地方的时候,自然需要将安卓的jar包或者aar包放入到Unity工程中使用。
147 0
Android插件化开发之DexClassLoader动态加载dex、jar小Demo
Android插件化开发之DexClassLoader动态加载dex、jar小Demo
138 0
Android插件化之VirtualAPK框架Jar包开发
前言: 我上一篇写了VirtualAPK的一个初试,写了一个简单的demo,然后如果是开发APP的情况(不考虑大部分的坑),我觉得上一篇的那种插件化模式是可以使用的。
1278 0
+关注
古镇月影
文章
问答
视频
相关电子书
更多
蚂蚁聚宝Android秒级编译——Freeline
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像