天天看点

工作笔记 - android APP开机自启动及通过adb安装系统级apk

本篇记录时间为2023年7月21号。

android原生开发,真的有好久没弄了, 之前弄的那几年,开发IDE是eclipse,android 系统好像还是2.x版本, 现在都android 13了,时间过得是真的快。

现工作有几个关于android需求,因太久没弄android, 环境也是折磨了我好几天。

需求如下:

需求1: 更换app名字及icon。

需求2: app开机自启动,还要避免用户卸载应用。

环境检查

目标设备是android 10的工控屏, 有root权限,root权限很重要,这跟后面能否安装系统级apk有关。

// 通过adb来检查android机是否有root权限
// 1. adb连接android机,判断电脑是否通过adb连接上了android机,可终端运行下面命令查看,连接上了会有设备显示,如图1
adb devices

// 2. 进入android设备系统终端,终端输入如下命令, 如图2.
adb shell

// 3. 输入su, 来判断是否有root权限
// 输入命令后,此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。
su

// 4. 查询设备用户列表。(当我用su切换至root用户后,若不切换,下次进入也是root用户,尴尬的是普通用户名我也忘记了)
ls -l /data/system/users

// 5. 切回普通用户, 这里username要对应你设备上的用户名
su username
           
工作笔记 - android APP开机自启动及通过adb安装系统级apk

图1: 判断电脑是否连接上了android机

工作笔记 - android APP开机自启动及通过adb安装系统级apk

图2: 电脑通过adb shell进入android系统终端

更换app名字及icon

// 当前IDE使用的是Android Studio
// 1. 更换app名字
打开AndroidManifest.xml-->检查application-->找到android:label-->找到strings.xml对应的标签更改即可

// 2. 更换icon,如图3.
步1: 选择工程res文件夹,右键新建-->Image Asset
步2: 在打开的Asset Studio里,Source Asset --> Path, 选择一张本地的icon图
步3: 在Scaling->Resize, 调整大小,使之适配
步4: 保存即可。           
工作笔记 - android APP开机自启动及通过adb安装系统级apk

图3: icon操作面板

app开机自启动

Android设备(比如我们的Android手机、Android智能硬件终端......)开机时,会发送一条开机广播:android.intent.action.BOOT_COMPLETED。我们通过监听开机广播来实现。(即:我们写一个广播接收器,接收开机广播,通过Intent跳转应用的入口Activity)

// 1. 在AndroidManifest.xml中声明权限
<!-- 接收Android设备开机时发送的开机广播所需的权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

// 2. 自定义实现 Android应用开机自启动的广播接收器,源码如下:	
// SplashActivity为启动的Activity
public class BootBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //Android设备开机时会发送一条开机广播:"android.intent.action.BOOT_COMPLETED"
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent splashIntent = new Intent(context, SplashActivity.class);
            splashIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(splashIntent);
        }
    }
}

// 3.在AndroidManifest.xml中静态注册广播
<receiver
    android:name=".BootBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="100">
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>
           

adb安装系统级apk

// 1. 把已打包好的apk, 安装至/system/app/即可
adb root
adb remount
adb push xx.apk /system/app/
  
// 2. 查看是否成功及设置权限
adb shell
cd /system/app/
chmod 777 xx.apk

// 3. 重启android机器,然后看桌面是否有指定的应用,也可尝试卸载,你会发现无卸载按钮了