android 源码 打包成apk的实现

来源:互联网 发布:mac怎样清理safari缓存 编辑:程序博客网 时间:2024/05/16 18:21


说明: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   代码保护

加注释

原创粉丝点击