Android 模拟器环境
genymotion 7.0
- 修改AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system"
package="com.example.myapplication">
<uses-permission android:name="android.permission.SHUTDOWN"/>
</manifest>
android:sharedUserId="android.uid.system"
添加完这个时候直接运行app是打开不了的,需要用当前Android的签名文件给打包后的apk重新签名。
- 添加关机代码
Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
intent.putExtra("android.intent.extra.KEY_CONFIRM", false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
代码来源于网络
-
打包apk
Android Studio : Build -> Generate Signed Bundle/Apk ..... 不详细说了
-
使用签名文件 重新生成apk
signapk.jar :路径 /prebuilts/sdk/tools/lib/signapk.jar
platform.pk8 :路径 /build/target/product/security/
platform.x509.pem:路径 /build/target/product/security/
(Ubuntu 需要下面文件,window不需要)
libconscrypt_openjdk_jni.so :路径 /prebuilts/sdk/tools/linux/lib64/
定制的系统platform.pk8和platform.x509.pem由厂家提供。
- 重新签名(Ubuntu)
//将上面4个文件放在同一个路径 例如放在:/home/user/Android这个目录里面
cd Android
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk out.apk
app-release.apk 为Android studio 打包出来的apk 。如果没有放在当前目录下请填写绝对路径。
out.apk 为签名后的apk路径,直接写out.apk 生成当前目录下
- 重新签名(Window)
java -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk out.apk
和上面的一样 ,主要的是Window 最好用java8使用上面命令,我用java11会报错
下面贴上用到的文件
Android 7.0 签名文件