android工程版key(复制自网络)

来源:互联网 发布:南方cass软件 编辑:程序博客网 时间:2024/05/18 11:17
android工程版key(http://hubingforever.blog.163.com/blog/static/1710405792011102814529435/) 
一、前言 
goolge为我们提供了4个标准的key,以签名测试程序: 
testkey -- a generic key for packages that do not otherwise specify a key. 
platform -- a test key for packages that are part of the core platform. 
shared -- a test key for things that are shared in the home/contacts process. 
media -- a test key for packages that are part of the media/download system. 
它们位于Android源码的以下目录(其中有README,上面的介绍即来自该文件,重要!还讲了如何生成一个key) 
android\build\target\product\security 
注意,这些key只是用于工程版的Android系统.在编译时android源码时,使用eng选项即表示编译生成工程版的Android系统, 
而使用user选项时表示编译用户版(即正式版)的Android系统。 
二、使用key生成keystore文件 
使用google的标准key生成keystore文件。我们需要2个工具,openssl  (cryptography and SSL/TLS toolkit) and keytool。 
openssl是Linux上的一个工具,keytool则是JDK的一个工具,它位于JDK\bin目录。在此假设你已经把JDK\bin添加到了window的path环境变量中。因为一般用户使用的是window系统, 
所以我这里把Cygwin安装在window上来模拟Linux环境,在Cygwin上使用opnssl. 
关于Cygwi的详细内容请参考《cygwin安装详解》。 
2.1、命令行方式 
在这里我将以platform为例进行讲解。 
通过“Cygwin Terminal”的进入Cygwin的命令行,然后切换到key所在的目录。即security目录. 
输入以下命令: 
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem 
执行该命令,将在目录下生成platform.pem文件 
接着输入以下命令: 
openssl pkcs12 -export -in  platform.x509.pem -out platform.p12 -inkey  platform.pem -password pass:android -name androiddebugkey 
执行该命令,将在目录下生成platform.p12文件,它本质上应该就是一个数字证书。 
进入DOS命令行,切换到key所在的目录。即security 
然后输入命令: 
keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android 
执行该命令,将在目录下生成platform.jks文件,它就是我们需要的keystore文件。它的后缀本身是没有关系。如果你更喜欢其后缀名为keystore。 
上面的命令改成这样就行了。 
keytool -importkeystore -deststorepass android -destkeystore ./platform.keystore -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android 
另外,我方便我们可以使用批处理来进行处理。 
通过“Cygwin Terminal”的进入Cygwin的命令行,然后切换到key所在的目录。即security目录. 
使用sh ./export.sh命令运行export.sh文件. 
export.sh文件如下: 
#!/bin/sh 

FILES=`find . -name "*.pk8"` 
cat > generateKeystore.bat << END 
rem autogenerated file 
END 

for FILE in $FILES 
do 
FILE_NAME=`echo $FILE | awk -F.pk8 '{print $1}'` 
if [ -f ${FILE_NAME}.pem ] 
then 
    echo "file ${FILE_NAME}.pem exists" 
else 
`openssl pkcs8 -inform DER -nocrypt -in ${FILE} -out ${FILE_NAME}.pem` 
fi 

`openssl pkcs12 -export -in ${FILE_NAME}.x509.pem -out ${FILE_NAME}.p12 -inkey ${FILE_NAME}.pem -password pass:android -name androiddebugkey` 
cat >> generateKeystore.bat << END 
keytool -importkeystore -deststorepass android -destkeystore ${FILE_NAME}.jks -srckeystore ${FILE_NAME}.p12 -srcstoretype PKCS12 -srcstorepass android 
END 

done 
在运行完成后,将在当前目录看到若干*pem文件,*.p12文件及一个generateKeystore.bat文件,window中直接双击运行它。这时你将看到生成的*.jks文件,它们就是我们需要得keystore文件。 
generateKeystore.bat文件如下: 
rem autogenerated file 
keytool -importkeystore -deststorepass android -destkeystore ./media.jks -srckeystore ./media.p12 -srcstoretype PKCS12 -srcstorepass android 
keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android 
keytool -importkeystore -deststorepass android -destkeystore ./shared.jks -srckeystore ./shared.p12 -srcstoretype PKCS12 -srcstorepass android 
keytool -importkeystore -deststorepass android -destkeystore ./testkey.jks -srckeystore ./testkey.p12 -srcstoretype PKCS12 -srcstorepass android 
(完,原文接下来还有图形化讲解) 

android添加本地可执行文件(可在linux上运行的C或C++程序),静态库,共享库:见《Android系统原理与开发要点详解》一书4.1.2. 

http://hi.baidu.com/shangsong2009/blog/item/29a974c3ba2b45040ef477f0.html 
Android.mk文件规则如下: 

、LOCAL_PATH := $(call my-dir) 

一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。 

2、include $( CLEAR_VARS) 

CLEAR_VARS 由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH外 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。 

3、LOCAL_MODULE :=  HcSyncml 

LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'HcSyncml'的共享库模块,将会生成'libHcSyncml.so'文件。 

4、LOCAL_C_INCLUDES :=$(LOCAL_PATH)/extra_inc$(LOCAL_PATH)/main_inc 

LOCAL_C_INCLUDES 中加入所需要包含的头文件路径 

5、LOCAL_SRC_FILES 

LOCAL_SRC_FILES中加入源文件路径(需要编译的文件),多个文件用‘\’ 隔开 

6、LOCAL_LDLIBS+= -L$(SYSROOT)/usr/lib –llog 

表示允许打印Log 

7, LOCAL_CERTIFICATE := platform,platform是一个key也即一个证书,表示所编译的模块(一般是一个系统级应用)所用到的签名证书,LOCAL_CERTIFICATE的值可以为: 
testkey -- a generic key for packages that do not otherwise specify a key. 
platform -- a test key for packages that are part of the core platform. 
shared -- a test key for things that are shared in the home/contacts process. 
media -- a test key for packages that are part of the media/download system. 
这个描述出自:and2.3/build/target/product/security下的README. 
(end)