Android 命令行如何运行 JAR 文件

这篇具有很好参考价值的文章主要介绍了Android 命令行如何运行 JAR 文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


最近有位老哥问了一个问题,说如果将java的jar文件在Android中执行?这个其实很简单的一个问题,直接写个App放里面不就可以了么?但是人家说没有App,直接使用命令行去运行。说明这个需求的时候,把我给整懵了,没有很好的思路去想这个问题,所幸查了查资料,发现其实可以在Android中使用命令行来执行jar包命令的。

​ 首先,我们整理一下所需要用到的知识:

  • android虚拟机无论是dalvik还是art,都是无法直接运行java的jar文件的,需要有一个中间产物dex,这里就不多说了;
  • dex如何手动生成,需要用到dx/d8工具;
  • java的常用的编译命令,比如 javac / java cp
  • 常用的adb/linux命令,比如adb shell / adb push/ rm -rf 等等命令。

1. java项目

首先我们来看一下我们的java helloworld项目,是一个纯的java项目:

Android 命令行如何运行 JAR 文件,android,jar,java

当我们写好了我们的HelloWorld之后,可以手动通过命令行将java文件编译成class文件,命令行如下:

javac -source 1.8 -target 1.8 -d bin -cp lib/commons-cli-1.5.0.jar src/com/xing/HelloWorld.java

这里多说一句,

  • -source 1.8 -target 1.8 指定编译的源代码和生成的目标class文件的Java版本都为1.8
  • -d 是生成class文件的目录;
  • -cp 后面跟的 lib/commons-cli-1.5.0.jar 是我的HelloWorld.java 所依赖的jar包

所以这里编译时需要把它带上。

如果你需要使用 java 11版本,那么编译命令为:

javac -source 11 -target 11 -d bin -cp lib/commons-cli-1.5.0.jar src/com/xing/HelloWorld.java

2. 编译成dex文件

当生成好 class文件之后,我们需要将 class文件编译成 dex文件,有两种方式:dex和d8。d8是相较于dex更新效果更好的编译方式,都是可以在android编译工具文件夹 build-tools下面找到。下面两种方式写法都注明一下:

1. dx方式:
./Android/sdk/build-tools/28.0.2/dx --output=helloworld.jar --dex ./bin lib/commons-cli-1.5.0.jar
  • --output=helloworld.jar: 指定输出的dex文件的名称为helloworld.jar
  • --dex: 指定执行dex转换操作
  • ./bin: 要转换的Java类文件所在目录(刚刚生成的)
  • lib/commons-cli-1.5.0.jar: 额外的jar库文件,包含可能需要的额外类
2. d8方式:
./Android/sdk/build-tools/33.0.1/d8 --release lib/commons-cli-1.5.0.jar bin/Helloworld.class  --output helloworld.jar
  • --release:启用release模式优化转换
  • lib/commons-cli-1.5.0.jar:额外的jar库文件
  • bin/Helloworld.class:要转换的Java类文件
  • --output helloworld.jar:输出的dex文件

3. 上传文件

由于需要在Android环境中操作,所以我们先写一个 helloworld.sh 执行命令,该命令的好处是不用一直敲很多命令,直接执行这个.sh文件即可。文件中定义了jar运行的环境,然后最重要一个命令即 “exec app_process” 在Andorid环境中执行jar命令。

base=/data/local/tmp/helloworld
export CLASSPATH=$base/helloworld.jar
export ANDROID_DATA=$base
mkdir -p $base/dalvik-cache

exec app_process $base com.xing.HelloWorld "$@"

其它命令这里就不说了,主要聊一下 app_process的用法:

  • app_process:用于启动一个Android应用进程的执行文件,位于/system/bin目录下
  • $base:Jar包的路径,需要替换为实际的Jar包文件名
  • HelloWorld:这个是Jar包内的主类,也需要修改为实际的主类名
  • "$@":表示传递给Java程序的参数,$@会扩展成所有参数形式传递进去

那么定义完成 helloworld.sh文件只,主体文件目录就应该如下了:

|-bin
|  |____com/xing/HelloWorld.class
|
|-lib
|  |____commons-cli-1.5.0.jar
|
|-src
|  |____com/xing/HelloWorld.java
|
|-helloworld.jar
|-helloworld.sh 

那么我们就需要将目标文件上传到android中了,基本命令如下:

  1. 创建临时文件夹helloworld

    adb shell mkdir -p /data/local/tmp/helloworld
    
  2. 将helloworld.jar push到临时helloworld文件夹中:

    adb push helloworld.jar /data/local/tmp/helloworld
    
  3. 将helloworld.sh push到临时helloworld文件夹中:

    adb push helloworld.sh /data/local/tmp/helloworld
    
  4. 给helloworld.sh提权,使得其有可执行权限

    adb shell chmod 777 /data/local/tmp/helloworld/helloworld.sh
    
  5. 直接执行代码:

    adb shell /data/local/tmp/helloworld/helloworld.sh -p
    

这里的 -p 是我自定义添加的,如果一切运行正常,那么就应该可以看到运行的结果了:

Android 命令行如何运行 JAR 文件,android,jar,java

当然,如果你有什么疑问的话,可以与我一起探讨,可以加我v:javainstalling,备注[Jar]即可。文章来源地址https://www.toymoban.com/news/detail-658363.html

到了这里,关于Android 命令行如何运行 JAR 文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java -jar参数详解:掌握Java可执行JAR文件的运行技巧

    作为一种常用的开发语言,Java经常使用可执行的JAR(Java Archive)文件来打包和分发应用程序。使用java -jar命令运行JAR文件是一种方便快捷的方式。本文将详细介绍java -jar命令的各种参数,帮助您充分利用这个功能。 一、简介 java -jar命令用于运行可执行的JAR文件。它会自动查

    2024年02月16日
    浏览(43)
  • Android studio打包生成jar包文件

    将应用模块application转换成库模块library后生成jar包 1、首先打开build.gradle文件,注意这里是module目录下的,在这个文件我们需要做两个操作: 将com.android.application改成com.android.library 注释掉applicationId 2、打开清单文件AndroidManifest.xml 首先将application配置的属性去掉 然后再去掉

    2024年02月01日
    浏览(40)
  • 【Linux】linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序

    需求:发现线上的 iotp-irsb-server-v1.0.0.2.jar 包中配置文件的日志级别配置错误,需要在线修改jar包中文件的application-prod.yml的日志级别配置,修改完成后并重启该jar包。 进入到该jar包所在的目录,使用 vi 命令打开 jar 包内文件列表。 1、vi iotp-irsb-server-V1.0.0.2.jar 如下图所示:

    2024年02月08日
    浏览(51)
  • 使用java 运行jar文件的方法

    当JAVA代码编写完成,需要发布时,我们通常会打包成jar文件,通过java命令来运行。java运行程序通常有两种方式: 1.java -jar xxx.jar 这种模式比较简单,适用于所有的class/资源都打包到一个jar文件中的情况,对于初学者,开发简单的程序时,可以采用这种方式。而对于实际的项

    2024年02月15日
    浏览(37)
  • 【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行

    测试环境(Linux)的代码(jar包)拉取到本地电脑(Windows10),然后连接本地电脑上的数据库并在本地电脑运行。 前提:Windows10电脑,jar包文件,本地电脑已安装好MySQL数据库。 需求:需要将下面jar包中配置文件的数据库连接地址修改成本地电脑连接地址,并把修改后的配置

    2024年02月12日
    浏览(57)
  • Java 运行jar包变更配置文件与变量

    为实现快速搭建和开发,项目以Springboot框架搭建,springboot搭建的项目可以将项目直接打成jar包并运行,无需自己安装配置Tomcat或者其他服务器,是一种方便快捷的部署方式。 假设项目以最常规的方式打包成一个整体的jar包部署,即配置文件包含在jar包里,就会出现一个问题

    2024年02月07日
    浏览(40)
  • Android studio中如何导入jar包(详细教程)

    进入Android studio 点击Android 选择project 复制好要导入的jar包,把jar包粘贴在app——libs里 导入后 右击jar包,再选择Add As Library..... 选择OK 好了(自动添加依赖)

    2024年02月12日
    浏览(39)
  • Android Studio如何打jar包和aar包并使用

    之前有篇文章介绍了so库的生成和使用,看这里,但是,如果我们想把我们写的so库,通过java接口的方式提供出去,一般我们是打成jar包或者aar的形式提供,这篇文章介绍下如何打成jar包的,我们提供给使用方的是jar包和so库; 总的来说,AS打包生成jar包可以分成两类: 第一

    2024年02月01日
    浏览(46)
  • 【Java】java | 将可运行jar打包成exe可执行文件

            1、javafx桌面程序,但又不想安装jre环境         2、需要将可执行jar打包成exe         3、使用工具exe4j 1、下载exe4j 2、安装 说明1: 在d盘建个exe4j的文件夹 说明2: 建个output文件jar,存放生成后的exe 3、运行 4、目录介绍 Welcome: 工具介绍;Open可以打开历史的

    2024年02月03日
    浏览(43)
  • 运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar

    朋友 我当你一秒朋友 朋友 我当你一世朋友 奇怪 过去再不堪回首 怀缅 时时其实还有 运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar 基本可以断定,是jar不完整导致的。不完整!!!记住 检查1: 检查是不是传输中断了,有些传输命令会超时,一超时就断了。 检查

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包