安卓开机自启动app
前言工作需要搞一个工业平板的开机自启动实现,最终搞定,记录在此。初次探索在安卓中,想要实现app开机自动启动,需要实现拦截广播android.permission.RECEIVE_BOOT_COMPLETED,并且需要使用静态注册广播的方法(即在AndroidManifest.xml文件中定义广播)1.在应用源码里的AndroidManifest.xml添加如下内容package="com.exa
前言
工作需要搞一个工业平板的开机自启动实现,最终搞定,记录在此。
初次探索
在安卓中,想要实现app开机自动启动,需要实现拦截广播android.permission.RECEIVE_BOOT_COMPLETED,并且需要使用静态注册广播的方法(即在AndroidManifest.xml文件中定义广播)
1.在应用源码里的AndroidManifest.xml
添加如下内容
package="com.example.test" //填自己应用的包名,涉及到包名的地方都修改一下
android:sharedUserId="android.uid.system">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="com.example.test.myReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
2.上面的myReceiver是需要你自己写的类,继承了BroadcastReceiver的,代码如下:
public class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
Intent i = new Intent(context, MainActivity.class);//填你需要自启动的主页面名称
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
3.安装app到手机上,然后启动一次程序(据说安卓4.0以后,必须先启动一次程序才能接收到开机完成的广播,目的是防止恶意程序)
备注:如果你的安卓有开机自启动管理设置,请先去设置里打开你要自启的app的权限,允许它开机自启动。
参考来源:android实现程序开机自启动 - jetereting - 博客园
做到这里的时候,我去尝试了几次重启都没有成功。后来又搜索了是不是要root权限,但是我开启了root权限还是不行。最终的解决如下:
最终实现
1.关键点:开机自启动 apk 需要系统签名
安卓需要这个两个文件:
有的安卓源码里可能有,参照上图的目录。我这个工业平板里没有,去相应的网站上下载这两个。
这里需要特别说明一下
如果使用的设备厂家没有对这个改动过,则使用google给的这两个就行了
地址如下:https://android.googlesource.com/platform/build/+/donut-release/target/product/security/
除此之外,还需要keytool工具
地址如下:https://github.com/getfatday/keytool-importkeypair
参考链接:Android中获取系统级权限(sharedUserId的使用以及INSTALL_FAILED_SHARED_USER_INCOMPATIBLE问题的解决) - 简书
2.生成签名文件
参考这篇文章:AndroidStudio 配置系统签名 - 简书
生成keystore文件
- 将keytool-importkeypair、platform.pk8和platform.x509.pem文件放在同一个目录下,执行如下命令,会生成platform.keystore文件:
sh keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias system
- -p 表示新生成的keystore的密码是什么,这里为android,可以自己随便设置,但是请记住!后面要用。
- -pk8 表示要导入的pk8文件的名称,可以包括路径,pk8文件用来保存private key的,是个私钥文件。
- -cert 表示要导入的证书文件,和pk8文件在同一个目录,pem这种文件就是一个.x509的数字证书,里面有用户的公钥等信息,是用来解密的,这种文件格式里面不仅可以存储数字证书,还能存各种key。(有兴趣的可以点击此了解一下)
- -alias 表示给生成的platform.keystore取一个别名,这个名字只有我们在签名的时候才用的到,这里我们生成的文件名是system。这个名字,可以随便取,但是你自己一定要记住。
基本上按照这篇文章来就行。
注意:上述命令没法直接在wins中直接执行,这个时候可以用git工具,在该工具所在的目录下,右键->git bash here,然后再执行即可生成签名文件。
注意:一定要版本要一致,要么选release要么选debug,查看你的Build Types就知道你选的是什么版本了。
在build.gradle文件中可手动添加下面内容:
signingConfigs {
debug {
storeFile file('../signAPK/platform.keystore')
storePassword 'android'
keyPassword 'android'
keyAlias 'system'
v1SigningEnabled true
v1SigningEnabled true
}
release {
storeFile file('../signAPK/platform.keystore')
storePassword 'android'
keyPassword 'android'
keyAlias 'system'
v1SigningEnabled true
v1SigningEnabled true
}
或者在File->Project Structure->Modules->app->Signing Configs里自己设置,设置完后gradle文件里也会出现上述的配置代码。
基本按照这个做没有啥问题,如果还有,可以尝试rebuild或者clean。
更多推荐
所有评论(0)