`
qiang106
  • 浏览: 387961 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android开发过程Debug包签名问题

阅读更多

android安装包签名,是一项重要的安全验证方式,各平台也大量在使用,像微信、QQ等开发SDK,各应用市场上架等等。

但是在接入这些开放开平台时又经常需要调试各种接口,对应的日志输出还是有点蛋痛的,遇到问题,往往没有什么提示。

找问题,很好的办法就是debug,因此签名debug,就在这种场景下经常要用到了,如果使用android studio开发的,倒还是不难。因为gradle很方便得支持debug包指定签名,简单的配置一下就可以了。

如下配置就可以以:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"


    signingConfigs {
        release {
            keyAlias 'xxx'
            keyPassword 'xxxx'
            storeFile file('../release-key.jks')
            storePassword 'xxxx'
        }

        debug {
            keyAlias 'xxxx'
            keyPassword 'xxx'
            storeFile file('../release-key.jks')
            storePassword 'xxx'
        }
    }

 

 

但是如果你在用eclipse开发,那么就痛苦了,eclipse的debug打包需要固定的签名(别名等),一般大家在这些开放平台上肯定都是使用release的签名,自然跟debug签名使用相同的还是少数,尤其是一些历史项目,eclipe设置成release签名debug又不行,当然也可以使用gradle脚本来编,不过项目结构往往不太一样,比较麻烦。

 

另一种打包方式ant的debug包,原生也不支持release签名,当然是说在自己没有修改脚本的情况下。

 

下面就简单贴一个解决方案,用ant debug打包的时候,同样签上我们的release签名。

 

build.xml修改,把android sdk下ant脚本部分target复制出来,修改一下,放到我们自己的项目的脚本中,这样在ant debug打出的包在调试的时候就不会因为签名问题而被拦住了。

 

完整的build.xml如下:

 

 <?xml version="1.0" encoding="UTF-8"?>
<project name="testxx" default="help">

    <!-- The local.properties file is created and updated by the 'android' tool.
         It contains the path to the SDK. It should *NOT* be checked into
         Version Control Systems. -->
    <property file="local.properties" />
	<tstamp>
	    
	    <format property="now" pattern="yyyyMMddHHmm"/>
	</tstamp>
	<target name="testTime">
	    <echo>${now}</echo>
	</target>
    <!-- The ant.properties file can be created by you. It is only edited by the
         'android' tool to add properties to it.
         This is the place to change some Ant specific build properties.
         Here are some properties you may want to change/update:

         source.dir
             The name of the source directory. Default is 'src'.
         out.dir
             The name of the output directory. Default is 'bin'.

         For other overridable properties, look at the beginning of the rules
         files in the SDK, at tools/ant/build.xml

         Properties related to the SDK location or the project target should
         be updated using the 'android' tool with the 'update' action.

         This file is an integral part of the build system for your
         application and should be checked into Version Control Systems.

         -->
    <property file="ant.properties" />

    <!-- The project.properties file is created and updated by the 'android'
         tool, as well as ADT.

         This contains project specific properties such as project target, and library
         dependencies. Lower level build properties are stored in ant.properties
         (or in .classpath for Eclipse projects).

         This file is an integral part of the build system for your
         application and should be checked into Version Control Systems. -->
    <loadproperties srcFile="project.properties" />

    <!-- quick check on sdk.dir -->
    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
            unless="sdk.dir"
    />

    <!--
        Import per project custom build rules if present at the root of the project.
        This is the place to put custom intermediary targets such as:
            -pre-build
            -pre-compile
            -post-compile (This is typically used for code obfuscation.
                           Compiled code location: ${out.classes.absolute.dir}
                           If this is not done in place, override ${out.dex.input.absolute.dir})
            -post-package
            -post-build
            -pre-clean
    -->
    <import file="custom_rules.xml" optional="true" />

    <!-- Import the actual build file.

         To customize existing targets, there are two options:
         - Customize only one target:
             - copy/paste the target into this file, *before* the
               <import> task.
             - customize it to your needs.
         - Customize the whole content of build.xml
             - copy/paste the content of the rules files (minus the top node)
               into this file, replacing the <import> task.
             - customize to your needs.

         ***********************
         ****** IMPORTANT ******
         ***********************
         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
         in order to avoid having your file be overridden by tools such as "android update project"
    -->
    
      <target name="-set-debug-files" depends="-set-mode-check">
        <property name="out.packaged.file" location="${out.absolute.dir}/${ant.project.name}-debug-unsigned.apk" />
        <property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-debug.apk" />
        <property name="build.is.mode.set" value="true" />
    </target>
    
        <target name="-set-debug-mode" depends="-setup">
        <!-- record the current build target -->
        <property name="build.target" value="debug" />

        <if>
            <condition>
                <and>
                    <istrue value="${project.is.testapp}" />
                    <istrue value="${emma.enabled}" />
                </and>
            </condition>
            <then>
                <property name="build.is.instrumented" value="true" />
            </then>
            <else>
                <property name="build.is.instrumented" value="false" />
            </else>
        </if>
        
        <!-- whether the build is a debug build. always set. -->
        <property name="build.is.packaging.debug" value="true" />

        <!-- signing mode: debug -->
        <property name="build.is.signing.debug" value="false" />

        <!-- Renderscript optimization level: none -->
        <property name="renderscript.opt.level" value="${renderscript.debug.opt.level}" />

    </target>
    
    <target name="-debug-sign" if="has.keystore" >
        <!-- only create apk if *not* a library project -->
        <do-only-if-not-library elseText="Library project: do not create apk..." >
            <sequential>
                <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" />

                <!-- Signs the APK -->
                <echo level="info">Signing final apk...</echo>
                <signapk
                        input="${out.packaged.file}"
                        output="${out.unaligned.file}"
                        keystore="${key.store}"
                        storepass="${key.store.password}"
                        alias="${key.alias}"
                        keypass="${key.alias.password}"/>

                <!-- Zip aligns the APK -->
                <zipalign-helper
                        in.package="${out.unaligned.file}"
                        out.package="${out.final.file}" />
                <echo level="info">Release Package: ${out.final.file}</echo>
            </sequential>
        </do-only-if-not-library>
        <record-build-info />
    </target>
     <target name="debug" depends="-set-debug-files, -set-debug-mode, -debug-obfuscation-check, -package, -post-package, -debug-sign, -post-build"
                description="Builds the application and signs it with a debug key.">
    </target>
     
     <target name="-set-release-mode" depends="-set-mode-check">
         
        <property name="out.packaged.file" location="${out.absolute.dir}/${ant.project.name}-release-unsigned.apk" />
        <property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-release${now}.apk" />
        <property name="build.is.mode.set" value="true" />

        <!-- record the current build target -->
        <property name="build.target" value="release" />

        <property name="build.is.instrumented" value="false" />

        <!-- release mode is only valid if the manifest does not explicitly
             set debuggable to true. default is false. -->
        <xpath input="${manifest.abs.file}" expression="/manifest/application/@android:debuggable"
                output="build.is.packaging.debug" default="false"/>

        <!-- signing mode: release -->
        <property name="build.is.signing.debug" value="false" />

        <!-- Renderscript optimization level: aggressive -->
        <property name="renderscript.opt.level" value="${renderscript.release.opt.level}" />

        <if condition="${build.is.packaging.debug}">
            <then>
                <echo>*************************************************</echo>
                <echo>****  Android Manifest has debuggable=true   ****</echo>
                <echo>**** Doing DEBUG packaging with RELEASE keys ****</echo>
                <echo>*************************************************</echo>
            </then>
            <else>
                <!-- property only set in release mode.
                     Useful for if/unless attributes in target node
                     when using Ant before 1.8 -->
                <property name="build.is.mode.release" value="true"/>
            </else>
        </if>
    </target>
     
    <import file="${sdk.dir}/tools/ant/build.xml" />

</project>

 

 

 

分享到:
评论

相关推荐

    用于对Android升级包和APK进行签名

    1. **Debug签名**:开发者在开发过程中通常使用调试签名,它由Android Studio自动生成,方便快速测试。 2. **Release签名**:发布应用到Google Play或其他平台时,应使用正式的发布签名。这需要一个安全的密钥库,...

    Android APK使用Debug签名重新打包 Eclipse更改默认Debug签名

    Android应用开发过程中,调试阶段的APK打包通常会使用一个默认的Debug签名。这种签名允许开发者在不进行正式签名的情况下测试应用。然而,如果需要对一个已经存在的APK文件进行重新打包,并且希望使用Debug签名,...

    android开发apk进行系统签名工具

    总的来说,"android开发apk进行系统签名工具"简化了为APK赋予系统权限的过程,但同时也要求开发者具备一定的安全知识和设备管理经验。正确使用该工具,可以让你的app实现更多高级功能,但也需谨慎行事,避免滥用权限...

    android项目打包签名及其项目如何发布等详细步骤.zip

    在Android应用开发中,将项目打包签名并发布到Google Play或其他平台是开发流程中的关键步骤。下面将详细讲解这个过程。 一、Android项目打包签名 1. 创建密钥库:首先,开发者需要创建一个密钥库,这通常通过`...

    android获取应用32位签名.rar

    在Android开发中,应用的签名是安全性和身份验证的关键组成部分。每个APK文件在发布之前都需要进行签名,以便系统能够验证应用的来源和完整性。32位签名在这里指的是使用32位架构的设备上应用的签名过程。在这个...

    Android Studio使用Gradle实现自动打包,签名,自定义apk文件名,多渠道打包,集成系统签名证书博客资源

    在Android开发过程中,高效自动化构建流程是至关重要的。Android Studio作为官方推荐的IDE,集成了强大的Gradle构建系统,能够帮助开发者实现各种自动化任务,包括自动打包、签名、自定义APK文件名以及多渠道打包等...

    Android应用源码 打包签名 从生成keystore到完成签名.zip

    1. **Keystore生成**:在Android开发中,`keytool`是Java提供的一个命令行工具,用于创建和管理密钥库。开发者通常会使用`keytool`来生成一个包含私钥和证书的keystore文件。执行`keytool -genkeypair`命令,需要...

    app-debug-10m_android开发_android_

    在Android开发过程中,确保触控屏的响应性和准确性是非常重要的,因为用户界面的交互主要依赖于触摸输入。这个程序可能包含了一系列的测试用例,用于评估设备屏幕对轻触、滑动、多点触控等各种操作的反应,帮助...

    windows下android apk签名工具

    在Android应用开发中,APK签名是一个至关重要的步骤,它确保了应用的完整性和来源的可信性。在Windows环境下,开发者通常使用特定的工具来对APK进行签名,以使其能够在Android设备上顺利安装和运行。本文将详细介绍...

    Android App的签名打包

    - **调试模式**:通常使用默认的debug.keystore进行签名,适用于开发阶段的测试。这种方式方便快捷,但不适合正式发布。 - **发布模式**:使用自定义的密钥库进行签名,适合正式发布的应用。这种方式更加安全可靠。 ...

    Android-一个项目如何编译多个不同签名包名资源等的apk

    在Android开发过程中,有时我们需要为同一个项目生成多个不同的APK,比如针对不同的市场或客户,可能需要使用不同的签名、包名以及资源。Android Studio作为官方推荐的集成开发环境,提供了强大的构建系统,允许...

    android studio 开发文件之打包

    在Android应用开发中,打包(Packaging)是一个至关重要的步骤,它是将你的代码、资源文件、依赖库等组合成一个可安装的APK文件的过程。Android Studio作为Google官方推荐的集成开发环境,提供了便捷的打包工具,...

    Android 打包签名 从生成keystore到完成签名.zip

    Debug签名是开发阶段使用的,通常由Android Studio自动处理,而Release签名则是用于发布的。Debug签名用于调试和测试,其证书有效期较短且不安全,而Release签名使用的是长期有效的证书,确保了应用的安全性。 最后...

    Android渠道包批量签名(mac版本)

    这里的"Android渠道包批量签名(mac版本)"指的是在Mac操作系统上对多个Android应用包进行快速签名的过程。这个过程涉及到了Android的签名机制、APK打包流程以及可能使用的自动化工具。 Android签名机制: 1. **签名...

    android 签名

    在Android开发中,签名是一个至关重要的步骤,它确保了应用的完整性和安全性。Android签名是开发者在发布APK(Android应用程序)之前必须执行的过程,它主要用于验证应用的来源以及允许系统进行权限管理。以下是关于...

    Android 打包签名 从生成keystore到完成签名(实用1).zip

    在Android应用开发中,打包签名是一个至关重要的步骤,它确保了应用的安全性和可分发性。这个压缩包文件“Android 打包签名 从生成keystore到完成签名(实用1)”提供了一套实用的流程,适合于毕业设计或课程设计项目...

    uni-app项目本地离线android打包步骤

    3. Sdk:Android开发必备,包括最新的构建工具和平台SDK。 新版本的Sdk可以在DCloud官方网站下载,地址是:https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android **二、资源生成与集成** 1. 使用HBuilder...

    android 签名 详解

    1. 在 Eclipse 工程中右键工程,弹出选项中选择 android 工具-生成签名应用包。 2. 选择需要打包的 Android 项目工程。 3. 如果已有私钥文件,选择私钥文件输入密码,如果没有参见第 6 和 7 步创建私钥文件。 4. ...

Global site tag (gtag.js) - Google Analytics