Android应用程序签名打包,混淆代码时报错的处理方法
来源:互联网 发布:卡拉ok软件 编辑:程序博客网 时间:2024/06/07 14:54
看了很多关于如何解决android应用程序打包出错的帖子,试用之后,发现并不能完全解决我所遇到的问题。纠结了几天,终于解决了我所遇到的问题,现将处理方法写出来以备自己日后查阅,也为遇到相同问题的朋友提供一点思路。
在我的程序中使用到了ksoap2.jar,关于这个Jar包的使用这里不再说明,网上有很多资料。如果要访问WebService服务,使用这个库会很方便。
下载地址:http://code.google.com/p/ksoap2-android/
使用Eclipse在工程目录下新建一个lib目录,将这个Jar包放进去,右击选择Build Path--->Add to Build Path。
之后会在工程目录下生成一个Referenced Libraries目录,里面有刚刚添加进去的Jar包
再次右击该Jar包,选择Build Path--->Configure Build Path
在Order and Export选项卡中将刚刚添加进来的Jar包勾选中,OK退出。不勾选的话编译不会报错,运行时会报错。
Could not find class 'org.ksoap2.serialization.SoapObject', referenced from method xxx
下面就是要打开代码混淆的功能,默认情况下是关闭的。
在project.properties文件的末尾加上:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt::proguard-project.txt
网上都说加上:proguard.config= proguard.cfg,但是我的工程中并没有找到proguard.cfg文件,但是在工程目录下有一个proguard-project.txt,打开它会发现里面的内容和proguard.cfg的内容差不多,所有不必为没有proguard.cfg文件而纠结,也不需要手动创建一个,使用proguard-project.txt就可以了。
接下来就是导出apk,选择文件Export--->Export Android Application,其他的按照提示进行操作就可以了,如果是第一次导出的话,需要为该程序创建一个keystore,上面都设置好了之后就直接点击Finish,等待导出完成。
但是导出的过程并没有那么的顺利,可能会弹出如下提示:
提示代码混淆时发生错误,错误代码为1,让查看控制台输出信息,控制台输出如下:
Proguard returned with error code 1. See consoleNote: there were 4 duplicate class definitions.Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParserWarning: library class android.content.Intent depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.content.IntentFilter depends on program class org.xmlpull.v1.XmlSerializerWarning: library class android.content.IntentFilter depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.content.res.ColorStateList depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParserYou should check if you need to specify additional program jars.Warning: there were 10 instances of library classes depending on program classes.You must avoid such dependencies, since the program classes willbe processed, while the library classes will remain unchanged.java.io.IOException: Please correct the above warnings first.at proguard.Initializer.execute(Initializer.java:321)at proguard.ProGuard.initialize(ProGuard.java:211)at proguard.ProGuard.execute(ProGuard.java:86)at proguard.ProGuard.main(ProGuard.java:492)
大概意思是说发现有4个完全相同的类定义。
网上的解决办法是在proguard.cfg文件中添加如下两行代码屏蔽警告:
-dontwarn org.xmlpull.v1.XmlPullParser
-dontwarn org.xmlpull.v1.XmlSerializer
添加这两行代码的确是屏蔽了警告,而且也成功的导出了apk文件。
如果你的程序中只是使用到了ksoap2来调用WebService的话,可能不会有问题。但是,
如果程序中使用了ksoap2来调用WebService服务,在其他地方又使用的XmlPullParser来解析xml文档的话,程序运行到解析xml的是否就会出现如下问题:
W/System.err(427): caused by: a.c.a.b: resource not found: /META-INF/services/org.xmlpull.v1.XmlPullParserFactory make sure that parser implementing XmlPull API is available; nested exception is:a.c.a.b: resource not found: /META-INF/services/org.xmlpull.v1.XmlPullParserFactory make sure that parser implementing XmlPull API is available
会导致解析xml时抛出异常,得不到正确的解析结果,但是程序不会崩溃。
这是由于Android系统中已经集成XmlPullParser类,在ksoap2中也有这个类(之前导出时提示类重复定义的信息已被屏蔽),在混淆代码时产生了冲突,导致Android系统不知该如何处理,就抛出了异常,自己的理解,理解的不对的话欢迎交流。
这是ksoap2库中的包。
进入xmlpull--->v1
这是一个很头疼的问题,后来查了很多资料,找到了解决办法。
1. 到http://kxml.sourceforge.net/下载kxml2.jar并添加到lib目中;
2. 去掉之前在proguard-project.txt文件中添加的屏蔽警告的代码,并且添加
-libraryjars lib/kxml2-2.3.0.jar到该文件中,此kxml2.Jar包不需要添加到Build Path中,就直接放在lib目录中就可以了;
3. 再次导出apk,导出的过程中又会报错,信息如下:
Proguard returned with error code 1. See consoleNote: there were 19 duplicate class definitions.Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParserWarning: library class android.content.Intent depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.content.IntentFilter depends on program class org.xmlpull.v1.XmlSerializerWarning: library class android.content.IntentFilter depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.content.res.ColorStateList depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParserWarning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParserYou should check if you need to specify additional program jars.Warning: there were 10 instances of library classes depending on program classes.You must avoid such dependencies, since the program classes willbe processed, while the library classes will remain unchanged.java.io.IOException: Please correct the above warnings first.at proguard.Initializer.execute(Initializer.java:321)at proguard.ProGuard.initialize(ProGuard.java:211)at proguard.ProGuard.execute(ProGuard.java:86)at proguard.ProGuard.main(ProGuard.java:492)
还是说类重复定义,这是由于ksoap2.Jar包与kxml2.Jar包中有重复定义的类,解决办法就是去掉ksoap2.jar中与kxml2.jar重复冲突的类。
去掉以下内容:META-INF\maven\net.sourceforge.kxml、META-INF\maven\org.xmlpull、services、org\kxml2、org\xmlpull
下载地址:http://download.csdn.net/download/shlzxjp/4708356
然后,重新将ksoap2.jar拷贝到lib目录下覆盖原来的jar文件,clean一下工程,重新导出apk即可。
总之,要注意console的输出信息,多google一下,不过好多网页都打开不了,不过我相信你会有办法的,大家懂得!
- Android应用程序签名打包,混淆代码时报错的处理方法
- Android应用程序的代码混淆和签名
- Eclipse+ADT进行Android应用程序的代码混淆和签名
- Eclipse+ADT进行Android应用程序的代码混淆和签名
- Eclipse+ADT进行Android应用程序的代码混淆和签名
- Android 签名打包 混淆代码 proguard
- android代码签名和混淆打包
- android代码签名和混淆打包
- android代码混淆,打包签名出错
- android代码签名和混淆打包
- Android签名打包及代码混淆
- android代码混淆和打包签名
- android代码签名和混淆打包
- android ant 最简单的打包签名,混淆方法
- android ant 最简单的打包签名,混淆方法
- android应用程序的混淆打包
- ANDROID应用程序的混淆打包
- android应用程序的混淆打包
- c++指针 指针入门
- Android AnimationDrawable运行的几种方式
- 图像处理(六)灰度形态学腐蚀与膨胀
- 吃披萨想到的沟通管理
- POJ2109
- Android应用程序签名打包,混淆代码时报错的处理方法
- 利用C++标注库实现文件的读写
- printk学习使用
- vs2010中加入环境变量
- PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询五:规划成plantree
- 11 java 王少飞-Session
- SQL Server 常用的语句
- 张孝祥java.concurrent线程并发学习笔记 - concurrent简介
- 如何控制一个action跳转到本页面的特定区域