关于android的程序签名

【华为OD统一考试B卷 | 100分】全排列(C++ Java JavaScript Python) 给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不相同的排列数。如:S为ABA,则不同的排列有ABA、AAB、BAA三种。输入一个长度不超过10的字符串S,我们确保都是大写的。 阅读详情

我以前在做android杂志时候遇到一个需求,要求是开发人员开发完第一版本杂志后,后面的版本只需要通过工具改变文字内容和图片重新签名就可以出第二个版本,不用重新改源码进行编译打包。我把所有可能改变的资源都放在assets 目录下,在程序中通过名字来获取资源,这样就不用重新编译了,但是签名呢?怎样通过工具来程序签名呢?

一: 生成未签名的apk包.

  把res, resources.arsc, classes.dex, AndroidMainfest.xml, assets等资源打包成apk。   apk 是采用的zip压缩方式,但是资源中图片和音乐是不压缩的,也就是图片和音乐要保持原大小。

 

代码

 

 

二.  对apk包进行签名.
看了博文;,下面是我的解决方法,希望有朋友用的着。
首先需要android自带的私钥 和公钥testkey.zip
还有SignApk.java.

在signApk.java中的main(String []args)方法中 参数args这里我们无法传入,我们只有到程序中自己赋值。

 

代码
复制代码
   
public static void main(String[] args) {
2 args = new String[]{ " d:/testkey.x509.pem " , " d:/testkey.pk8 " , " d:/lyl.apk " , " d:/lyl1.apk " }; // 第一个参数是公钥,第二个参数是私钥, 第三个参数是需要签名的apk, 第四个参数是签名后生成的apk
3
4 JarFile inputJar = null ;
5 JarOutputStream outputJar = null ;
6
7 try {
8 X509Certificate publicKey = readPublicKey( new File(args[ 0 ]));
9 PrivateKey privateKey = readPrivateKey( new File(args[ 1 ]));
10 inputJar = new JarFile( new File(args[ 2 ]), false ); // Don't verify.
11 outputJar = new JarOutputStream( new FileOutputStream(args[ 3 ]));
12 outputJar.setLevel( 9 );
13
14 // MANIFEST.MF
15 Manifest manifest = addDigestsToManifest(inputJar);
16 manifest.getEntries().remove( " META-INF/CERT.SF " );
17 manifest.getEntries().remove( " META-INF/CERT.RSA " );
18 outputJar.putNextEntry( new JarEntry(JarFile.MANIFEST_NAME));
19 manifest.write(outputJar);
20
21 // CERT.SF
22 Signature signature = Signature.getInstance( " SHA1withRSA " );
23 signature.initSign(privateKey);
24 outputJar.putNextEntry( new JarEntry( " META-INF/CERT.SF " ));
25 writeSignatureFile(manifest,
26 new SignatureOutputStream(outputJar, signature));
27
28 // CERT.RSA
29 outputJar.putNextEntry( new JarEntry( " META-INF/CERT.RSA " ));
30 writeSignatureBlock(signature, publicKey, outputJar);
31
32 // Everything else
33 copyFiles(manifest, inputJar, outputJar);
34 } catch (Exception e) {
35 e.printStackTrace();
36 System.exit( 1 );
37 } finally {
38 try {
39 if (inputJar != null ) inputJar.close();
40 if (outputJar != null ) outputJar.close();
41 } catch (IOException e) {
42 e.printStackTrace();
43 System.exit( 1 );
44 }
45 }
46 }
复制代码

执行完signApk后签名完成,可以安装应用程序了,呵呵。

原文: http://www.cnblogs.com/jeromeliu/archive/2010/11/23/1885244.html


杰理AC695N系列芯片红外遥控按键使用教程 本文介绍了杰理AC695N芯片红外按键功能的配置和使用方法。主要内容包括:硬件连接说明(红外接收头接线至GPIO口)、软件配置(使能红外功能并设置接收引脚)、按键映射表修改(原始键值到逻辑按键的转换)以及按键扫描参数调整(消抖、长按时间等)。重点展示了三级映射机制,指导如何根据实际遥控器键值修改映射关系,实现不同模式下(蓝牙/音乐/FM)的自定义按键功能。最后提供了调试方法,可通过串口打印查看遥控器原始键值。 阅读详情

相关推荐

示波器面板上的隐藏功能:如何利用BW Limit和EXT TRIG提升测量精度

本文深入探讨示波器面板上的隐藏功能BW Limit和EXT TRIG,揭示它们如何提升测量精度。通过带宽限制(BW Limit)有效滤除高频噪声,结合外部触发(EXT TRIG)确保稳定信号捕获,为电子测量提供专业解决方案。特别适用于开关电源、传感器信号等复杂场景的高精度测量需求。

weixin_30300225的博客 518

怎样制作数字签名

怎样制作数字签名1、 获得软件发行证书(测试)一、找到或下载signcode.exe、makecert.exe和cert2spc.exe这三个程序,如果装了VS.NET的话,可以在其目录下找到,或者去微软网上下载也可以的。二、:创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。输入makecert -sk lyl -n "CN=johnlya" c:/lyl.cer。就会在你

实时数据库的专栏 7419

AirSim中图像API的应用

解析Airsim图像获取保存的api

fegxg的博客 1605

IntelliJ IDEA / Eclipse 自动生成 Author 注释 签名

Author 注释 签名如下: /** * @author 稚枭天卓 E-mail:zhxiaotianzhuo@163.com * @version 创建时间:2016-6-20 下午04:58:52 */ Eclipse 自动生成 Author 注释 签名 window-> preference-> Java-> code styple-> code temp

稚枭天卓 5万+

保姆级教程:在S32K312上配置C40驱动,实现Flash读写(基于RTD 4.4.2)

本文详细介绍了在S32K312微控制器上配置C40驱动实现Flash读写的全流程,基于RTD 4.4.2库。内容涵盖环境搭建、外设配置、Flash操作实战代码及高级应用场景,特别针对LLD驱动和FLS存储操作中的常见问题提供了解决方案,帮助开发者快速掌握嵌入式Flash存储技术。

weixin_28684757的博客 255

AXI Timer IP核使用说明

AXI Timer是提供定时技术功能的集成IP核,具有时间生成、事件捕获、产生PWM波以及产生中断的功能,下面具体讲述Timer IP核的使用说明。

weixin_43418104的博客 2488

leetcode3. 无重复字符的最长子串

【代码】leetcode3. 无重复字符的最长子串。

grandZXW的博客 367

MT25QL256完整操作指南:从ID读取到4KB扇区擦除(附华大SPI例程)

本文提供了MT25QL256 NOR FLASH在华大MCU上的完整驱动开发指南。内容涵盖从SPI初始化、器件ID读取、状态寄存器查询,到核心的页编程和4KB扇区擦除操作,并分享了构建健壮驱动框架、处理跨页写入及常见调试问题的实战经验。

tt34567的博客 886

力扣--无重复字符的最长子串3(滑动窗口)

因为无重复字符的最长子串是 "abc",所以其长度为 3。,请你找出其中不含有重复字符的。

无聊人的博客 385

stm32h743的hrtim使用生成pwm波

HRTIM(High-Resolution Timer)是一种高精度定时器,其时钟频率可直接与CPU主频同步,达到480MHz。相比之下,其他传统定时器需挂载在APB总线上,受总线频率限制,最高仅支持240MHz。这种直接时钟同步机制显著提升了定时器的分辨率和精度。

d13211322的博客 1612

LangGraph实战训练营-打造 WhatsApp 全自动消息收发AI智能助手

本文系统梳理了项目架构(WhatsApp Bridge + Talon Host + LangGraph Agent Harness三层设计)、完整环境搭建流程(Docker/本地双模式部署)、核心原理(WhatsApp桥接机制、NVIDIA Parakeet语音转录管线、Cron定时调度、Agent图状状态机),并提供了基础对话、文件操作、语音处理、定时任务等六大实战示例。同时涵盖安全策略、性能优化、数据备份等生产级运维实践,以及十个高频问题的排查方案。

program哲学 191

华为OD机试“HJ10 字符个数统计”Java编程解答

编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。数据范围: 1≤n≤500

wwwwwmmn的博客 467

实战交易策略 篇二十二:情绪流龙头交易策略

在股票市场中,机构主导趋势,游资驱动热点,散户易被情绪裹挟,形成“金字塔”式生态链,并存在情绪传递、强者恒强、物极必反的规律特点。股市是资金驱动的情绪博弈场,价格波动由群体心理、资金博弈和预期差共同驱动,核心是资本逐利性与人性贪婪恐惧的交织,兼具资源配置、财富再分配与风险定价功能。涨停加速与逃逸缺口(主升强化)凹字板/平台突破(趋势延续)天量弱转强(分歧买点)不参与首波(二波策略)情绪周期(道术合一)主线思维(聚焦核心)开盘抢筹(竞价博弈)一字助攻(情绪强化)分批进出(滚动操作)

生活在别处 1499

牛客NC170 最长不含重复字符的子字符串【高频 中等 map、滑动窗口 Java,Go,PHP】

【代码】牛客NC170 最长不含重复字符的子字符串【高频 中等 map、滑动窗口 Java,Go,PHP】

weixin_37991016的博客 317

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

给你一个字符串 S,找出所有长度为 K 且包含重复字符的子串,请你返回全部满足要求的子串的数目

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

waniu999的博客 458

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【算法】面试题 08.07. 无重复字符串的排列组合(多语言实现)

无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。

二当家的白帽子 1177

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

字符个数统计 java

字符个数统计 java 题目描述 编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。 输入描述: 输入N个字符,字符在ACSII码范围内。 输出描述: 输出范围在(0~127)字符的个数。 示例1 输入 abc 输出 3 代码: import java.util.*; public class Main { public sta...

柳絮 2379

面试题:“中国浙江杭州”这样的一串字符串有多少个不重复的排序组合?

【代码】面试题:“中国浙江杭州”这样的一串字符串有多少个不重复的排序组合?

tiantian1980的专栏 323

LeetCode-3. Longest Substring Without Repeating Characters [C++][Java]

Given a strings, find the length of thelongest substringwithout repeating characters.

贫道绝缘子的博客 230

Leetcode:maxPower连续字符

给你一个字符串s,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。 请你返回字符串的能量。 示例 4: 输入:s = "hooraaaaaaaaaaay" 输出:11 思路: 循环字符串中的字符 前一个字符和后一个字符相同 则计数的num++ 并且用max保存最大的num 不相同 则把num置1 最后输出max 算法代码: class Solution { public: int maxPower(string s) { int n...

qq_44189622的博客 134

【问题描述】删除字符串中的重复字符. 【输入形式】输入一个字符串,全为字母字符 【输出形式】输出删除重复字符后的字符串 【样例输入】abbcbd 【样例输出】abcd 【样例说明】删除第二个

【问题描述】删除字符串中的重复字符. 【输入形式】输入一个字符串,全为字母字符 【输出形式】输出删除重复字符后的字符串 【样例输入】abbcbd 【样例输出】abcd 【样例说明】删除第二个和第三个“b”,保留第一个遇到的不同字符 import java.util.LinkedHashSet; public class Test3_7_ztk { public static void m...

braylon_zhang的博客 1851

计算字符串的长度

package com.string; import java.util.ArrayList; import java.util.List; import java.util.Scanner; //计算字符串的长度 public class TestStringLength { public static void main(String args[]) { System.o

zjcheer_up的专栏 659

2.无重复字符的最长子串(字节跳动)

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其 长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b" ,所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因...

科技向善 960

找出没有重复字符的的所有子串,最长子串

public class Solution {     public static void main(String[] args) {                String a="asdfsdsasd";         String max ="";         String realmax="";         List<String> list = new Arra...

wugengen的博客 277

给定的字符串,找出其中最长的连续没有重复的字符串

例如:输入:“aabcceddabc” 输出:“dabc” 4String s = "aabcceddabc"; Set set = new HashSet(); int i = 0; int j = 0; String str = ""; while (i < s.length() &&am...

kisorl的博客 1122

字符串去重的方法

不保证原有顺序: public static void main(String[] args) { String str = "abbddcaaaddfertsdf232122dsdfdsftwesdfdzxcssdfffggaasb"; str = removedb ( str , 0 ) ; System.out.println ( "去重后:&am

秀发浓密是我的错 1万+
上一篇: Android手机总内存和可用内存
下一篇: Android之TextView属性详解
jacklce
博客等级 码龄15年 18粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值