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%

相关文章
|
4月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
96 0
|
16天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
39 3
|
4月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
307 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
4月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
4月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
262 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
4月前
|
Java Maven
构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
这篇文章详细介绍了构建SpringBoot项目的过程,包括新建工程、选择环境配置、添加依赖、项目结构说明,并演示了如何编写一个简单的Controller控制器实现输出功能,最后讲解了如何使用Maven将项目打包成可执行的JAR包,并提供了运行JAR包的命令和测试效果。
构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
|
5月前
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
137 0
|
6月前
|
Java 开发工具 Android开发
详细解读Android开发DNK开发将.c文件打包成os
详细解读Android开发DNK开发将.c文件打包成os
33 0
|
5月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
480 2
[JarEditor]可直接修改jar包的IDEA插件
|
5月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。