1.创建一个update目录,该目录包含自己想要升级或替换的内容
例如:
update/
update/system
update/system/app
update/system/app/doodle_jump.apk
update/META-INF
update/META-INF/com
update/META-INF/com/google
update/META-INF/com/google/android
update/META-INF/com/google/android/update-script
update/META-INF/com/google/android/update-binary
该目录包含doodle_jump游戏,升级后该apk将出现在手机的/system/app/目录下。
META-INF目录下update-binary这个文件是根据各个系统的源码编译出来的,所以这个文件一定要用系统的,这里我就不提供下载了。
META-INF目录下包含升级脚本,update-script脚本的内容如下:
show_progress 0.500000 0
copy_dir PACKAGE:system SYSTEM:
show_progress 0.100000 0
大家可以根据自己的升级内容添加相应的命令。
2.创建压缩包
在update/目录下运行:
$ zip -qry ../update.unsigned.zip ./
将在update/的父目录下产生update.unsigned.zip 压缩包
3.签名
$ java -Xmx512m -jar signapk.jar -w testkey.x509.pem testkey.pk8 update.unsigned.zip update.zip
解决方法:Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122)
at org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:25) at org.conscrypt.NativeCrypto.(NativeCrypto.java:54)
at org.conscrypt.OpenSSLBIOInputStream.(OpenSSLBIOInputStream.java:34)
at org.conscrypt.OpenSSLX509Certificate.fromX509PemInputStream(OpenSSLX509Certificate.java:119)
at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:220)
at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:216)
at org.conscrypt.OpenSSLX509CertificateFactory$Parser.generateItem(OpenSSLX509CertificateFactory.java:94)
at org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:272)
at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339)
at com.android.signapk.SignApk.readPublicKey(SignApk.java:182)
at com.android.signapk.SignApk.main(SignApk.java:1087)
java -Xmx512m -Djava.library.path="out/host/linux-x86/lib64" \
-jar out/host/linux-x86/framework/signapk.jar \
-w build/target/product/security/platform.x509.pem \
build/target/product/security/platform.pk8 \
update.unsigned.zip update.zip
其中里面的路径可以自己定义,也可以把lib64,signapk.jar,platform.x509.pem,platform.pk8放在同一目录下;
signapk.jar,platform.x509.pem,platform.pk8与具体安卓系统相关;
-Xmx512m 这个是根据文件的大小去给值,我的比较小所以用512
命令如下:
$ java -Xmx512m -Djava.library.path="lib64" -jar signapk.jar -w testkey.x509.pem testkey.pk8 update.unsigned.zip update.zip
生成签过名的update.zip包,其中
4.将签过名的update.zip包放入手机sdcard根目录,
重启系统进入recovery模式,选择
apply update.zip,成功后重启手机
ok,现在手机上已经有doodle_jump游戏了,并且它无法被删除~