avatar

个人记录 | 随心所意,记录点滴

MacBook重新打包jar

解压jar包 先进入X.jar所在目录 jar -xvf X.jar 重新打jar包 jar -cvf X.jar ./ 替换META-INF/MANIFEST.MF文件,到打包后的X.jar包中。 用上一个命令打出的包,MANIFEST.MF文件中是没有入口类的信息的,需要更新正确的清单文件(非可执行文件可以省略这一步) jar umf META-INF/MANIFEST.MF X.jar

ProtoBuffer中文转码

许多时候需要查看日志中的中文字符,但是protobuf中某字段为中文的话,打印出来为8进制字符。若要打印为中文,可用以下代码: import com.google.protobuf.TextFormat; public class NormalProtobufDeserializer implements IProtobufDeserializer{ @Override public String deserial(byte[] data) { String ret = ""; try{ NormalDeserializer.NormalMessage normalMessage = NormalDeserializer.NormalMessage.parseFrom(data); //ret = normalMessage.toString(); 此时为8进制,如"\241\242\243\244\245" ret = TextFormat.printToUnicodeString(normalMessage); }catch (Throwable throwable){ } return ret; } 若已经打印出八进制”\241\242\243\244\245”,可以用以下代码转成中文: public static void printProtoBuf(String dataStr) { if (!dataStr.contains("\\")) { System.out.println("未识别:" + dataStr); } else { //不属于八进制内容的字符 StringBuilder oldBuffer = new StringBuilder(); //属于八进制的内容,转成十六进制后缓存在这里 StringBuilder hexBuffer = new StringBuilder(); for (int i = 0; i < dataStr.

Parameter ‘directory‘ is not a directory

将AndroidStudio项目复制了一份,运行时报错: Execution failed for task ':app:dataBindingGenBaseClassesDebug'. Parameter 'directory' is not a directory 按照stackoverflow的方法, invalidata Cache/Restart 或者删除 .gradle 文件夹,都不好使 最终解决办法是在命令行执行编译一遍: ./gradlew assembleDebug --rerun-tasks 完成后重新在AndroidStudio中运行就可以了。

混淆映射mapping压缩

我们项目里终会有一些不需要混淆的符号,比如一些第三方包,一些jni调用,一些自动解析的model,这些不混淆的符号也会在mapping里生在相同不变的符号映射,其实这些符号映射是不需要也能正常解码错误代码的,去掉这些未混淆的符号就能给mapping文件瘦身,当文件超级大时,可以把android源生sdk取消混淆,第三方开源库也能取消,只把自己开发的核心功能保留混淆,这样去掉未混淆之符号时,mapping会达到极为精简的地步。 使用shell可以很轻松的去掉未混淆的符号: find ./ -name mapping.txt | xargs cat | awk '{if($2!=$4) print $0}'>./newmapping.txt

使用Simpleperf对Android应用进行分析

在NDK目录下,找到simpleperf目录,在终端中进入。 调整现场,启动CPU分析,生成perf.data python uplive_profiler.py -p com.asiainno.uplive 对perf.data进行解析生成out.perf python report_sample.py > out.perf 借助FlameGraph工具 git clone https://github.com/brendangregg/FlameGraph.git 将out.perf中的符号进行折叠: ./FlameGraph/stackcollapse-perf.pl out.perf >out.folded 生成svg图,用chrome打开既是火焰图 ./FlameGraph/flamegraph.pl out.folded >p.svg 火焰图原理 https://blog.openresty.com.cn/cn/dynamic-tracing/