android jar包 权限,Android系统启动执行jar程序

看雪里有人问到android是不是只能执行apk程序?

除了原生程序和脚本外,android是可以启动执行封装java程序的jar包的。

实现流程如下:

65a3d0910c877cffc1a1ed718e6697b0.png

第一步新建java程序

public class Main {

public static void main(String[] args) {

for(int i=1;i<10;i++){

System.out.println("this is the test index"+i);

}

}

}

并将程序导出为jar命令为test.jar包。

第二步,将javajar包转为androidjar包。

1.首先,找到dx工具所在文件夹,如android-sdk/build-tools/20.0.0,并将该文件夹加入到环境变量PATH中;

2.其次,执行编译命令dx –dex –output=classes123.dex test.jar

3.再将dex文件打包成android版本的jar,aapt add testandroid.jar classes123.dex

4.将该jar包push到手机的/system/framework目录下

5.修改jar包的权限为777

2.编写一个linux shell脚本

2.1.新建一个文本,命名为run_bktools.sh

base=/system

export CLASSPATH=$base/framework/testandroid.jar

exec app_process base/bincom.jaytang.linux.Main"@”

CLASSPATH为jar包的路径,com.larack.bktools.BKMain为jar包的main函数所在的类,”$@”表示把当前参数传入到main中。

2.2.将该sh文件run_bktools.sh push到手机/system/bin目录下,并且修改权限为777

2.3.最后测试利用sh脚本启动jar包

./run_bktools.sh

实现root shell命令的android程序如下:

package com.example.androidshell;

import java.io.DataOutputStream;

import java.io.IOException;

import android.app.Activity;

import android.app.ActionBar;

import android.app.Fragment;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Toast;

import android.os.Build;

public class MainActivity extends Activity {

private static final String TAG = "shell";

private static final String CMD = "run_bktools.sh";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

int result = -1;

result = execRootCmdsilent(CMD);

//查看返回值 如果是-1就fail

if (result == -1) {

Toast.makeText(getApplicationContext(), "fail", 0).show();

} else {

Toast.makeText(getApplicationContext(), "sucess", 0).show();

}

}

//执行shell命令的方法

private int execRootCmdsilent(String cmd) {

int result =-1;

DataOutputStream dos=null;

try {

//申请su权限

Process p=Runtime.getRuntime().exec("su");

//拿到输出流

dos=new DataOutputStream(p.getOutputStream());

Log.i(TAG, cmd);

dos.writeBytes(cmd+"\n");

dos.flush();

dos.writeBytes("exit\n");

dos.flush();

p.waitFor();

//改变退出的命令的值

result=p.exitValue();

//将成功信息打印出来

Log.i(TAG, "Success execRootCmdSilent(" + cmd + ")=" + result);

} catch (Exception e) {

// TODO: handle exception

Log.i(TAG,"fail execRootCmdSilent("+cmd+")"+result);

}finally{

if(dos!=null)

{

try {

dos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

return result;

}

}

最后在eclispe的控制台能看到

bfc0c65f716d15273bb797adccc2af07.png

参考:http://www.cnblogs.com/larack/p/4139766.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值