
可以使用以下代码来获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名。
import javaioFile;
import javalangreflectMethod;
public class LoopApp {
public static void main(String[] args) throws Exception {
String packageName = "";
File root = new File(SystemgetProperty("userdir") + "\\src");
loop(root, packageName);
}
public static void loop(File folder, String packageName) throws Exception {
File[] files = folderlistFiles();
for (int fileIndex = 0; fileIndex < fileslength; fileIndex++) {
File file = files[fileIndex];
if (fileisDirectory()) {
loop(file, packageName + filegetName() + "");
} else {
listMethodNames(filegetName(), packageName);
}
}
}
public static void listMethodNames(String filename, String packageName) {
try {
String name = filenamesubstring(0, filenamelength() - 5);
Object obj = ClassforName(packageName + name);
Method[] methods = objgetClass()getDeclaredMethods();
Systemoutprintln(filename);
for (int i = 0; i < methodslength; i++) {
Systemoutprintln("\t" + methods[i]getName());
}
} catch (Exception e) {
Systemoutprintln("exception = " + egetLocalizedMessage());
}
}
}
所需工具:aapt,Android SDK中的工具,只有一个exe,可以直接运行。
keytool,JDK中的工具,需要安装JDK环境。
需要提供目标应用的apk
1、获取包名
例如:aaptexe dump badging C:\Users\Administrator\Desktop\demo-apk-1018791apk > C:\Users\Administrator\Desktop\1txt
获取到的包名是compakgnameswbg
2、获取签名
SHA1: 56:BD:02:6B:9D:53:D7:F5:32:B2:BC:BD:BB:34:5B:F1:CD:EF:7F:C0
这里借助github开源的类apkparser
在项目composerjson中执行下面命令或修改composerjson引入即可
方法二适用于没有JAVA环境的情况下,一般linux都会有openssl环境。
原理:通过分析方法一中,发现apk包解压之后,里面会有rsa签名证书,此证书是一个符合pki体系的x509证书,通过openssl命令即可查看信息。
真正努力过的人,就会明白天赋的重要。
adb pm install (安装包所在Android手机中的路径)
adb install (安装包所在电脑的路径)
备注:安装包和路径中最好不要有中文,不然可能报错
adb uninstall (后面跟包名)
1、命令行输入:adb shell
2、回车(Enter)
3、输入命令:dumpsys window | grep mFocusedApp
结果展示:
mFocusedApp=AppWindowToken{27784c6 token=Token{396caa1 ActivityRecord{f506308 u0 comxxxai/mvpuiactivityActivity t15}}}
备注:打开所需要的APP,再执行该命令 comxxxai是包名,mvpuiactivityActivity是activity
本人还写了其他获取包名的adb命令,请查看我的另一篇文章 >
假如你的项目中有这样一个image类库, 打开image类库下的buildgradle文件,查看里面有哪些 引用包 ,如果lib里面也有包, lib中的也需要查看
假如现在,让 最后一个" compile'comblankj:utilcode:198 '" 不被混淆
打开图中的 External Libraries 文件, 我们导入的所有的第三方jar包都在里面
找到" compile'comblankj:utilcode:198 '"
查看包名,在混淆文件中添加
所有的jar包都依次写上 -keep class "jar包名" ,就ok了
--注意事项--
1保证实体类不被混淆
2保证第三方的jar包不被混淆,类似于,友盟,地图,等等,配置的时候,就把混淆文件也copy过来,免得再回去找
3添加基础混淆配置,网上有很多的实例
################ 以下直接copy到 proguard-rulespro文件中,实体类,第三方部分,需修改####################
String packageName = AclassgetPackage()getName();
或者:
packageName = new A()getClass()getPackeage()getName();
即可获得包名了。
从项目中的buildgradle,罗列的知识点。
相当于C中的函数指针,或者Java中的引用。
对比有什么不同,Groovy中,入参只有一个并且是个闭包时,可省略圆角括号;入参最后一个参数为闭包时,该闭包可以单独用花括号包裹并放在圆括号外面。这是语法上的不同。
创建task的过程
1 Task task(Map<String, > args, String name, Closure configureClosure); 创建指定类型的Task,也就是orggradleapitasksDelete
2 调用configureClosure闭包,执行delete函数,入参是rootProjectbuildDir。到此cleantask实例创建、初始化成功。
3 执行/gradlew clean。执行clean的action。比如被@TaskAction标注的函数。
练习,猜一下下面日志的输出顺序
修改buildgradle 后点击sync now刷新,以下为输出log顺序
层级关系是这样的gradle -- rootProject -- subProject -- task -- action
生成的taskGraph长什么样子呢?调用/gradlew assembleDebug 后发生了什么
思路:分三步
找到Apk依赖的所有的Jar包 和 Class文件 -----》 解压Jar解析Class内容 ----》 输出文件名。
Class文件格式
转化为Dex之前,可插入Task,输入为当前apk依赖的所有jar和class。自定义一个Transform 或者在 app:compileDebugJavaWithJavac 后面
涉及概念点extension、task、plugin入口、maven管理
把每种技能比喻为一把刀,平时我们用的是菜刀,现在一块大骨头面前想吃牛骨髓,怎么办?不知道大家喜不喜欢吃?就需要一把砍刀。工作中你有多少把刀?
多了一把刀,多了一种解决问题的方式和思路,比如我们用的三方源码库实现方式的过程从 APO -> APT -> Gradle,不断迁移,也更强大,也是赋能量、更自由的过程。
以上就是关于java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名全部的内容,包括:java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名、PHP获取安卓apk包里的apk签名、adb命令安装、卸载、 获取包名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)