Conversion to Dalvik format failed with error 1

 在签名时出现此问题,我以为是添加了广告SDK的问题,事实上是由于加入了混淆的问题.

后面有评论说可以

可以更新 proguard 到4.6  ,把最新的 lib  和 bin 文件覆盖,就可以了
没必要 修改 批处理文件

 

最近发现在家的本本,在项目加入混淆之后,导出都会提示

Java代码  
  1. Conversion to Dalvik format failed with error 1  
  Conversion to Dalvik format failed with error 1


从网上看到的都是转来转去的解决方法:

Java代码  
  1. android低版本工程(如1.5)放到高版本环境中(如2.2)可能会上述错误,解决方法如下:   
  2. 1。 如果不修改android sdk版本,则使用project clean 命令作用于某工程即可。   
  3.        (该处理方式只是在高版本中兼容了低版本工程,未真正意义上的升级)   
  4. 2。 如果修改android sdk版本,则需要以下几个步骤:   
  5.        1)修改SDK   
  6.              选择工程,build path --> configure build path ---> library 删除引用的低版本SDK,   
  7.              然后add External JARs,选择高版本SDK,OK,保存   
  8.         2)修改classpath文件    
  9.              该文件可能存在该项: <classpathentry kind="lib"   path ="你所指定的高版本的地址"  
  10.              把她修改成<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK" />   
  11.         3) 修改AndroidManifest.xml   
  12.              在AndroidManifest.xml文件中,application标签后添加<uses-sdk android:minSdkVersion="3"></uses-sdk>   
  13.         4) 修改default.properties(很重要)   
  14.               该文件最后一行(前面没用#的)target=android-3 该成target=android-8,保存。   
  15.         再看看你的工程和新建的android 2.2的工程结构就一样了。  
android低版本工程(如1.5)放到高版本环境中(如2.2)可能会上述错误,解决方法如下:
1。 如果不修改android sdk版本,则使用project clean 命令作用于某工程即可。
       (该处理方式只是在高版本中兼容了低版本工程,未真正意义上的升级)
2。 如果修改android sdk版本,则需要以下几个步骤:
       1)修改SDK
             选择工程,build path --> configure build path ---> library 删除引用的低版本SDK,
             然后add External JARs,选择高版本SDK,OK,保存
        2)修改classpath文件 
             该文件可能存在该项: <classpathentry kind="lib"   path ="你所指定的高版本的地址"
             把她修改成<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK" />
        3) 修改AndroidManifest.xml
             在AndroidManifest.xml文件中,application标签后添加<uses-sdk android:minSdkVersion="3"></uses-sdk>
        4) 修改default.properties(很重要)
              该文件最后一行(前面没用#的)target=android-3 该成target=android-8,保存。
        再看看你的工程和新建的android 2.2的工程结构就一样了。



这个就解决不了我这问题。

接着我重新下载eclipse,并新建一个项目,发现也一样导出不了。
最终在一篇文章中让我解决了这问题,这是android-sdk_r12 的问题,如下:

Java代码  
  1. http://stackoverflow.com/questions/6605971/android-sdk-tools-revision-12-has-problem-with-proguard-error-conversion-to-d  
http://stackoverflow.com/questions/6605971/android-sdk-tools-revision-12-has-problem-with-proguard-error-conversion-to-d




我采用的解决方法是:

Java代码  
  1. http://code.google.com/p/android/issues/detail?id=18359  
http://code.google.com/p/android/issues/detail?id=18359




android-sdk-windows\tools\proguard\bin目录找到:

Java代码  
  1. proguard.bat  
proguard.bat



用记事本打开,内容如下:

Java代码  
  1. @ECHO OFF   
  2.   
  3. REM Start-up script for ProGuard -- free class file shrinker, optimizer,   
  4. REM obfuscator, and preverifier for Java bytecode.   
  5.   
  6. rem Change current directory and drive to where the script is, to avoid   
  7. rem issues with directories containing whitespaces.   
  8. cd /d %~dp0   
  9.   
  10. IF EXIST "%PROGUARD_HOME%" GOTO home   
  11. SET PROGUARD_HOME=..   
  12. :home   
  13.   
  14. set java_exe=   
  15. call "%PROGUARD_HOME%"\..\lib\find_java.bat   
  16.   
  17. call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*  
@ECHO OFF

REM Start-up script for ProGuard -- free class file shrinker, optimizer,
REM obfuscator, and preverifier for Java bytecode.

rem Change current directory and drive to where the script is, to avoid
rem issues with directories containing whitespaces.
cd /d %~dp0

IF EXIST "%PROGUARD_HOME%" GOTO home
SET PROGUARD_HOME=..
:home

set java_exe=
call "%PROGUARD_HOME%"\..\lib\find_java.bat

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*




call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
改为:
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
即可!

我对比了之前的版本,发现这改法,就是改成和之前SDK版本中含有的proguard.bat文件一致。

REFRENCES:http://hsx9566.iteye.com/blog/1142002

http://stackoverflow.com/questions/6605971/android-sdk-tools-revision-12-has-problem-with-proguard-error-conversion-to

转载于:https://www.cnblogs.com/anee/archive/2012/03/08/2675762.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 该错误提示意为“参数与相应的格式字符串转换不兼容”,通常出现在使用printf等函数时,参数类型与格式字符串不匹配导致的错误。解决方法是检查参数类型与格式字符串是否一致,或者使用正确的格式字符串进行转换。 ### 回答2: Argument is incompatible with corresponding format string conversion是一个Python的错误消息,其中“argument”指的是传递给函数的参数,“corresponding format string conversion”则是指用于格式化输出的字符串中指定参数的格式化特定符号不匹配。 例如,如果我们有以下代码: ```python name = "Alice" age = 25 print("My name is %s and I am %d years old." % name, age) ``` 我们期望输出的结果是: ``` My name is Alice and I am 25 years old. ``` 然而,由于字符串格式化占位符(%s和%d)与传递给print函数的参数不匹配,代码会报错,并输出`TypeError: not enough arguments for format string`。错误消息中的“format string”即指的是用于格式化字符串的那个字符串,“conversion”指的是字符串中用来跟参数相对应的占位符。 解决这个错误的方法是要确保占位符与传递的参数类型匹配,如上面的例子中,我们应该这样写: ```python name = "Alice" age = 25 print("My name is %s and I am %d years old." % (name, age)) ``` 这样才能正确地输出结果。 除了类型匹配问题,还有一些其他的与此错误相关的问题,例如占位符个数不匹配、使用{}格式化字符串时缺少或多余关键字参数等。解决这类问题的方法也是类似的,需要仔细检查代码中的变量和占位符,确保它们的数量和类型都正确匹配。 ### 回答3: 这个错误通常是由于format string和参数不匹配导致的。在Python里使用字符串的format函数时,你需要确保你的格式字符串中的替换字段和你传入函数的参数的个数和类型是匹配的。 在format函数中,占位符用{}括起来,并可以指定字段名、格式化指示符等。如果你的格式字符串中有多个占位符,则需要传入一个元组或字典作为参数,否则只需要传入一个参数即可。 举个例子,如果你的格式字符串中包含两个占位符,你需要传入两个参数: ``` "{}, {}".format("hello", "world") ``` 如果你只传了一个参数,或者传入了多于两个参数,就会出现上述错误。 此外,如果你的格式化指示符与参数类型不匹配,也会导致该错误。例如,如果你的格式化字符为'{:d}'表示整数格式,但你传入了一个字符串,也会出现错误。 解决这个错误的方法是:检查你的格式字符串和参数,并确保它们匹配。如果匹配,那么你可以尝试使用其他的格式化指示符或类型转换函数,例如str()或int()等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值