jdk|adb命令行使用总结

25 篇文章 0 订阅

记录jdk的命令行使用记录

javac

1.java命令行编译多个源文件

javac -d . Example1.java Example2.java
Example1是主类,要用到Exmaple2
执行:java com.example.Example1,执行时要加上完整包名

1.1java文件编译和打包为jar文件

  下载了jmp123的文件,是代码源文件,树形解构的代码叶子目录有3个,每个下面都有java源文件,这种情况如何使用
javac命令进行打包。以下是3种方法,二和三未测试。
(1)分别编译

javac -d . jmp123/decoder/*.java
javac -d . jmp123/demo/*.java
javac -d . jmp123/output/*.java

(2)一起编译
javac -d . jmp123/decoder/*.java jmp123/demo/*.java jmp123/output/*.java

(3)将所有需要编译的java源文件路径放入一个文本文件,并命名,如1.txt
javac -d . @1.txt

2.java命令行编译使用外部jar包

javac -cp jdom.jar -d . IFlow.java NetworkUtil.java

执行:java -classpath jdom.jar; com.bu.qs.IFlow ;注意空格和分号;

3.java将类文件打成jar包

jar -cvf class.jar com\test\unityforandroid\*

这里的命令路径是基于Windows的,如果在Linux,Mac使用需要使用/分隔路径。

class.jar表示生成的jar名字
*表示所有的class文件

3.5使用jar命令将项目class文件打包为可执行的jar包

Linux Ubuntu20.04

  1. 准备一个Manifest文件MANIFEST.MF,内容如下,这里包名为game,主类名为RunGame,具体内容根据实际情况修改
Manifest-Version: 1.0
Main-Class: game.RunGame
  1. 执行命令
    jar -cvfm ok.jar OkGame/src/META-INF/MANIFEST.MF -C . game/ -C . *

-C参数特殊说明:-C参数后面需要指定两个参数,param1 param2;其中param1表示当前打包时的当前工作目录,param2参数需要添加的资源。如上命令就是将com/javartisan/ 与当前Main.*资源放到jar中;
参考,如果有资源,可以复制到和jar相同的目录即可正常运行。

3.6jar包引入后运行出现错误提示

com/brackeen/sound/SoundManager has been compiled by a more recent version of the 
Java Runtime (class file version 55.0), this version of the Java Runtime 
only recognizes class file versions up to 52.0

由于安装的java jdk目前是11,运行是环境是jre8,看这个意思jre不支持运行jdk11编译出来的class文件。
这种情况得怎么办呢?

咨询某一言后,
(1)方案1
提示使用javac -target 8 xxx.java进行编译
结果提示

警告: 目标发行版 8 与默认的源发行版 11 冲突

此方案不可行。
(2)方案2
使用安装了jdk8的Windows 7系统进行编译,编译通过,然后打包jar类库,引入项目后正常执行。

针对错误提示的class file version55和52这两个数字,使用GHex查看class文件对比了一下

重点看第八个字节,37和34代表的就是class file version,这里是16进制对应的就是55和52
jdk11编译的class
jdk11javacjdk8编译class
jdk8javac

4.警告:编码 GBK 的不可映射字符

  由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。当我们不加设置就编译时,相当于使用了参数:javac -encoding gbk XX.java,当然就会出现不兼容的情况。

解决办法是:应该使用-encoding参数指明编码方式:javac -encoding UTF-8 XX.java
【参考自他人blog,感谢】

adb(android debug bridge)

I.ADB启动与关闭app

adb shell am start com.youtube.film/.pad.SplashActivity

adb shell am force-stop com.youtube.film

II.ADB安装卸载apk

xxx为举例,根据实际情况变通
adb install -r xxx.apk -r是覆盖安装
adb install -t xxx.apk debug签名需要-t参数安装
adb uninstall xxx 根据包名卸载app

III.adb logcat抓日志用法

有时候连接usb调试后,日志显示一下就消失了,最后有一个EOF类似的提示,目测是日志缓存满了,目前不是很确定。
adb logcat -G 3m 如果日志时有时无,不能稳定输出log,执行下
​adb logcat -v time >~/log.txt 保存logcat日志到文件(迷茫的命令)

IV.adb查看设备的Android系统版本号和api level

adb shell getprop ro.build.version.release
adb shell getprop ro.build.version.sdk

V.根据包名查找启动activity

adb shell dumpsys package com.youtube.film

查找启动页面activity【
Activity Resolver Table:
  Schemes:
      youtube:
        9e6fd2 com.youtube.film/.activity.UnitActivity filter 1731e69
          Action: "android.intent.action.VIEW"
          Action: "android.intent.action.MAIN"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Category: "android.intent.category.LAUNCHER"
          Scheme: "youtube"
          Authority: "youtube.film.com": -1
          AutoVerify=true
。。。
】

VI.查找前台运行的app当前activity页面

Windows

adb shell dumpsys window | findstr mCurrentFocus

Mac/Linux

adb shell dumpsys window | grep mCurrentFocus

参考
https://blog.csdn.net/wangluonanhai/article/details/122584545

VII.

根据V命令的执行结果,制定命令,结果字符串中要包含’/‘和’filter’,命令如下
adb shell dumpsys package com.yougtube.film | grep \/ |grep filter
这个命令如果在Windows中执行,将grep变为findstr即可

一般执行完VII命令,第一行结果就包含我们想要的app启动页面了,再执行如下命令即可启动app。
adb shell am start com.yougtube.film/.MainActivity

IX.adb修改Android系统时间

adb shell

date "2023-03-10"
date "17:41:09"

实际测试发现日期和时间需要分别设置否则不管用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值