`
lydawen
  • 浏览: 471658 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

shell 解析 class package并复制到指定包路径

 
阅读更多

说明:讨论研发,QA流程是否规范的 goto end

场景:java开发,公司QA在测试应用时,有时为点小问题加快速度测试(研发环境不方便测试),研发并不会重新tag送测而是直接给几个class给QA先验证下

麻烦一:QA需要手工备份原来的class并将新class替换原来的class。

麻烦二:研发需要将包路径告知QA,QA需要手工一个一个放,遇到class 较多时容易出错。

麻烦三:。。。。

 

工具实现的功能及方法:

1、javap反编译,结合grep/sed 获取到包路径。

2、完成class的备份及复制。

 

脚本如:

 

echo "###############################class 解析复制工具#####################################"
echo "##解析当前目前下所有.class文件,并复制到对应包路径;如文件存在则先备份再复制          #"
echo "##使用方法: #pp.sh <path>  path:class根目录,即类都将复制到以这个为根目录的对应包下。#"
echo "##################################hzdev###############################################"
binPath=$1
if [ ! -n "$binPath" ]; then
        echo 未指定class根目录,程序退出
        exit 0
        #binPath=pwd|sed 's/ //g'
fi
echo ============class根目录:$binPath

timeStamp=`date '+%s'`
 

for f in *.class
do
################ # echo ========Current class:$f
  className=$(echo  "$f"|sed -e's/\.class//g')
  className_=$(echo $className| sed 's/\$.*//g')
  package=$(javap $className|grep -oP '(?<=class ).*(?=\.'$className_'.* extends)'|sed  -e's/\./\//g')
  #echo "className:"$className
  #echo "package:"$package
 
  classFile="$binPath"/"$package"/"$f"
  classPath="$binPath"/"$package"

#  echo $classFile  
#check path exists
  if [ ! -d "$classPath" ];then
        echo =====目录$classPath不存在,创建目录
        mkdir $classPath -p
  fi

#check class file exists  
  if [ ! -f "$classFile" ]; then
        echo "复制文件$f------------>$classFile"
        cp $f $classFile
  else
        bakFile="$classFile"."$timeStamp"
        echo "=======>class文件存在,备份为 $bakFile"
        echo "复制文件$f------------>$classFile"
        mv $classFile $classFile.$timeStamp
        cp $f $classFile
  fi  

echo "******************************************************************************************"

done

 

分享到:
评论

相关推荐

    Java中关于package的总结.docx

    ### Java中关于Package的深入解析 #### Package的概念与作用 在Java编程语言中,`package`是一种用于组织类和接口的机制。通过这种方式,开发者能够有效地管理类库,避免命名冲突,并提供了一种访问控制机制。 ##...

    用命令编译运行包java源代码.docx

    `-d classes`指定了编译后的`.class`文件输出到`classes`目录。 - 结果:`classes\org\xalg\good\Good.class` - **编译HelloWorld.java** 在`pro`目录下执行: ```shell javac -d classes -cp classes ...

    adb命令大全.md

    - `adb pull /data/anr/traces.txt C:\Users\Administrator\Desktop\traces.txt`: 将设备上的`traces.txt`文件复制到计算机的指定路径。 - `cat xxx/xxx/ &gt;&gt; /sdcard/`: 将指定文件的内容追加到SD卡根目录下的文件...

    Android自动打包、签名、优化、上传ANT脚本

    - **application.package**:定义应用的包名。 - **bin.dir**:JDK 的 bin 目录路径。 - **app.name**:定义应用名称。 - **app.source.path**:源码存放路径。 - **jdk.home**:JDK 安装路径。 - **output....

    android 命令行启动

    其中`-n`标志表示后面跟着的是组件名(ComponentName),由包名(package name)和类名(class name)组成,格式为:`&lt;package&gt;/&lt;class&gt;`。 - **示例** 例如,启动时钟应用: ```shell adb shell am start -n ...

    Android之在linux终端执行shell脚本直接打印当前运行app的日志的实现方法

    这个脚本首先检查手机是否已连接到Linux终端(通过`adb devices`命令),如果连接成功,它会获取当前运行应用的包名(通过`adb shell dumpsys activity top`并使用awk进行解析),然后调用`pidcat.py`脚本并传入包名...

    Servlet开发[参考].pdf

    - 将`HelloServlet.class`所在的`com`包复制到`\WEB-INF\classes`下。 - 创建`web.xml`文件来配置Servlet。 ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    新版Android开发教程.rar

    蓝牙 (class 1) ;四频 (850 , 900 , 1800 , 1900) ;支持 3G , 802.11b 和 802.11g 。----------------------------------- Android 编程基础 5 互联网 支持 HTTP 、 WAP Push 和 xHTML ;支持 POP 、 IMAP 、 ...

    Android Monkey测试执行策略及标准

    基本的Monkey命令是`adb shell am instrument -w -e class com.android.monkeyrunner.MonkeyRunner com.android.commands.monkey.MonkeyDevice/your.package.name`,这里的`your.package.name`需要替换为你的应用包...

    PyPI 官网下载 | cmd.py-3.11.tar.gz

    使用这个包的第一步通常是将其安装到你的Python环境中。如果你的系统已经安装了Python和pip(Python的包管理器),你可以通过以下命令进行安装: ```bash pip install path/to/cmd.py-3.11.tar.gz ``` 这里的"path...

    android 实时监听读取微信最新消息

    在Android平台上实现实时监听并读取微信最新消息是一项技术挑战,因为这涉及到对第三方应用数据的访问,而Android系统默认是禁止这样的行为的。不过,通过一些特定的技术手段,我们可以在一定程度上实现这一功能。...

    Test_Framework_training.pdf

    这条命令指定了测试类的路径,并使用JUnit的文本界面运行器(TestRunner)来执行测试。 #### 七、总结 本文介绍了Android Test Framework的基础知识,包括其架构、如何定义测试用例以及如何编写和运行测试。通过这些...

    Android原生嵌入React Native详解

    `setBundleAssetName`和`setJSMainModuleName`用于指定JavaScript代码的入口和加载路径,`addPackage(new MainReactPackage())`添加了核心的React包,确保React运行环境的正常工作。 此外,`MainActivity`还需要...

Global site tag (gtag.js) - Google Analytics