| 
 
发表在 
原创文章 
					
2016-7-18 23:33:13
|
查看全部
| 阅读模式
 
 
 
| 本帖最后由 exixuezi 于 2016-7-19 19:47 编辑 
 本人是新人,放假期间,基本会保持每天一篇帖子,上学期间也会一星期两篇的,来记录自己学习中遇到的问题(持续更新),欢迎有需要的同学一同学习,当然也欢迎大神帮忙斧正!
 
 问题一        今天在学习Dalvik虚拟机与java虚拟机的不同的时候,遇到书上的一个例子:
 public class Hello{
 public int foo(int a,int b){
 return (a+b)*(a-b);
 }
 
 public static void main(String[] argc){
 Hello hello = new Hello();
 System.out.println(hello.foo(5,3));
 }
 }
 
 Hello.java文件
 
 在cmd中用javac Hello.java编译生成Hello.class文件时输出了下面的错误:
 Hello.java:1: 需要为 class、interface 或 enum
 锘缝ackage com.csdn.demo;
 ^
 1 错误
 百度知道是因为文本编辑器的问题,我之前用的Sublime Text,网上说要用记事本,果然解决了;
 
 问题二      在用dx.bat 来将Hello.class 转换成 Hello.dex时 出现了如下错误:
 PARSE ERROR:
 unsupported class file version 52.0
 ...while parsing Test.class
 1 error; aborting
 
 不支持52.0版本的class文件,我的是java8,Android的sdk包是2.4.0.0 都是最新的,
 百度不到答案,后来在书后的备注找到了问题,Java8版本太高(其实这是有道理的,因为android也是基于java的嘛):
 强制javac生成默认较低版本的class文件:javac -source 1.7  -target 1.7 Hello.java
 再dx --dex --output=Hello.dex Hello.class 就可以生成Hello.dex文件了(有点小瑕疵不用管)。
 反编译javap -c -classpath . Hello就可以得到Hello.class的反编译文件了
 反编译dexdump -d Hello.dex得到Hello.dex的反汇编代码
 
 
 
 | 
 |