您的位置:首页 > 移动开发 > Android开发

android 源码 打包成apk的实现

2011-06-08 14:15 423 查看
说明:NewNetClient是源码目录名称,

当前环境变量设置:jdk,android sdk ,openssl的环境变量。

所需包文件:android.jar,signapk.jar.

C:/apk/hello/gen/android/hello

javac c:/apk/hello/*.java -classpath c:/testapk/android.jar -d c:/apk/classes

@rem主要是重新自动生成R.java文件,比如增加个图片或者字符串或者增加个layout目录xml文件

C:/Users/dell>aapt package -m -J c:/apk/NewNetClient/gen -M c:/apk/NewNetClient/AndroidManifest.xml -S C:/apk/NewNetClient/res -I C:/apk/android.jar

@rem 主要是重新自动生成R.java文件,比如增加个图片或者字符串或者增加个layout目录xml文件

aapt package -m -J src -M C:/apk/NewNetClient/AndroidManifest.xml -S C:/apk/NewNetClient/res -I C:/apk/android.jar

@rem 编译java文件包括R.java 并输出到c:/apk/classes

C:/Users/dell>javac C:/apk/hello/src/android/hello/*.java C:/apk/hello/gen/andro

id/hello/*.java -classpath C:/testapk/android.jar -d c:/apk/classes

@rem 把目录下*.class文件打成jar包,为了后面能够创建apk需要的classes.dex文件(生成的文件在当前目录 *。* 是相对路径)

c:/apk/classes>jar cvf ffff.jar *.*

@rem 把刚才的jar包转换成android手机能够运行的dex文件

c:/apk/classes>dx --dex --output=classes.dex c:/apk/classes/ffff.jar

@rem 如果存在则删除

IF EXIST fffnew3.apk. (

del fffnew3.apk.

echo message ab

) ELSE (

echo fffnew3.apk. missing.

echo message ab c

)

@rem 生成应用程序apk文件ffffqc.apk

c:/apk/classes>aapt package -z -u -f -M C:/apk/hello/AndroidManifest.xml -S C:/apk/hello/res -I C:/testapk/android.jar -F c:/ffffqc.apk

@rem 把前面生成的classes.dex文件压缩到apk文件,最终生成可运行的apk应用程序

c:/apk/classes>aapt add C:/ffffqc.apk classes.dex

@rem 方法一:给生成的apk进行自动签名,无签名的apk是无法安装

c:/testapk>java -jar signapk.jar aimoxiu.x509.pem aimoxiu.pk8 c:/apk/classes/fffnew3.apk fffnew3last.apk

"C:/Program Files/Java/jre6/bin/jarsigner" -verbose -keystore "D:/apksign/MyAnd.keystore" -signedjar %1 %2 "D:/apksign/MyAnd.keystore"

@rem 私钥的生成方式

@rem 产生RSA私钥(private key)

openssl genrsa -3 -out testkey.pem 2048

@rem 产生PKCS#10格式的认证请求。所谓认证请求就是发给认证机构认证的一个请求,它主要包括一个公钥和一些相关信息(如组织名称和联系人邮件地址)。

openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 / -subj ‘/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com’

@rem 把私钥的格式转换成PKCS #8(Private-Key Information Syntax Standard.)

openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt

它的用法如下:

Usage: signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar

第一个参数是公钥,即前面第二步产生的testkey.x509.pem。

第二个参数是私钥,即前面第三步产生的testkey.pk8。

第三个参数是要签名的文件。

第四个参数是输出的文件(即签名后的文件)。

如:java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update-signed.zip

@rem 方法二:keytool生成MyAndf.keystore签名 jarsigner生成签名的apk文件

keytool -genkey -alias MyAndf.keystore -keyalg RSA -validity 20000 -keystore MyAndf.keystore

jarsigner -verbose -keystore MyAndf.keystore -signedjar fffnew3last.apk fffnew3.apk MyAndf.keystore(密码123456 1234567)

开始打包:

javac C:/Users/dell>javac C:/apk/NewNetClient/gen/com/palmdream/NewNetClient/*.java C:/apk/NewNetClient/src/com/palmdream/Core/*.java C:/apk/NewNetClient/src/com/palmdream/ListHolder/*.java C:/apk/NewNetClient/src/com/palmdream/NetEngine/*.java C:/apk/NewNetClient/src/com/palmdream/NewNetClient/*.java C:/apk/NewNetClient/src/com/palmdream/XMLData/*.java C:/apk/NewNetClient/src/org/kxml2/io/*.java C:/apk/NewNetClient/src/org/xmlpull/v1/*.java -classpath c:/apk/android.jar -d c:/apk/classes

echo javac is ok

c:/apk/classes>jar cvf fffnew3.jar com/*.* org/*.*

echo jar cvf is ok

c:/apk/classes>dx --dex --output=c:/apk/classes/classes.dex c:/apk/classes/fffnew3.jar

echo dx --dex ok

c:/apk/classes>aapt package -z -u -f -M C:/apk/NewNetClient/AndroidManifest.xml -S C:/apk/NewNetClient/res -I C:/apk/android.jar -F c:/fffnew3.apk

echo aapt package ok

c:/apk/classes>aapt add C:/fffnew3.apk classes.dex

echo aapt add ok

c:/testapk>java -jar signapk.jar aimoxiu.x509.pem aimoxiu.pk8 fffnew3.apk fffnew3last.apk

echo java last ok

完成

@rem 多线程控制 启动 停止 暂停 启动新的线程 以及联网时header的传递。

@rem 基于android 代码保护

加注释
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: