一、Ant编译打包android工程步骤
二、Ant apk签名
1.keystore签名 定义自己的签名文件
生成keystore文件:keytool -genkey -alias android.keystore -keyalg RSA - validity 20000 -keystore android.keystore
对应的java命令:jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk
对应的java命令:jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk
对应的ant脚本命令:
<target name="sign"> <echo>Begin sign unobfuscated package...</echo> <exec executable="${signer}" failonerror="true"> <arg value="-verbose" /> <arg value="-keystore" /> <arg value="${keystore}" /> <arg value="-storepass" /> <arg value="${store_pass}" /> <arg value="-keypass" /> <arg value="${key_pass}" /> <arg value="-signedjar" /> <arg value="${temp}\${file_name}_unobfs_signed.apk" /> <arg value="${temp}\${file_name}_unobfs.apk" /> <arg value="${key_name}" /> </exec> </target>
<property name="keystore" value="${project_path}\pada_keystore_formal" /> <!-- 签名的密钥名称设置--> <property name="key_name" value="padaapp" /> <!-- 签名的密码设置--> <property name="key_pass" value="padaeaglenet" /> <!-- 签名的密码设置--> <property name="store_pass" value="padaeaglenet" />
2.系统签名(platform.pk8 , platform.x509.pem) 有些应用需要系统签名,比如定义了sharedUserId="android.uid.system".
系统签名文件:platform.pk8 , platform.x509.pem
存放目录:build/target/product/security/
存放目录:build/target/product/security/
对应的java命令:java -jar SignApk.jar platform.x509.pem platform.pk8 app_unsigned.apk app_signed.apk
对应的ant脚本命令:
<exec executable="java" failonerror="true"> <arg value="-jar"/> <arg value="${project.dir}/STBsign/signapk.jar"/> <arg value="${project.dir}/STBsign/platform.x509.pem"/> <arg value="${project.dir}/STBsign/platform.pk8"/> <arg value="${buildtemp.dir}/unsigntest.apk"/> <arg value="${buildtemp.dir}/TVJUSIGN.apk"/> </exec>
三、Ant apk多渠道打包
目前主流的多渠道打包方法是在AndroidManifest.xml中的Application下添加一个渠道元数据节点。比如,使用友盟统计,它配置AndroidManifest.XML添加下面代码:
<meta-data
android:name="UMENG_CHANNEL"
android:value="channelcode" />
<meta-data
android:name="UMENG_CHANNEL"
android:value="channelcode" />
使用自动化方式替换channelcode的值,可以用正则表达式,代码如下:
<target name="alter_umeng_channel">
<property name="umeng_channel" value="${public_umeng_channel}"/> <echo> alter_umeng_channle_id... "${umeng_channel}" </echo> <replaceregexp file="${auto.project.tmp.dir}/AndroidManifest.xml" match="<meta\-data(\s+)android:name="UMENG_CHANNEL"(\s+)android:value="[a-zA-Z0-9]+"" replace="<meta\-data android:name="UMENG_CHANNEL" android:value="${umeng_channel}"" /> </target>