找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 16670|回复: 0

[原创教程] ej.sh脚本 -- 在手机上运行java第三方

[复制链接]
发表于 2017-8-6 22:57:12 | 显示全部楼层 |阅读模式
本帖最后由 happy886rr 于 2017-8-6 23:06 编辑

对于java程序是不能在安卓系统下直接运行的。我们需要用dx工具将java字节码转化为安卓虚拟机字节码(命令如下):

  1. @echo off
  2. pushd "%~dp0wkpath"
  3. echo ----------------Jar2dex Script----------------
  4. ::: 2>nul java -version || echo Needs Java && pause && exit

  5. if /i "%~x1"==".jar" (
  6.         2>nul del /f /q ".\classes.dex"
  7.         echo 正在生成DEX文件...
  8.         java -jar dx.jar --dex --output=classes.dex "%~f1"
  9.         if exist ".\classes.dex" (
  10.                 echo 正在添加dex文件到 "%~f1"
  11.                 aapt add "%~f1" classes.dex
  12.         )
  13. ) else (
  14.         echo 非jar包、或无输入文件.
  15. )

  16. if exist ".\classes.dex" (
  17.         2>nul del /f /q ".\classes.dex"
  18. )
  19. echo 执行完毕.
  20. echo ----------------------------------------------
  21. pause
复制代码
此时生成的jar包就具全平台运行性。但手机的模拟终端输入不便,因此 ej脚本 意在解决手机运行jar的繁琐输入。脚本内容如下:

  1. #!/system/bin/sh
  2. # ej script by happy
  3. # Set the operating system type
  4. USE_ANDROID="true"

  5. if [ $# -ne 2 ]
  6. then
  7.         echo "Usage: ej.sh [class path] [class name]"
  8.         exit 1
  9. else
  10.         echo [===* Welcome to use ejar script *===]

  11.         export CLASSPATH="${1}"
  12.        
  13.         jarname=${1##*/}
  14.         jarname=${jarname%.*}

  15.         if [ "$jarname" == "" ]
  16.         then
  17.                 echo "You must input a jar file!"
  18.                 exit 1
  19.         fi

  20.         if [ "$USE_ANDROID" == "true" ]
  21.         then
  22.                 2>/dev/null app_process "${1}" ${2}
  23.                 if [ $? -ne 0 ]
  24.                 then
  25.                         echo "May be your input is wrong, or chmod the file's permissions."
  26.                         exit 1
  27.                 fi
  28.         else
  29.                 2>/dev/null java -version
  30.                 if [ $? -ne 0 ]
  31.                 then
  32.                         echo You needs java!.
  33.                         exit 1
  34.                 fi
  35.         fi

  36.         while [ true ]
  37.         do
  38.                 echo -n "[>>> ${jarname} "
  39.                 read args

  40.                 if [ "$args" == "--quit" ] || [ "$args" == "--exit" ]
  41.                 then
  42.                         break;
  43.                 fi

  44.                 if [ "$USE_ANDROID" == "true" ]
  45.                 then
  46.                         app_process "${1%/*}" ${2} ${args}
  47.                 else
  48.                         java -classpath "${1}" ${2} ${args}
  49.                 fi
  50.         done

  51.         echo -e "[<<<]"
  52. fi
复制代码
将脚本存为ej.sh,用adb命令将其推送到手机临时目录 /data/local/tmp,并设置权限为0755,命令如下:

  1. adb kill-server
  2. adb wait-for-device
  3. adb push .\ej.sh /data/local/tmp
  4. chmod 0755 ./ej.sh
复制代码
首次运行,只需输入如下命令(./ej.sh [jar包的路径]  [要执行的类]):

  1. ./ej.sh jcalc.jar com.android.jcalc.Main
复制代码
运行图如下(图片均为外部链接):

之后每次运行,直接输入传递参数即可。演示如下:
[>>> jcalc sin3*cbrt(e)
sin3*cbrt(e)
OriginalExp: sin3*cbrt(e)
Revpolish:   3 sin e cbrt *
Result:      0.196948836677

[>>> jcalc 5*(arctan(cos(sin(ln(lg(2.71828))))))
5*(arctan(cos(sin(ln(lg(2.71828))))))
OriginalExp: 5*(arctan(cos(sin(ln(lg(2.71828))))))
Revpolish:   5 2.71828 lg ln sin cos arctan *
Result:      3.178987410777

[>>> jcalc --quit
--quit
[<<<]
备注:(linux下亦可兼容)请使用 --quit 或 --exit 退出 ej.sh脚本 .

评分

参与人数 1技术 +1 收起 理由
老刘1号 + 1 不明嚼栗

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:23 , Processed in 0.018162 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表