这几天公司让整一套自己的Android开发模版,于是到网上找相关的资料,看完后发现做一个简单的Android模版还是好弄一点(不过要了解一点freemarker),按教程试了下做了几个简单的Activity模版(当然没有那么复杂,只是简单的试验),后来看到在new 一个Android新工程的时候发现,默认的包名是com.example,如图下图所示:
能不能把默认的包名改成我们想要的呢,答案是肯定的。于是乎我在Android的模版里面去找相关的com.example字样,最后在AndroidLib中找到了,但显然不是想要的,继续在网上查资料。发现有人写了博客,而且修改成功了,但是com.example字样的不在我们的sdk包中,而是在ADT插件的jar包中,于是下载了相关的工具(jd-gui)进行反编译,并且在他人的博文中发现了com.example字样的路径,只可惜在这里是不能修改啊,这个博客里面也没有说道怎么整,于是功亏一篑。(我这里是修改成功)
直接将要修改的文件NewProjectPage.class文件反编译后的java文件在dos中编译,当然这是通不过的,因为这个文件还依赖了其他的文件,其他文件还会依赖另一些文件,总之这样是搞不定的。实在不行直接将所有的jar包反编译,然后建立一个java工程,将src文件全部复制进来。发现这货也依赖了很多的包,从eclipse和sdk中拷贝了很多的jar文件,结果总会报错。后来找了另一个工具JClassLib,安装完成后打开,将我们要修改的NewProjectPage.class托出来,放到某一目录下通过JClassLib工具打开该文件,如图:
因为我们要修改的内容是字符串,肯定是在字符串常量池中的,一个个的找,找到第18行发现我们要修改的内容了
然后在eclipse中建立一个java工程,并复制一下内容:
String filePath = "f:\\NewProjectPage.class";
FileInputStream fis = new FileInputStream(filePath);
DataInput di = new DataInputStream(fis);
ClassFile cf = new ClassFile();
cf.read(di);
CPInfo[] infos = cf.getConstantPool();
int count = infos.length;
for (int i = 0; i < count; i++) {
if (infos[i] != null) {
System.out.print(i);
System.out.print(" = ");
System.out.print(infos[i].getVerbose());
System.out.print(" = ");
System.out.println(infos[i].getTagVerbose());
if(i == 18){
ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];
uInfo.setBytes("com.cqt.".getBytes());
infos[i]=uInfo;
}
}
}
cf.setConstantPool(infos);
fis.close();
File f = new File(filePath);
ClassFileWriter.writeToFile(f, cf);
我这里是将com.example替换成了com.cqt。编译完成后把NewProjectPage.class再放回到adt插件的jar中,重启eclipse即可达到我们想要的效果。