Eclipse下永久性修改android工程默认包名

一、概述

要想修改android工程的默认包名,我们需要对eclipse安装目录下的android开发套件(即ADT,可直接解压得到其中的class文件)中的NewProjectPage.class进行轻微修改。这是一个java编译文件,理论上要对其修改需要先对其进行反编译,然后修改,再编译就能达到目的,但由于该class文件import了大量类,而这大量类还import了更多类,所以这种方法理论可行。

而这次我们要使用的是另一种方法,就是不进行反编译直接对.class文件的目标字节进行修改。

工具:JClassLib

JClassLib是一个java编译文件代码查看工具,并且还是一个字节码阅读器,可以通过该软件查看到class文件的方法表,和常量池,而我们要修改的 com.example. 就是常量池中的一个。

需要注意的是,JClassLib应用不能直接对class文件进行修改,只提供了可用于修改class字节的库函数,可以在JClassLib安装目录下找到。所以我们首先要使用JClassLib打开目标class文件,然后找到要修改的常量位置,代码中调用JClassLib库函数对相应位置常量进行修改,最后将该class文件放回原.Jar包中。

JClassLib文件请自行下载。

二、具体步骤

  1. 在eclipse安装目录下找到adt插件

    C:\eclipse_mars\plugins\com.android.ide.eclipse.adt_(版本号).jar

  2. 由于可能会修改失败,所以强烈建议备份adt插件!

  3. 将adt插件解压到一文件夹中,并在解压后文件夹

    …\com.android.ide.eclipse.adt_(版本号)\com\android\ide\eclipse\adt\internal\wizards\templates下找到NewProjectPage.class文件

  • 安装JclassLib应用

  • 使用JclassLib打开NewProjectPage.class

  • 在Constant Pool中找到com.example. 常量,并记下序号 N通常为18,后面代码中会用到N

  • 使用eclipse创建一个Java Project,导入JclassLib工具库,该工具包位于JclassLib应用安装目录,编译时记得在Java Build Path - Order and Export - 下勾选引入的库文件,代码如下:

    import java.io.DataInput;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
     
    import org.gjt.jclasslib.io.ClassFileWriter;
    import org.gjt.jclasslib.structures.CPInfo;
    import org.gjt.jclasslib.structures.ClassFile;
    import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
     
    publicclass ClassFileModify {
        publicstaticvoid main(String[]args)throws Exception {
            String filePath ="...<span style="color:#ff0000;">(文件路径)</span>\\NewProjectPage.class";
            FileInputStream fileInput =new FileInputStream(filePath);
            DataInput dataInput =new DataInputStream(fileInput);
            ClassFile cf =new ClassFile();
            cf.read(dataInput);
     
            CPInfo[] infos =cf.getConstantPool();
            intcount =infos.length;
            for (inti = 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 == <span style="color:#ff0000;">N(前述序号)</span>){
                        ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];
                        uInfo.setBytes("<span style="color:#ff0000;">com.joshua.(自定义默认包名)</span>".getBytes());
                        infos[i] =uInfo;
                    }
                }
            }
            cf.setConstantPool(infos);
            fileInput.close();
            File f=new File(filePath);
            ClassFileWriter.writeToFile(f,cf);
        }
    }

8. 将原com.android.ide.eclipse.adt_(版本号).jar文件用解压软件直接打开(注意:不用解压出来)在里面找到NewProjectPage.class所在文件夹,直接添加修改过的NewProjectPage.class,覆盖原文件。如果将adt文件解压然后再压缩文件内容可能会变动;

9. 完成,如果失败,反复尝试整个步骤。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值