`
coolerbaosi
  • 浏览: 767215 次
文章分类
社区版块
存档分类
最新评论

Ant build.xml 批量打渠道包回顾!打第三方jar包总结

 
阅读更多

配置: eclipse3.9 + ADT22 + sdk 4.0

eclipse带自动混淆的,不过只有在我们手动创建包的时候,才去打签名,去混淆! 开启混淆这样做吧!

必备文件3个:

当然进行ant打包前提是配好ant和响应的环境变量! 见博客:ant 批量多渠道打包发布

在SDK android 4.0 ,google又换了一套打包的方式,我想可能是升级ADT的原因(ps:可苦了咱们开发了),混淆打包文件由以前的:dafault.properties,proguard.cfg,换成了

proguard-project.txt , project.properties。

在project.properties里只用两行代码:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
target=android-15

早proguard-project.txt中设置自定义混淆的代码模块:

如:

-keepclasseswithmembers class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

等等,

主要是build.xmll中做响应的设置:

相信在以前的blog中,大家试了可能会发现,打出的包没有混淆,呵呵现在补上这一块!

增加一个targ:

<target name="proguard" depends="compile">
<echo> Execute proguard class flies... </echo>
<echo> ="-libraryjars ${android-jar}" </echo>
<mkdir dir="optimized"/>
<java jar="${proguard-home}" fork="true" failonerror="true" >
<jvmarg value="-Dmaximum.inlined.code.length=32" />
<arg value="-injars ${outdir-classes}" />
<arg value="-outjars optimized" />

<arg value="-libraryjars ${android-jar}" />
<arg value="-libraryjars ${external-lib-ospath}/android-support-v4.jar"/>
<arg value="-libraryjars ${external-lib-ospath}/fastjson-1.1.31.jar"/>
<arg value="-libraryjars ${external-lib-ospath}/ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar"/>
<arg value="-libraryjars ${external-lib-ospath}/pinyin4android1.0.jar"/>
<arg value="-libraryjars ${external-lib-ospath}/umeng_sdk.jar"/>
<arg value="-libraryjars ${external-lib-ospath}/zxing1.7.jar"/>

<arg value="-optimizationpasses 7"/>
<arg value="-dontusemixedcaseclassnames"/>
<arg value="-dontskipnonpubliclibraryclasses"/>
<arg value="-dontpreverify"/>
<arg value="-dontoptimize" />
<arg value="-dontusemixedcaseclassnames" />
<arg value="-repackageclasses ''" />
<arg value="-allowaccessmodification" />

<!-- 要保留自己的主ACTIVITY类 -->

<arg value="-keep public class * extends android.app.Activity" />
<arg value="-keep public class * extends android.app.Application"/>
<arg value="-keep public class * extends android.app.Service"/>
<arg value="-keep public class * extends android.content.BroadcastReceiver"/>
<arg value="-keep public class * extends android.content.ContentProvider"/>
<arg value="-keep public class * extends android.app.backup.BackupAgentHelper"/>
<arg value="-keep public class * extends android.preference.Preference"/>
<arg value="-keep public abstract interface com.asqw.android.Listener"/>
<arg value="-keep public class * extends android.view.View"/>
<arg value="@proguard-project.txt"/><!--这里是调用配置好的混淆文件,当然上面的部分代码和proguard-project.txt部分重复了,可以去掉哈>
<arg value="-verbose" />
<arg value="-dontskipnonpubliclibraryclasses" />
<arg value="-optimizations !field/*,!class/merging/*"/>
<arg value="-dontskipnonpubliclibraryclassmembers" />
</java>
<delete dir="${outdir-classes}"/>
<mkdir dir="${outdir-classes}"/>
<move file="optimized" tofile="${outdir-classes}" />
<delete file="optimized"/>

</target>

这里把混淆加上了!!

花了一整天的时间,研究真是难受啊! 遇到很多常见的错误!解决方法如下:

1.提示GBK编码不能识别,咱们的编码格式用URF-8的,还有注意,中文注释是显示乱码的,不影响打包编译就行,但是有个点就是生成的R文件里不能包含中午注释,

假设你在strings.xml里写了一个 :

<!--刷新文字>

<string name="bname_refresh">刷新</string>

在eclipse里面是没错的,但是用ant调用javac编译就出错了啊!!所以资源文件里别带中文注释类的东西。

2. 发生这样的问题:

毫无疑问,这是你的图片的问题,.9的图片格式不正确,你需要仔细看看,是不是合法的点9,可以用SDK下的点9工具自己查看一下!

3.记得不太清了,好像也是提示png图片报错,但是仔细看,没错啊,后来才搜到类似的帖子是,有的美术做的图太坑爹了,eclipse能很好的使用,但是ant手动编译会出错,

为什么说美术呢? 因为这个图片的位深度不符合要求,标准的是32位的:

所以遇到类似的问题咋办,找美术改去吧!

4.碰到最多的相信大家还是在混淆和签名的时候对于第三方包的操作吧!

今天我大部分时间就花在找这个问题了,网上很多人也都介绍了,不过真心的没几个管用的!! 好了 看操作:

我的混淆实在编译之后进行的:

重点在于怎么设置: 把第三方包打进来且不混淆,这样做:

拿android-support-v4.jar为例子:

在proguard-project.txt中我定义了这么几句话:

-libraryjars /libs/android-support-v4.jar
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }

这意思是:引入android-support-v4.jar包且不把此包下的类和接口类型混淆了!

这个包还好,不过有些包是比较恶心的额例如:
-libraryjars /libs/fastjson-1.1.31.jar-libraryjars /libs/fastjson-1.1.31.jar 这个包,我也想模仿这么做:

-keep class com.alibaba.fastjson.** { *; }
-keep class com.alibaba.fastjson.annotation.** { *; }
-keep class com.alibaba.fastjson.asm.** { *; }
-keep class com.alibaba.fastjson.parser.** { *; }
-keep class com.alibaba.fastjson.serializer.** { *; }
-keep class com.alibaba.fastjson.support.spring.** { *; }
-keep class com.alibaba.fastjson.util.** { *; }
-keep interface com.alibaba.fastjson.** { *; }
-keep interface com.alibaba.fastjson.parser.** { *; }
-keep interface com.alibaba.fastjson.support.spring.** { *; }
-dontwarn com.alibaba.fastjson.**

这个包呢需要加上-dontwarn com.alibaba.fastjson.**才能不报警告!因为fastjson里部分类是JAVAEE里的东西,咱们android类库里是没有的,所以警告就别提示了,但是在android里也用不到那些类库!

同样 其他的包如:友盟的、ksoap2-android-assembly-3.0.0-jar-with-dependencies的、都这么搞就行!

5.以上可能包你已经打好了,但是你会发现各种可能的问题,如:没混淆成功(混淆模块错误)、没签名成功(签名文件等问题),还有就是运行了但是会报空指针的错误哦,这是为啥呢? 我个人分析主要是以下方面: 前提你的程序正常没这个问题,如果出现了,一方面是你打包混淆的时候把不该混淆的混淆多了,也就是说某个类名被你混淆掉了,这样肯定找不到,另一方面,就是你加入了第三方包没能打进去,这样肯定会异常啊,再者就是第三方包进去了,但是你把引用的包给混淆了,不该混的给混淆了。

大致也就是这些问题,还要提醒一下这里:记得都得勾上,否则你是无法将第三方包打进去的!

经过测试 成功混淆,渠道号也打进去了!最后再提醒一句,用到的第三方包,既有接口也有类的,你都得声明,保证不被混淆掉!!! 哇哈哈!

希望大家也能成功啊!

有什么问题留言哈!! 谢谢您的来访!

顺便附上我的那三个文件吧:坑爹啊,没有上传的地儿! 就放我的blog的资源里吧! 点我下载去喽

分享到:
评论

相关推荐

    一个常用的ant的build.xml

    总结来说,Ant的`build.xml`文件是项目构建的核心,它定义了构建过程的各个步骤和相关设置。通过理解和定制这个文件,开发者可以高效地管理项目,实现自动化构建,提高开发效率。对于初学者,学习阅读和编写`build....

    ant的build.xml模板

    《Ant的build.xml模板详解与应用》 在软件开发领域,构建工具是不可或缺的一部分,它帮助开发者自动化地完成编译、测试、打包等任务。Apache Ant作为Java领域的一款经典构建工具,以其灵活性和强大的功能深受广大...

    ant build.xml 详解

    《Ant build.xml详解——构建Java项目的关键》 Apache Ant,作为一个开源的自动化构建工具,是Java开发者不可或缺的利器。它的核心在于一个名为`build.xml`的配置文件,它定义了项目的构建过程,包括编译、测试、...

    生成ANT所需要的Build,xml文件

    总结来说,这个Python程序gen1.py旨在简化Java开发中的ANT配置过程,通过自动分析项目结构和生成相应的build.xml文件,从而提高开发效率。了解ANT的基本概念、XML配置语法以及如何利用类似gen1.py的工具,对于Java...

    ant build.xml 使用实例

    Apache Ant 是一个广泛使用的Java构建工具,它以XML格式定义构建脚本,即`build.xml`文件。这个文件包含了构建项目的整个流程,从编译源代码到生成最终的可执行或部署包。下面我们将深入探讨`build.xml`的使用以及...

    ANT_发布项目中_build.xml_文件的详细配置

    `javadoc`目标用于生成项目的API文档,便于团队成员或第三方开发者理解和使用。 ```xml &lt;!-- 文档生成 --&gt; &lt;!-- 更多细节... --&gt; ``` ### 结语 通过上述对`build.xml`文件的详细配置解析,我们可以看出Ant的...

    ant build.xml编写

    总结来说,`build.xml`是Ant的核心,它通过XML语法定义了构建过程的每一个环节。开发者可以根据项目需求灵活定制,实现高效、自动化的软件构建。通过学习和掌握`build.xml`的编写,我们可以更好地利用Ant工具提高...

    ant build.xml文件详解

    2. 可选任务:可选任务实来自第三方的任务,因此需要一个附加的 JAR 文件。 3. 用户自定义的任务:用户自定义的任务实用户自己开发的任务。 在 Ant 中,任务定义了 Ant 实际执行的命令。Ant 在构建目标时必须调用...

    ant 较完整的build.xml解释

    - **可选任务(Optional Tasks)**:来自第三方的task,需要下载对应的JAR文件并将其添加到构建路径中。 - **用户自定义任务(Custom Tasks)**:用户可以根据自己的需求开发新的task。 示例: ```xml &lt;!-- 使用创建...

    Ant项目所需要用到的jar以及build.xml

    用户可以通过`&lt;taskdef&gt;`标签引入第三方任务,比如使用JSch库时,可能需要定义一个任务来执行SFTP操作。 6. **依赖管理**:在Ant项目中,`build.xml`会明确指定项目所依赖的外部库,如`jsch-0.1.51.jar`。Ant提供了...

    ant build.xml例子

    `build.xml`文件是Ant的核心,它使用XML语法定义了一系列的任务(tasks),这些任务包含了构建过程中的各种操作,如编译源代码、运行测试、生成JAR文件等。以下是一些关于Ant和`build.xml`文件的基本知识点: 1. **...

    ant打包sdk中build.xml

    总之,Ant的`build.xml`文件是项目构建的核心,当遇到低版本SDK导致的打包问题时,我们需要理解其工作原理,对文件进行适当的修改以确保兼容性。同时,保持良好的文档记录和持续的测试,将有助于提高开发效率和项目...

    ANT-build.xml命令详解

    **ANT-build.xml命令详解** Apache Ant 是一个Java平台上的开源构建工具,它通过XML格式的配置文件(如`build.xml`)来定义构建任务。Ant的设计理念是“简单就是美”,它使得Java项目的构建过程变得可配置且易于...

    ant打jar包时, 怎么把所依赖的jar包与从源码中编译过来class文件合并成最终的一个jar?

    Ant是一个流行的Java构建工具,它允许我们通过配置XML文件(build.xml)来执行自动化构建任务,包括jar文件的创建和合并。下面我们将详细讨论如何使用Ant实现这个目标。 首先,确保你已经安装了Ant,并且在项目中...

    ant build.xml范例

    "ant build.xml范例"指的是使用Ant工具时创建的构建配置文件build.xml,它是Ant工作的蓝图,定义了项目的构建过程。 1. **Ant的基本概念** - Ant是一个Java库和命令行工具,其任务是驱动构建过程。 - build.xml...

    Ant_的最完整build.xml解释,Ant入门与进阶

    总结,Ant是Java开发中的重要工具,通过理解并熟练掌握build.xml的编写,可以极大地提高项目构建的效率和质量。在实际开发中,结合持续集成工具如Jenkins,Ant可以发挥更大的作用,实现自动化构建和部署,从而提升...

    build.xml详解

    `build.xml` 是 Apache Ant 构建工具的核心配置文件,用于自动化软件构建过程中的各种任务。本篇将基于提供的 `build.xml` 文件示例,详细介绍其结构、语法以及如何通过配置实现自动化构建。 #### 文件结构与注释 ...

    ant编译java web的build.xml文件

    总结,`build.xml`文件是Ant构建Java Web应用的核心,它通过XML语法定义了一系列构建步骤,实现了项目的自动化管理。理解和掌握`build.xml`的编写,能有效提高开发效率,降低构建过程中的错误风险,使得软件项目的...

    ant+build.xml

    此外,还可以通过自定义任务或者使用第三方任务来扩展Ant的功能。 四、Ant与JavaAnt的关系 在给定的压缩包文件`JavaAnt`中,可能包含了Ant在Java项目中的具体应用实例。这可能包括了一个或多个Java项目,每个项目...

    ant的配置文件build.xml

    总结,`build.xml`是Ant的核心,它通过XML描述了项目构建的全过程,包括源代码的编译、打包、测试和部署等步骤。理解并熟练掌握`build.xml`的编写,对于有效地管理和自动化Java项目的构建至关重要。通过合理配置,...

Global site tag (gtag.js) - Google Analytics