如何让Android系统或Android应用执行shell脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让Android系统或Android应用执行shell脚本相关的知识,希望对你有一定的参考价值。

android中执行shell有两种方式:
直接在代码中用java提供的Runtime 这个类来执行命令,以下为完整示例代码。
public void execCommand(String command) throws IOException
// start the ls command running
//String[] args = new String[]"sh", "-c", command;
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command); //这句话就是shell与高级语言间的调用
//如果有参数的话可以用另外一个被重载的exec方法
//实际上这样执行时启动了一个子进程,它没有父进程的控制台
//也就看不到输出,所以需要用输出流来得到shell执行后的输出
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
// read the ls output
String line = "";
StringBuilder sb = new StringBuilder(line);
while ((line = bufferedreader.readLine()) != null)
参考技术A 在应用中启动服务在应用程序中调用:do_exec(start usblp_test);do_exec的实现如下: private String do_exec(String cmd) String s = "/n"; try Process p = Runtime/用户名与密码都是www linuxidc com具体下载目录在 /2012年资料/12月/13日/如何让Android系统或Android应用执行shell脚本二、编译源码执行shell脚本这个方法很简单,脚本已经写好了,现在要解决的问题是在什么时候怎么执行这个脚本,经过验证最佳的位置在system/core/init/init.c,main函数中的如下位置, queue_builtin_action(queue_property_triggers_action, "queue_propety_triggers");#if BOOTCHART queue_builtin_action(bootchart_init_action, "bootchart_init");#endif /*add by weijing */ system("exec /system/bin/sh /data/setip/init.djstava.sh"); /*end by weijing */ for(;;)

如何在android中为按钮设置动画?

【中文标题】如何在android中为按钮设置动画?【英文标题】:How to animate button in android? 【发布时间】:2013-08-14 00:57:04 【问题描述】:

我正在制作一个 android 应用程序,并且我有一个按钮可以通向一个消息传递位置。在带有按钮的 Activity 上,我检查是否有任何未读消息,如果有,我想对按钮执行一些操作,让用户知道有未读消息。

我正在考虑让按钮水平振动,例如每 2 或 3 秒摇晃 3 次。

我知道如何在后台运行一个线程,它每 x 毫秒执行一次。但是我不知道该怎么做就是水平摇晃它3次。

有人可以帮忙吗?

我正在考虑使用 sin 函数,对于动画,我可以使用 sin 函数的输出来获取上下的值,我可以设置按钮的水平位置......但这似乎也是极端,有没有更好的方法?

【问题讨论】:

你想要动画还是按钮按下效果?? 【参考方案1】:

我无法评论 @omega 的评论,因为我没有足够的声誉,但该问题的答案应该是这样的:

shake.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="100"          <!-- how long the animation lasts -->
    android:fromDegrees="-5"        <!-- how far to swing left -->
    android:pivotX="50%"            <!-- pivot from horizontal center -->
    android:pivotY="50%"            <!-- pivot from vertical center -->
    android:repeatCount="10"        <!-- how many times to swing back and forth -->
    android:repeatMode="reverse"    <!-- to make the animation go the other way -->
    android:toDegrees="5" />        <!-- how far to swing right -->

Class.java

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
view.startAnimation(shake);

这只是做你想做的事情的一种方式,可能还有更好的方法。

【讨论】:

如何横向摇晃?【参考方案2】:

在动画文件夹中创建shake.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0" 
        android:toXDelta="10" 
            android:duration="1000" 
                android:interpolator="@anim/cycle" />

和 anim 文件夹中的 cycle.xml

<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:cycles="4" />

现在在您的代码中添加动画

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
anyview.startAnimation(shake);

如果你想要垂直动画,将fromXdelta和toXdelta值改为fromYdelta和toYdelta值

【讨论】:

这只是让它移动right然后立即回到原始位置4次,但是我如何让它移动right然后left,然后right然后@987654328 @像摇晃效果一样回到原来的位置? 如何让这个动画连续发生? 这个答案对我在 android 中实现类似抖动的动画很有帮助。 嘿@RVG 感谢代码,但是如何更改摇动速度?【参考方案3】:


类.Java
@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_with_the_button);

    final Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.milkshake);
    Button myButton = (Button) findViewById(R.id.new_game_btn);
    myButton.setAnimation(myAnim);

对于onClick的按钮

myButton.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        v.startAnimation(myAnim);
    
);

res目录下创建anim文件夹

右键,res -> New -> Directory

为新目录命名 anim

创建一个新的 xml 文件,将其命名为 milkshake


milkshake.xml

<?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="100"
        android:fromDegrees="-5"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="10"
        android:repeatMode="reverse"
        android:toDegrees="5" />

【讨论】:

【参考方案4】:
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;

public class HeightAnimation extends Animation 
    protected final int originalHeight;
    protected final View view;
    protected float perValue;

    public HeightAnimation(View view, int fromHeight, int toHeight) 
        this.view = view;
        this.originalHeight = fromHeight;
        this.perValue = (toHeight - fromHeight);
    

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) 
        view.getLayoutParams().height = (int) (originalHeight + perValue * interpolatedTime);
        view.requestLayout();
    

    @Override
    public boolean willChangeBounds() 
        return true;
    

我们去:

HeightAnimation heightAnim = new HeightAnimation(view, view.getHeight(), viewPager.getHeight() - otherView.getHeight());
heightAnim.setDuration(1000);
view.startAnimation(heightAnim);

【讨论】:

【参考方案5】:

依赖

将它添加到您的根 build.gradle 的存储库末尾:

allprojects 
repositories 
    ...
    maven  url "https://jitpack.io" 

然后添加依赖 dependencies compile 'com.github.varunest:sparkbutton:1.0.5'

用法

XML

<com.varunest.sparkbutton.SparkButton
        android:id="@+id/spark_button"
        android:layout_
        android:layout_
        app:sparkbutton_activeImage="@drawable/active_image"
        app:sparkbutton_inActiveImage="@drawable/inactive_image"
        app:sparkbutton_iconSize="40dp"
        app:sparkbutton_primaryColor="@color/primary_color"
        app:sparkbutton_secondaryColor="@color/secondary_color" />

Java(可选)

SparkButton button  = new SparkButtonBuilder(context)
            .setActiveImage(R.drawable.active_image)
            .setInActiveImage(R.drawable.inactive_image)
            .setDisabledImage(R.drawable.disabled_image)
            .setImageSizePx(getResources().getDimensionPixelOffset(R.dimen.button_size))
            .setPrimaryColor(ContextCompat.getColor(context, R.color.primary_color))
            .setSecondaryColor(ContextCompat.getColor(context, R.color.secondary_color))
            .build();

【讨论】:

【参考方案6】:

Kotlin 中,在 XML 之后是这样的:

定义视图:

 val playDel = findViewById<ImageView>(R.id.player_del)

查找动画:来自 Android Lib 的此处

val imgAnim = AnimationUtils.loadAnimation(this, android.R.anim.fade_out)

连接到视图

 playDel.animation=imgAnim

【讨论】:

【参考方案7】:

首先创建shake.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="100"          
    android:fromDegrees="-5"        
    android:pivotX="50%"            
    android:pivotY="50%"            
    android:repeatCount="10"        
    android:repeatMode="reverse"    
    android:toDegrees="5" /> 

   

类.java

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
view.startAnimation(shake);

【讨论】:

以上是关于如何让Android系统或Android应用执行shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

怎么让Android系统或Android应用执行shell脚本

(Android) 如何取消默认系统行为/事件

如何在android中为按钮设置动画?

如何让android打印掉崩溃系统应用程序的核心转储?

如何通过/proc文件系统访问Android应用的可执行文件

Android系统签名apk,让应用获取系统级权限