刚刚在博客上看到可以在android项目中查看系统类源码的方法。把源码中所有的java文件复制到sdk/platforms/platform-n/sources目录下面就可以了~~不过那个是python的代码,改了个java的上传上来,有用的上的可以看下^_^
用法:1.选择android源码目录(如E:\android4.0)
     2.选择目标sources目录(如C:\Android\android-sdk\platforms\android-9\sources,不存在请手动建立)
     3.点击Copy..等待package com.leaf;import java.io.BufferedReader;public class SourceCopy { protected Shell shlAndroidsourcecopyer;
private Text txtSource;
private Text txtTarget;
private Label lblStatus;
public Display display;
public String sourceDir;
public String targetDir; public static Pattern pattern = Pattern.compile("\\s*package\\s+([a-zA-Z0-9\\._]+)\\s*;\\s*"); /**
 * Launch the application.
 * 
 * @param args
 */
public static void main(String[] args) {
try {
SourceCopy window = new SourceCopy();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
} /**
 * Open the window.
 */
public void open() {
display = Display.getDefault();
createContents();
shlAndroidsourcecopyer.open();
shlAndroidsourcecopyer.layout();
while (!shlAndroidsourcecopyer.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} /**
 * Create contents of the window.
 */
protected void createContents() {
shlAndroidsourcecopyer = new Shell();
shlAndroidsourcecopyer.setSize(355, 244);
shlAndroidsourcecopyer.setText("AndroidSourceCopyer"); Button btnSource = new Button(shlAndroidsourcecopyer, SWT.NONE);
btnSource.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog folderdlg = new DirectoryDialog(shlAndroidsourcecopyer);
// 设置文件对话框的标题
folderdlg.setText("文件选择");
// 设置初始路径
folderdlg.setFilterPath("E:");
// 设置对话框提示文本信息
folderdlg.setMessage("请选择相应的文件夹");
// 打开文件对话框,返回选中文件夹目录
String selecteddir = folderdlg.open();
if (selecteddir == null) {
return;
}
else {
txtSource.setText(selecteddir);
sourceDir = selecteddir;
} }
});
btnSource.setBounds(285, 29, 41, 24);
btnSource.setText("..."); Button btnTarget = new Button(shlAndroidsourcecopyer, SWT.NONE);
btnTarget.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog folderdlg = new DirectoryDialog(shlAndroidsourcecopyer);
// 设置文件对话框的标题
folderdlg.setText("文件选择");
// 设置初始路径
folderdlg.setFilterPath("C:");
// 设置对话框提示文本信息
folderdlg.setMessage("请选择相应的文件夹");
// 打开文件对话框,返回选中文件夹目录
String selecteddir = folderdlg.open();
if (selecteddir == null) {
return;
}
else {
txtTarget.setText(selecteddir);
targetDir = selecteddir;
}
}
});
btnTarget.setBounds(285, 87, 41, 24);
btnTarget.setText("..."); Label lblSource = new Label(shlAndroidsourcecopyer, SWT.NONE);
lblSource.setBounds(10, 29, 41, 24);
lblSource.setText("Source"); Label lblTarget = new Label(shlAndroidsourcecopyer, SWT.NONE);
lblTarget.setBounds(10, 87, 41, 15);
lblTarget.setText("Target"); txtSource = new Text(shlAndroidsourcecopyer, SWT.BORDER);
txtSource.setBounds(56, 29, 223, 24); txtTarget = new Text(shlAndroidsourcecopyer, SWT.BORDER);
txtTarget.setBounds(55, 87, 224, 24); Button btnCopy = new Button(shlAndroidsourcecopyer, SWT.NONE);
btnCopy.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Matcher matcher = pattern.matcher("package com.ysw.sip;");
if (matcher.find())
{
String pack = "\\" + matcher.group(1).replace(".", "\\");
System.out.print(pack);
} new Thread(new Runnable() {
private void update(final String str) {
display.asyncExec(new Runnable() {
public void run() {
lblStatus.setText(str);
}
});
} @Override
public void run() {
String sourceStr = sourceDir;
String targetStr = targetDir;
copy(new File(sourceStr), new File(targetStr));
update("Done");
} public void copy(File source, File target) {
if (source.isFile()) {
if (!source.getName().endsWith(".java")) return;
try {
FileReader reader = new FileReader(source);
BufferedReader
bufferedReader = new BufferedReader(reader);
String line = "";
while ((line = bufferedReader.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
if (matcher.find())
{
bufferedReader.close();
reader.close();
String pack = matcher.group(1).replace(".", "\\");
File folder = new File(target + "\\" + pack);
if (!(folder.exists() && folder.isDirectory())) folder.mkdirs();
update(pack + "\\" + source.getName());
copyFile(source, folder);
return;
}
}
bufferedReader.close();
reader.close(); } catch (Exception e) {
e.printStackTrace();
}
return;
}
for (File file : source.listFiles()) {
copy(file, target);
}
} private void copyFile(File source, File parent) {
try {
int byteread = 0;
if (source.exists()) { // 文件存在时
InputStream inStream = new FileInputStream(source); // 读入原文件
FileOutputStream fs = new FileOutputStream(new File(parent, source.getName()));
byte[] buffer = new byte[1444];
while ((byteread = inStream.read(buffer)) != -1) {
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
update("copy error:" + source.getAbsolutePath());
}
}
}).start(); }
});
btnCopy.setBounds(118, 117, 80, 41);
btnCopy.setText("Copy"); lblStatus = new Label(shlAndroidsourcecopyer, SWT.NONE);
lblStatus.setBounds(10, 180, 316, 15);
lblStatus.setText("status"); }
}