我们现在编写插件的时候,肯定需要进行调试的,不可能一下子就写出一个完美可用的插件。那么我们一般调试的方法有 debug 、输出 log text,查看 —stacktrace。
一、debug
建立远程调试任务
运行下面的命令
gradle assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true
./gradlew assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true
二、—stacktrace
可以看到详细的错误信息
./gradlew compileDebug —stacktrace
三、输出 log
通过输出一个TXT文件,来记录信息。比如我们字符串加密的记录。
开始用 start ,然后不断ouputInfo ,最后end。就好了。
final class StringFogMappingPrinter {
private File mMappingFile;
private BufferedWriter mWriter;
private String mCurrentClassName;
/* package */ StringFogMappingPrinter(File mappingFile) {
this.mMappingFile = mappingFile;
}
/* package */ void startMappingOutput() {
try {
if (mMappingFile.exists() && !mMappingFile.delete()) {
throw new IOException();
}
File dir = mMappingFile.getParentFile();
if (dir.exists() || dir.mkdirs()) {
mWriter = new BufferedWriter(new FileWriter(mMappingFile));
} else {
throw new IOException();
}
} catch (IOException e) {
Log.e("Create stringmask mapping file failed.");
}
}
/* package */ void ouputInfo(String key, String implementation) {
try {
mWriter.write("stringmask key : " + key);
mWriter.newLine();
mWriter.write("stringmask impl: " + implementation);
mWriter.newLine();
} catch (IOException e) {
// Ignore
}
}
/* package */ void output(String className, String originValue, String encryptValue) {
if (TextUtils.isEmpty(className)) {
return;
}
try {
if (!className.equals(mCurrentClassName)) {
mWriter.newLine();
mWriter.write("[" + className + "]");
mWriter.newLine();
mCurrentClassName = className;
}
mWriter.write(originValue + " -> " + encryptValue);
mWriter.newLine();
} catch (IOException e) {
// Ignore
}
}
/* package */ void endMappingOutput() {
if (mWriter != null) {
IOUtils.closeQuietly(mWriter);
}
}
}