Android——编译release版签名系统
来源:互联网 发布:java pdf预览功能 编辑:程序博客网 时间:2024/05/16 04:47
在我的第一篇博客里面Android——TV真机调试apk(android:sharedUserId="android.uid.system") ,有提到AndroidManifest.xml中的android:sharedUserId="android.uid.system",代表的意思是和系统相同的uid,可以拥有修改系统时间,文件操作等权限。
也有提到怎么单独给一个apk签名,这里补充一下android的签名权限控制机制。
一:签名类型
android的标准签名key有:
testkey
media
platform
shared
以上的四种,可以在源码的/build/target/product/security里面看到对应的密钥,其中shared.pk8代表私钥,shared.x509.pem公钥,一定是成对出现的。
其中testkey是作为android编译的时候默认的签名key,如果系统中的apk的android.mk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。
而如果设置成:
LOCAL_CERTIFICATE := platform
就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名,因为系统级别的签名也是使用的platform来签名,此时使用android:sharedUserId="android.uid.system"才有用!
二:自定义签名Key
在/build/target/product/security目录下有个README,里面有说怎么制作这些key以及使用问题(android4.2):
从上面可以看出来在源码下的/development/tools目录下有个make_key的脚本,通过传入两个参数就可以生成一对签名用的key。
其中第一个为key的名字,一般都默认成android本身有的,因为很多地方都默认使用了这些名字,我们自定义的话只需要对第二个参数动手脚,定义如下:
C ---> Country Name (2 letter code)
ST ---> State or Province Name (full name)
L ---> Locality Name (eg, city)
O ---> Organization Name (eg, company)
OU ---> Organizational Unit Name (eg, section)
CN ---> Common Name (eg, your name or your server’s hostname)
emailAddress ---> Contact email address
另外在使用上面的make_key脚本生成key的过程中会提示输入password,我的处理是不输入,直接enter,不要密码!后面解释,用自定义的key替换/security下面的。
可以看到android源码里面的key使用的第二个参数就是上面README里面的,是公开的,所以要release版本的系统的话,肯定要有自己的签名key才能起到一个安全控制作用。
三:修改系统默认签名key
在上面提到如果apk中的编译选项LOCAL_CERTIFICATE没有设置的话,就会使用默认的testkey作为签名key,我们可以修改成自己想要的key,按照上面的步骤制作一个releasekey,修改android配置在/build/core/config.mk中定义变量:
在主makefile文件里面:
这样的话默认的所有签名将会使用releasekey。
修改完之后就要编译了,如果上面的这些key在制作的时候输入了password就会出现如下错误:
我在网上找到了合理的解释:
其实会出现这个错误的最根本的原因是多线程的问题。在编译的时候为了加速一般都会执行make -jxxx,这样本来需要手动输入密码的时候,由于其它线程的运行,就会导致影响当前的输入终端,所以就会导致密码无法输入的情况!
再编译完成之后也可以在build.prop中查看到变量:
这样处理了之后编译出来的都是签名过的了,系统才算是release版本
我发现我这样处理之后,整个系统的算是全部按照我的要求签名了。
四:其它
网上看到还有另外的签名release办法,但是应该是针对另外的版本的,借用学习一下:
这个怎么跟平时的编译不一样,后面多了两个参数PRODUCT-product_modul-user 和 dist. 编译完成之后回在源码/out/dist/目录内生成个product_modul-target_files开头的zip文件.这就是我们需要进行签名的文件系统.
我的product_modul 是full_gotechcn,后面加“-user”代表的是最终用户版本,关于这个命名以及product_modul等可参考Android——编译系统初始化设置
编译出需要签名的zip压缩包之后,就是利用/security下面的准备的key进行签名了:
签名目标文件 输出成signed_target_files.zip
如果出现某些apk出错,可以通过在full_gotechcn-target_files.zip前面加参数"-e <apkname>=" 来过滤这些apk.
然后再通过image的脚本生成imag的zip文件,这种方式不适用与我目前的工程源码,没有做过多验证!
撰写不易,转载请注明出处http://blog.csdn.net/jscese/article/details/24243171
- Android——编译release版签名系统
- Android——编译release版签名系统
- Android——编译release版签名系统
- Android——编译release版签名系统
- Android——编译release版签名系统
- Android——编译release版签名系统
- android系统release签名
- android系统release签名
- 编译release版本签名系统
- 生成release版本的Android系统 --签名
- 生成release版本的Android系统 --签名
- 生成release版本的Android系统 --签名
- 生成release版本的Android系统 --签名
- 生成release版本的Android系统 --签名
- android签名与release
- 【转载】生成release版本的Android系统 --签名
- Windows系统下Ant自动编译打包并签名Android应用——探索篇
- Windows系统下Ant自动编译打包并签名Android应用——实践篇
- iOS开发之沙盒机制
- PHP编程效率的20个要点
- 一个TCP连接池的自我修养-如mysql-client、http-client、redis-client
- Android内存泄露检测(LeakCanary)
- CGI C上传文件以及大小限制修改
- Android——编译release版签名系统
- (The one day)About Android 系统状态栏与APP主题颜色一致(方法二)
- 系统设计之BS与CS结构分析
- Android中App耗电量统计核心函数注解
- 一个最符合中国国情的工作流设计参考(包括PHP实现)
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- 欢迎使用CSDN-markdown编辑器
- OBS (open boardcast server)结构分析
- 自定义字节流缓冲区,演示缓冲区的工作原理