APP如何打包签名

如何发布打包并发布自己的Android应用(APP)

 medium avatar
发表于 2012-5-1 15:54:43 浏览(407744)

如何打包、发布自己开发的APP,怎样将我的APP放到网上工别人下载,怎样保证我的APP安全及版权问题呢???...


第一步,在Eclipse中选择需要打包的项目,然后右键--选择Export,会弹出一个打包的提示框,如下图所示。


按Next之后,会继续出现一个提示框,这里你可以选择自己需要打包的项目(默认是刚才选中的)如下图:


按Next之后,会弹出一个关于“Keystore”的提示,选择“Create new Keystore”,并浏览、选择签名文件要保存的路径,

(关于Keystore的原理、作用等这里暂时不细说,请大家发布前务必保存好该签名文件,非常重要的。) 如下图所示:


这里请注意签名文件的命名,不能与该目录(将要保存到的目录)中已存在的文件重名,无法覆盖的,否则无法下一步。

按Next后,出现如下图所示的提示框:按照自己的实际情况和需求,填写相关信息后。选择导出APK文件的路径,点击Finish完成。

这样,就可以轻松的打包并签名自己的APP啦!

关于签名文件的作用,以及如何保护自己APP版权,如何升级自己的APP,如何将自己的APP上传到各大市场提供下载...

后续的文章中,将会详细讲解。欢迎大家关注。



发布时候生成的“签名文件”的作用(前面提过,叫大家一定要保管好此文件),如何验证自己的App是否发布成功,是否成功签名,以及发布后的apk文件如何上传(一般上传到哪里去,要怎么弄呢?要注意那些问题等等)。


谈到“签名文件”的作用,首先我想到了Windows下的“DLL地狱”。如果读者是一位Windows程序员(尤其是年纪大一点的程序员),谈“DLL”色变,那可真是个噩梦啊。

所谓的“DLL地狱”,就是指“DLL文件覆盖”(因为Windows文件系统有个原则,同一个目录下面如果出现同类型且类型命名相同的文件,后者将覆盖前者。)。好了,这大概不是本文的重点,有兴趣的读者可以参考相关资料。

后来到了.NET的时代,这个问题得到了很好的解决。熟悉.NET且有一定深入研究的童鞋都应该知道,.NET中有一种“强命名程序集”的概念,正是用于解决这个问题。

形象点说,就是给了“DLL文件”签名、描述,让他们能够区分开来,从而避免“地狱”。(个人浅浅的认为,不知道这样讲是否正确,不足之处请指出)。


回到Android中来,这年头开发Android应用的人可不少(因为想赚钱的人实在太多了)。那“包名、类名”这些是不是很容易出现“撞车”呢?有了签名文件,这些就能够得到很好的解决了。

APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。

比如:你发布在“电子市场”的应用,一段时间后你需要升级应用了,继续使用你以前的“签名文件”,这样就能保证你的版权和安全。道高一尺,魔高一丈。

在中国大地的屏幕上,再牛B的软件也可能被破解的,有签名文件,就能很好的防止这种事情(不能完全)。

  这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。

上面说了几点,都是使用签名文件的好处。不一定很完整,但都是很常见,很典型的。

那我们如何检查自己发布后是否“签名成功”呢???

其实,我们使用Eclipse+ADT插件从开发环境安装到手机中的APK文件已经包含了ADT插件的Debug签名文件。但是这不是发布时候的“正式签名”文件。读者可以参考我上文中的具体步骤,尝试着发布自己的app,并请保留好签名文件。

签名完成后,你可以用winrar打开apk,在Meta-inf目录下,用文本编辑器打开CERT.RSA文件,如果能看到部分你建的key时候输入的文本就是正式签名了,如果测试签名会有debug字样。(一般情况会乱码,但是用肉眼仔细观察,你就能略微的看清楚一些啦)

值得提醒的就是,软件代码更新后(需要发布新的APK了),要将Manifest的android:versionCode值+1,每更新一次都要加1。


弄明白这些之后,该向大家讲讲上传应用了。由于Android是一个相对开放的平台,所以上传应用的限制也低一些,而且缺乏官方的规范。不像苹果和它的APP商店那般封闭。国内而言,上传应用的网站有很多,国内比较有名的就是“安卓市场”,“Android 电子市场”,“机锋市场”......

不同的市场审核规则也不尽相同,但是大同小异。还有一些值得注意的是:注意你的APP语言(国际化),屏幕分辨率及尺寸的支持...(当然,这是打包前就应该做好的工作啦)



Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 

1.签名的意义
  为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。

2.签名的步骤
  a.创建key
  b.使用步骤a中产生的key对apk签名

3.具体操作

  方法一: 命令行下对apk签名(原理)
  创建key,需要用到keytool.exe (位于jdk1.6.0_24jre\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk1.6.0_24\bin目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入

         D:>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000
        -keystore demo.keystore
       /*说明:-genkey 产生密钥
             -alias demo.keystore 别名 demo.keystore
           -keyalg RSA 使用RSA算法对签名加密
             -validity 40000 有效期限4000天
             -keystore demo.keystore */
         D:>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk 
         demo.apk demo.keystore
        /*说明:-verbose 输出签名的详细信息
            -keystore  demo.keystore 密钥库位置
            -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中
依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore.*/

  注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。

  方法二:使用Eclipse导出带签名的apk
  Eclipse直接能导出带签名的最终apk,非常方便,推荐使用,步骤如下:
  第一步:导出。
 
  第二步:创建密钥库keystore,输入密钥库导出位置和密码,记住密码,下次Use existing keystore会用到。
 
  第三步:填写密钥库信息,填写一些apk文件的密码,使用期限和组织单位的信息。

  第四步:生成带签名的apk文件,到此就结束了。

  第五步:如果下次发布版本的时候,使用前面生成的keystore再签名。


  第六步:下一步,下一步,然后就OK了!

  方法三:使用IntelliJ IDEA导出带签名的apk 
  
方法步骤基本和Eclipse相同,大概操作路径是:菜单Tools->Andrdoid->Export signed apk。

4.签名之后,用zipalign(压缩对齐)优化你的APK文件。
  未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows ools目录下)工具对其优化:

       D:>zipalign -v 4 demo_signed.apk final.apk

  如上,zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值),这样android系统就可以使用mmap()(请自行查阅这个函数的用途)函数读取文件,可以在读取资源上获得较高的性能,
  PS:1.在4个字节边界上对齐的意思就是,一般来说,是指编译器吧4个字节作为一个单位来进行读取的结果,这样的话,CPU能够对变量进行高效、快速的访问(较之前不对齐)。
          2.对齐的根源:android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用"对齐"进一步优化,但是大小一般会有所增加。

5.签名对你的App的影响。
   你不可能只做一个APP,你可能有一个宏伟的战略工程,想要在生活,服务,游戏,系统各个领域都想插足的话,你不可能只做一个APP,谷歌建议你把你所有的APP都使用同一个签名证书。
   使用你自己的同一个签名证书,就没有人能够覆盖你的应用程序,即使包名相同,所以影响有:
  1) App升级。 使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。
  2) App模块化。android系统允许具有相同的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路。
  3) 允许代码和数据共享。android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享,如下:

  1. AndroidManifest.xml:<permission android:protectionLevel="normal" />  
其中protectionLevel标签有4种值:normal(缺省值),dangerous, signature,signatureOrSystem。简单来说,normal是低风险的,所有的App不能访问和共享此App。dangerous是高风险的,所有的App都能访问和共享此App。signature是指具有相同签名的App可以访问和共享此App。signatureOrSystem是指系统image中App和具有相同签名的App可以访问和共享此App,谷歌建议不要使用这个选项,因为签名就足够了,一般这个许可会被用在在一个image中需要共享一些特定的功能的情况下。
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android Studio中,可以使用多种方式进行app打包。其中一种方式是使用MultiChannelBuildTool工具。你可以将ChannelUtil.java文件放入工程中,然后运行MultiChannelBuildTool.py脚本即可实现打包。这个工具使用Python环境,非常方便使用。你只需要将生成的app-uc-release.apk文件复制到项目目录中,然后运行脚本,就可以生成多个渠道的包。\[1\] 另一种方式是通过配置build.gradle文件来实现打包。你可以在build.gradle文件中设置signingConfigs来配置密钥信息,buildTypes来配置打包类型(包括Debug和Release),productFlavors来配置打包渠道。同时,在AndroidManifest.xml文件中添加渠道标识,可以通过meta-data标签来设置UMENG_CHANNEL的值。这样就可以根据不同的渠道生成不同的包。\[2\] 需要注意的是,虽然在项目目录的build/outputs/apk目录下可以找到生成的app-debug.apk文件,但这个只是用于调试的APK文件,并不适合上传到市场。因为市场需要通过包名+签名来确定应用的唯一性,而debug.apk没有经过签名,无法保证安全性。因此,在发布应用时,需要使用Release类型的包,并进行签名后再上传到市场。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Android Studio打包apk详细教程](https://blog.csdn.net/u012241616/article/details/108803154)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值