精华内容
下载资源
问答
  • 安卓应用无签名
    千次阅读
    2021-05-26 14:36:40

    1、准备工作

    apk的签名工作可以通过两种方式来完成:

    1)通过ADT提供的图形化界面完成apk签名;

    右键项目——》 Android Tools ——》Export Signed Application Package... ——》 打开图形界面

    2)完全通过shell/dos命令来完成apk签名

    我比较喜欢第2)种方式,所以下面将讲解如何通过命令的方式完成apk签名。

    给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool、 jarsigner、 zipalign,下面是对这3个工具的简单介绍:

    1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;

    2)jarsigner:使用数字证书给apk文件签名;

    3)zipalign:对签名后的apk进行优化,提高与Android系统交互的效率(Android SDK1.6版本开始包含此工具)

    从这3个工具的作用也可以看出,这3个工具的使用顺序。通常我们自己所开发的所有应用程序,都是使用同样的签名,即使用同一个数字证书,这就意味着:如果你是第一次做Android应用程序签名,上面的3个工具都将用到;但如果你已经有数字证书了,以后再给其它apk签名时,只需要用到jarsigner和zipalign就可以完成。

    为了方便使用上面3个命令,首先需要将上面3个工具所在路径添加到环境变量path中(我说的是为了方便使用,没有说必须要这么做)。怎么配置环境变量请参见我先前的博客(Windows 或 Ubuntu),这里需要说一下这3个工具默认所在的路径:

    1)keytool:该工具位于jdk安装路径的bin目录下;

    2)jarsigner:该工具位于jdk安装路径的bin目录下;

    3)zipalign:该工具位于Android-sdk-windows/tools/目录下

    不知道大家是否注意到keytool和jarsigner两个工具是jdk自带的,也就意味着生成数字证书和文件签名不是Android的专利;另外从字面上理解jarsigner也能猜得出该工具主要是用来给jar文件签名的。

    2、生成未经签名的apk文件

    既然我们要自己对apk进行签名,就不再需要ADT默认帮我们签名了。如何得到一个未经签名的apk文件呢?打开Eclipse,在Android工程名称上点击右键,依次选择“Android Tools” - “Export Unsigned Application Package ...”,然后选择一个存储位置保存即可。这样就得到了一个未经签名的apk文件。

    3、使用keytool工具生成数字证书

    keytool -genkey -v -keystore it-homer.keystore -alias it-homer.keystore -keyalg RSA -validity 20000

    说明:

    1)keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;

    2)-keystore  it-homer.keystore 表示生成的数字证书的文件名为“ it-homer.keystore”;

    3)-alias  it-homer.keystore 表示证书的别名为“ it-homer.keystore”,当然可以不和上面的文件名一样;

    4)-keyalg RSA 表示生成密钥文件所采用的算法为RSA;

    5)-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效

    在执行上面的命令生成数字证书文件时,会提示你输入一些信息,包括证书的密码,示例如下:

    4、使用jarsigner工具为Android应用程序签名

    jarsigner -verbose -keystore  it-homer.keystore -signedjar notepad_signed.apk notepad.apk  it-homer.keystore

    说明:

    1)jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;

    2)-keystore  it-homer.keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;

    3)-signedjar notepad_signed.apk notepad.apk 表示给notepad.apk文件签名,签名后的文件名称为notepad_signed.apk;

    4)最后面的 it-homer.keystore 表示证书的别名,对应于生成数字证书时-alias参数后面的名称

    5、使用zipalign工具优化已签名的apk(非必须但建议这么做)

    zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk

    说明:

    1)zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息;

    2)notepad_signed.apk notepad_signed_aligned.apk 表示对已签名文件notepad_signed.apk进行优化,优化后的文件名为notepad_signed_aligned.apk

    说明:如果你以前的程序是采用默认签名的方式(即debug签名),一旦换了新的签名应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上。因为程序覆盖安装主要检查两点:

    1)两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本;

    2)两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。

    另外,可能有人可能会认为反正debug签名的应用程序也能安装使用,那也没有必要自己签名了嘛。千万不要这样想,debug签名的应用程序有这样两个限制,或者说风险:

    1)debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;

    2)debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能!

    更多相关内容
  • Android应用签名获取工具,解压缩后内为APK文件,输入目标包名获取应用签名,方便快捷。希望能帮助到大家
  • 主要介绍了Delphi XE5 为Android应用制作签名的方法(图文),需要的朋友可以参考下
  • android获取应用32位签名.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Android 应用签名的两种方法 一、使用pem签名  (一) apk签名命令 java –jar signapk.jar [-w] publickey.x509[.pem] privatekey.pk8 Hello.apk Hello_signed.apk -w 是指对ROM签名时需使用的参数 public...
  • 做系统应用开发,需要配置系统的签名,才能让应用具有系统权限。比如当我们把SystemUI,Setting,Launcher导入android studio编译apk后,编译出来的 apk不是系统签名,是没有办法安装到手机上的。这个时候我们需要对...
  • 发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的。签名机制在Android应用和框架中有着十分重要的作用。例如,Android系统禁止更新安装签名不一致的APK;如果应用需要使用system权限,必须保证...
  • 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名? 如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想...
  • 安卓获取应用签名

    2018-05-16 08:36:43
    只要在已经安装软件的手机上打开此应用,输入包名就可以获取该应用签名信息,可以用于新浪微博,微信开发平台应用审核时使用。
  • 使用签名工具直接给应用签名 1)签名工具介绍 2)使用jarsigner给应用签名 3)使用apksigner给应用签名 4)使用signapk.jar给应用签名 一、应用签名的作用及重要性 Android签名的主要作用是为了: 应用程序升级:如果...

    你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:

      1.应用为什么要签名,应用签名有哪些好处?

      2.如何对应用进行签名?

    这篇博客介绍了为什么要对应用进行签名以及如何给应用签名。

    目录

    一、应用签名的作用及重要性

    二、应用签名的步骤 (介绍了不同场景)

    1.在Android Studio中给应用签名

    2.在aosp中给应用签名

    3.使用签名工具直接给应用签名

    1)签名工具介绍

    2)使用jarsigner给应用签名

    3)使用apksigner给应用签名

    4)使用signapk.jar给应用签名


    一、应用签名的作用及重要性

    Android签名的主要作用是为了:

    应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同

    应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块

    代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了

    所以一旦给Apk签名并上线后,签名文件和密码别名等一定要记住不能丢失,这样会损失用户且带来灾难性的后果。

    二、应用签名的步骤 (介绍了不同场景)

    1.在Android Studio中给应用签名

    1)准备jks签名文件

    参考 Android签名 (二) 制作签名文件

           三、制作jks格式的签名文件

    2)Android studio添签名证书

    然后编译生成的apk就是用指定的签名文件进行签名了,如果不放心,想看看apk是否已经签名,可以参考  Android签名 (一) 查看签名信息

    2.在aosp中给应用签名

    在aosp源码中使用平台签名给应用签名,Android.mk按照如下规则编辑:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    LOCAL_PACKAGE_NAME := testSigned
    LOCAL_SRC_FILES := $(call all-subdir-Java-files)
    # 这里配置成平台签名
    LOCAL_CERTIFICATE := platform

    include $(BUILD_PACKAGE) 

    3.使用签名工具直接给应用签名

    1)签名工具介绍

    签名工具说明路径
    jarsigner

    JDK提供的针对jar包签名的通用工具

    (apk也适用,本质都是zip格式的压缩包,且仅限V1签名)

    jdk/bin/jarsigner
    apksigner

    Google官方提供的针对Android apk签名及验证的专用工具

    java -jar apksigner.jar sign --ks {签名文件} {待签名的apk}

    Android SDK/build-tools/SDK版本/apksigner.bat
    signapk.jar Android提供的平台签名工具

    aosp/prebuilts/sdk/tools

    /lib/signapk.jar

    2)使用jarsigner给应用签名

    命令介绍:

    jarsigner -verbose -keystore [XXX] -storepass [XXX] -signedjar [XXX] -digestalg [XXX] -sigalg [XXX] [XXX_unsigned.apk] [Key Alias]

    -verbose  //显示签名过程

    -keystore //签名库路径

    -storepass //签名库密码

    -signedjar //已签名文件输出路径(默认修改原文件)

    -digestalg //摘要算法

    -sigalg //签名算法(例如:MD5withRSA / SHA1withRSA / SHA256withRSA )

    最后接着两个参数,分别是待签名的应用和秘匙别名

    示例 (完整版):

    # 进入JDK/bin, 输入命令:

    jarsigner -verbose -keystore debug.keystore -storepass android -signedjar signed.apk -digestalg SHA1 -sigalg MD5withRSA unsigned.apk androiddebugkey

    示例 (常用版):

    # 进入JDK/bin, 输入命令 :

    # 从JDK7开始, jarsigner默认算法是SHA256, 但Android 4.2以下不支持该算法,所以需要修改# 算法, 添加参数 -digestalg SHA1 -sigalg SHA1withRSA

    # 用JDK7及以上jarsigner签名,不支持Android 4.2 以下
    jarsigner -keystore debug.keystore unsigned.apk androiddebugkey

    # 用JDK7及以上jarsigner签名,兼容Android 4.2 以下            
    jarsigner -keystore debug.keystore -digestalg SHA1 -sigalg SHA1withRSA unsigned.apk androiddebugkey

    3)使用apksigner给应用签名

    命令介绍:

    apksigner sign --ks [密钥库名] --ks-key-alias [密钥别名] --v1-signing-enabled [是否开启] --v2-signing-enabled [是否开启] [xxx.apk]

    --ks  //密钥库路径

    --ks-key-alias //密钥别名,若密钥库有一个密钥对,则可省略,反之必选

    --v1-signing-enabled //是否开启V1签名,默认开启(例如:true-开启,false-关闭)

    --v2-signing-enabled //是否开启V2签名,默认开启 (例如:true-开启,false-关闭)

    示例 (常用版):

    # 进入Android SDK/build-tools/SDK版本, 输入命令

    # 在debug.keystore密钥库只有一个密钥对
    apksigner sign --ks debug.keystore unsigned.apk

    # 在debug.keystore密钥库中有多个密钥对,所以必须指定密钥别名
    apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey unsigned.apk

    #禁用V2签名
    apksigner sign --v2-signing-enabled false --ks [密钥库名 ] [xxx.apk]

    4)使用signapk.jar给应用签名

    a.准备平台签名文件platform.pk8 和 platform.x509.pem

    文件路径 aosp/build/target/product/security/platform.pk8 

    文件路径 aosp/build/target/product/security/platform.x509.pem

    b.准备签名工具 signapk.jar

    文件路径 aosp/prebuilts/sdk/tools/lib/signapk.jar

    或者

    本人上传的signapk.jar(推荐,原因后面会介绍)

    c.将签名文件、签名工具、要签名的apk放到同一个目录下

    d.执行签名命令

    java -jar signapk.jar platform.x509.pem platform.pk8 Test.apk signedTest.apk

    * 以上是使用本人上传的signapk.jar进行签名的命令,如果使用aosp自带的signapk.jar进行签名,需多加一个参数 -Djava.library.path,否则APK签名提示Exception in thread “main“ java.lang.ExceptionInInitializerError错误,命令如下:

    java -Djava.library.path=aosp/prebuilts/sdk/tools/linux/lib64/
    -jar signapk.jar platform.x509.pem platform.pk8 Test.apk signedTest.apk

    展开全文
  • Android 获取应用签名

    2022-06-23 17:56:55
    应用签名工具类:ApplySigningUtils.java ...安装完APK,输入自己的应用包名,就可以获取应用签名APK下载地址如下:https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android2.a

    1、根据代码获取应用签名

    应用签名工具类:ApplySigningUtils.java

    public class ApplySigningUtils {
        /**
         * 获取应用签名
         *
         * @param context
         * @param packageName
         * @return
         */
        public static String getRawSignatureStr(Context context, String packageName) {
            try {
                Signature[] signs = getRawSignature(context, packageName);
                String signValidString = getSignValidString(signs[0].toByteArray());
                return signValidString;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static Signature[] getRawSignature(Context context, String packageName) {
            if (packageName == null || packageName.length() == 0) {
                return null;
            }
            try {
                PackageInfo info = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
                if (info != null) {
                    return info.signatures;
                }
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        private static String getSignValidString(byte[] paramArrayOfByte) throws NoSuchAlgorithmException {
            MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
            localMessageDigest.update(paramArrayOfByte);
            return toHexString(localMessageDigest.digest());
        }
    
        private static String toHexString(byte[] paramArrayOfByte) {
            if (paramArrayOfByte == null) {
                return null;
            }
            StringBuilder localStringBuilder = new StringBuilder(2 * paramArrayOfByte.length);
            for (int i = 0; ; i++) {
                if (i >= paramArrayOfByte.length) {
                    return localStringBuilder.toString();
                }
                String str = Integer.toString(0xFF & paramArrayOfByte[i], 16);
                if (str.length() == 1) {
                    str = "0" + str;
                }
                localStringBuilder.append(str);
            }
        }
    }
    

    在MainActivity的onCreate调用签名工具类(记得安装已打包的APK,直接运行获取到的签名是不正确的)

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            String s = ApplySigningUtils.getRawSignatureStr(this,getPackageName());
            Log.d("应用签名:",""+ s);
        }
    }

      这样就能获取到应用签名啦

    2、可从微信开发平台下载工具进行获取

    安装完APK,输入自己的应用包名,就可以获取应用签名

    APK下载地址如下:

    https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android2.apk​​​​​​

    展开全文
  • 获取Android应用签名

    2021-06-11 04:42:09
    本章讲解下Android如何获取应用签名。在某些场景下, 我们需要某应用的签名信息,签名信息存放在包里,所以我们需要获取包信息。(1)获取已安装应用的所有包名/*** 获取所有已安装应用的包名* @param paramContext*/...

    本章讲解下Android如何获取应用签名。

    在某些场景下, 我们需要某应用的签名信息,签名信息存放在包里,所以我们需要获取包信息。

    (1)获取已安装应用的所有包名

    /**

    * 获取所有已安装应用的包名

    * @param paramContext

    */

    private List getInstalledPackageName(Context paramContext){

    PackageManager localPackageManager = paramContext.getPackageManager();

    List localPackageInfos = localPackageManager.getInstalledPackages(0);

    List list = new ArrayList<>();

    for(PackageInfo packageInfo : localPackageInfos){

    list.add(packageInfo.packageName);

    }

    return list;

    }

    (2)获取指定应用的签名

    private Signature[] getRawSignature(Context paramContext, String paramString) {

    if ((paramString == null) || (paramString.length() == 0)) {

    errout("获取签名失败,包名为 null");

    return null;

    }

    PackageManager localPackageManager = paramContext.getPackageManager();

    PackageInfo localPackageInfo;

    try {

    localPackageInfo = localPackageManager.getPackageInfo(paramString, PackageManager.GET_SIGNATURES);

    if (localPackageInfo == null) {

    errout("信息为 null, 包名 = " + paramString);

    return null;

    }

    } catch (PackageManager.NameNotFoundException localNameNotFoundException) {

    errout("包名没有找到...");

    return null;

    }

    return localPackageInfo.signatures;

    }

    (3)复制到粘贴板

    String result = result_text.getText().toString().trim();

    ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

    // 将文本内容放到系统剪贴板里。

    cm.setText(result);

    展示效果如下

    33c909940f74

    图片.png

    展开全文
  • 应用签名 用命令行获取md5值和sha256值 keytool -v -list -keystore xxx.jks
  • android获取应用32位签名

    热门讨论 2014-06-09 15:45:10
    获取android应用签名的方法网上很多,但基本都是很长一串,需要转换成32为的签名才是大家想要的
  • Android应用系统签名方法

    千次阅读 2021-03-24 16:36:40
    1.应用配置sharedUserId 在AndroidManifest.xml文件根节点中加入属性: android:sharedUserId="android.uid.system" 2.找到系统签名文件 platform.x509.pem、platform.pk8 文件位于android系统目录build/...
  • Android应用源码 打包签名 从生成keystore到完成签名.zip项目安卓应用源码下载Android应用源码 打包签名 从生成keystore到完成签名.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3....
  • 打开 Android Studio,然后选择右边的 Gradle 标签,选择一个项目,然后选择 signingReport 这个 Task,双击运行 然后选择右下角的 Gradle Console,就可以看到签名信息了 查看 APK 文件的签名 ...
  • 闲着没事儿写了个小 demo ,获取手机上已安装应用信息,系统应用和 非系统应用 MD5 SHA1 SHA256 签名信息 点击签名信息可复制到剪切板, GitHub:https://github.com/sunan-n/GetAppInfo 如下图: ```java 主要...
  • 这里实现了安卓移动APP防二次打包、防重签名、防篡改的自动化一键式加固工具。成熟的安全加固方案,均已实现和投入使用,解决了企业和个人的安全问题。针对开发者指定的移动应用(apk),以本地工具的方式,自动完成...
  • Android 5.1系统签名工具(signapk.jar、platform.x509.pem、platform.pk8)
  • Android查看应用签名

    千次阅读 2022-03-29 11:29:40
    1.cmd在命令行中输入:keytool -list -v -keystore [签名文件路径] 2.输入密码,回车
  • Android获取应用签名

    千次阅读 2020-08-27 16:22:43
    当我们需要接入百度地图等一系列需要开发版SHA1和发布版SHA1才能创建完成应用的时候,如果找不到开发版SHA1和发布版SHA1是不是很苦恼,所以我们今天来快速查找开发版SHA1和发布版SHA1。 首先是开发版SHA1的获取,...
  • 获取安卓应用签名

    2018-10-19 14:29:56
    用来获取安装应用签名,安装之后,输入应用名称即可查询
  • Android Studio的Gradle面板 Android Studio 右侧面板的 Gradle,展开,Tasks -> android -> signingReport: 点击它就可以得到应用的证书信息(包括 MD5值) #3.空APK签名: jarsigner -verbose -keystore [demo....
  • android应用签名修改

    2021-06-04 12:18:19
    1·针对上面已签名的apk,删除apk的签名信息:将test.apk改名为test.zip包后,打开压缩包,把META-INF目录下的所有文件删除后,重新压缩文件。把test.zip文件改名成test.apk。再次查看test.apk的签名信息,会发现apk...
  • android 应用的证书签名跟系统签名

    千次阅读 2022-03-16 11:19:42
    作为软件行业的从业者都知道,一款软件的开发过程中肯定会诞生两种版本,即debug版本和release版本,debug版本包含有调试信息,一般来说都要比release版本大,android应用当然也不例外 1.证书签名 并不是所有的apk文件...
  • 用于Androidstudio模拟器的系统签名,方便进行需要系统签名方面的调试,内含一个生成的platform.jks和系统签名源文件(.pk8和x509.pem等等) ,拿到源文件你也可以自己生成jks或者keystore。 内含jks签名信息: Key ...
  • Android学习笔记之签名Android应用程序

    千次阅读 2021-12-26 22:20:29
    Android项目以它的包名作为唯一标识。如果在同一台手机上安装两个包名相同的应用
  • Android应用系统签名工具
  • 如何获取Android应用签名

    千次阅读 2021-03-02 17:19:56
    1.找到app的安卓版本修改后缀名.apk改成.rar后,再解压该包。 ... 3.记录.RSA后缀文件的整体路径,并打开cmd,执行以下命令:keytool -printcert ...4.应用签名就得到了,可以是MD5的也可以是SHA1等根据需要选择。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,198
精华内容 26,479
关键字:

安卓应用无签名