使用命令生成update.zip以及添加升级包检验签名功能

一般普通ota升级都是直接调用RecoverySystem.installPackage,让系统进入recovery,然后在recovery升级Android系统,但是存在一个缺点。如果他人使用非系统签名的update.zip升级包。也会使系统进入recovery模式。然后升级失败。死在recovery模式。所以每次升级之前要校验签名使用相同。
使用api接口是

RecoverySystem.verifyPackage

demo源码

public class MainActivity extends Activity {
    final public int CODE= 0x717;
    public static int n =1;
    private TextView txt;
    private Button Btn;
    private Button Btn2;
    private ProgressDialog pd;
    private boolean pptv = false;
    private Context context;
    private static final String TAG = "pptv";
    private static final String otaOsFile = "/storage/sdcard0/otasys.zip";
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        Log.e("DDY", "======================:");

    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("我是MainActivity");
        Btn = (Button)findViewById(R.id.btn);
        Btn2 = (Button)findViewById(R.id.btn2);
        Btn2.setOnClickListener(new OnClickListener()
                {
                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        try{
                            RecoverySystem.verifyPackage(new File(otaOsFile), new ProgressListener() { 
                                @Override 
                                public void onProgress(int progress) {
                                Log.i(TAG, "progress = " + progress);
                                }
                            }, null);
                         RecoverySystem.installPackage(getApplicationContext(), new File(otaOsFile));
                        }catch (Exception  e) {
                            e.printStackTrace();
                        }
                        Log.e(TAG, "======================:");
                    }
                });

如何使用命令生成ota 升级包,大家一般都是使用make otapackage 自动生成ota包,使用签名是

java -Xmx2048m -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem build/target/product/security/testkey.pk8 /tmp/tmp0LVdX3 out/target/product/rk3288/rk3288-ota-eng.stonecom.zip

最近自己要测试非系统签名的升级包能否通过ecoverySystem.verifyPackage校验,自己使用的签名是shared key。

./build/tools/releasetools/ota_from_target_files -k build/target/product/security/shared  out/target/product/rk3288/obj/PACKAGING/target_files_intermediates/rk3288-target_files-eng.stonecom.zip  update.zip

运行之后报错

I/pptv    (31438): progress = 0
W/AudioTrack( 1760): AUDIO_OUTPUT_FLAG_FAST denied by client
D/AudioHardwareTiny(  172): start_output_stream
D/alsa_route(  172): route_info->sound_card 0, route_info->devices 0
D/alsa_route(  172): route_set_controls() set route 0
W/System.err(31438): java.security.SignatureException: signature doesn't match any trusted key
W/System.err(31438):    at android.os.RecoverySystem.verifyPackage(RecoverySystem.java:243)
W/System.err(31438):    at com.example.systemupdate.MainActivity$1.onClick(MainActivity.java:52)
W/System.err(31438):    at android.view.View.performClick(View.java:4809)
W/System.err(31438):    at android.view.View$PerformClick.run(View.java:20006)
W/System.err(31438):    at android.os.Handler.handleCallback(Handler.java:739)
W/System.err(31438):    at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err(31438):    at android.os.Looper.loop(Looper.java:135)
W/System.err(31438):    at android.app.ActivityThread.main(ActivityThread.java:5280)
W/System.err(31438):    at java.lang.reflect.Method.invoke(Native Method)
W/System.err(31438):    at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err(31438):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:963)
W/System.err(31438):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)
E/pptv    (31438): ======================:
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九霄的爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值