• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android实战技巧之五十:App的系统签名

Android实战技巧之五十:App的系统签名

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android项目实战,android开发实战经典,android实战,android实战指南,android项目实战视频等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android实战技巧之五十:App的系统签名


这件事困扰我们多时了。
我们一直想用非源码编译的方式解决此事,按如下步骤。

这种获取系统签名的方法如下:
1、apk中需要使用android:sharedUserId=”android.uid.system” 这个属性。在Manifest文件修改,如下:

<code class=" hljs xml"><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.linc.systemsigndemo" android:shareduserid="android.uid.system">
    <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN">

                <category android:name="android.intent.category.LAUNCHER">
            </category></action></intent-filter>
        </activity>
    </application>

</manifest></code>

2、将app做无签名编译(Android Studio)
用命令行编译

Windows: gradlew.bat assembleRelease 
Mac/linux: ./gradlew assembleRelease

3、对apk进行系统签名。
1)、在android源码下build/target/product/security找到两个密钥文件platform.x509.pem platform.pk8
2)、out/host/linux-x86/framework/signapk.jar找到系统封装工具signapk.jar
3)、使用命令java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk

安装时遇到的问题:

Installation failed with message INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.

困扰了大概半个月,最后觉得还是源码编译吧。
1、将Android Studio项目复制到源码packages/apps/路径下
2、从其他项目如Settings复制Android.mk,做一些修改如下:

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

LOCAL_JAVA_LIBRARIES := bouncycastle conscrypt telephony-common
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 android-support-v13 jsr305

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := \
        $(call all-java-files-under, app/src/main/java/) \

LOCAL_PACKAGE_NAME := SystemSignDemo
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

LOCAL_AAPT_FLAGS += -c zz_ZZ

include $(BUILD_PACKAGE)

# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

3、将res文件夹和Manifest文件拷到与Android.mk同级目录(项目的根目录)
4、编译

mm -B

5、成功后会生成两个文件: .odex和.apk文件
前者是优化过的可执行程序。此时可以把apk文件当成普通的应用安装即可。

6、如何证明已经获得系统签名
很简单,使用SystemClock.setCurrentTimeMillis修改系统时间,将其修改为12:15,如下:

 mTvInfo.setText("time: "+SystemClock.currentThreadTimeMillis());

        Calendar c = Calendar.getInstance();

        c.set(Calendar.HOUR_OF_DAY, 12);
        c.set(Calendar.MINUTE, 15);
        long when = c.getTimeInMillis();

        if (when / 1000 < Integer.MAX_VALUE) {
            Log.d(TAG,"set time");
            mTvInfo.append("\nset time when: "+when);
            SystemClock.setCurrentTimeMillis(when);
        }

Good Luck!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 9套Android实战经典项目资料分享给大家,9套android
  • Android 急速发布项目到 JitPack,androidjitpack
  • Android反编译和二次打包实战
  • 【项目篇】Android团队项目开发之统一代码规范
  • Android实战技巧之五十:App的系统签名
  • Android实战技巧之四十九:Usb通信之USB Host
  • android 项目 分享图片到微信

相关文章

  • 2017-05-26一.TextView 显示文本框控件, EditText 输入文本框,.textviewedittext
  • 2017-05-26阅读《Android 从入门到精通》(29)——LinearLayout 等四类方法
  • 2017-05-26Android Studio插件,androidstudio插件
  • 2017-05-26Android开发学习-view,android开发-view
  • 2017-05-26Fragment 重叠 遮盖问题,fragment遮盖
  • 2017-05-26SwipeRefreshLayout下拉刷新,swiperefreshlayout
  • 2017-05-26AsyncTask注意事项,面试技巧和注意事项
  • 2017-05-26AppLaunchChecker
  • 2017-05-26android studio 图片资源的放置位置,你中枪了吗?
  • 2017-05-222.5.7 Toast(吐司)的基本使用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • unity安卓读写目录,unity安卓读写
    • Android常用命令行-adb,android-adb
    • 手机影音7--视频播放器的基本功能(4),7--基本功能
    • Lambda表达式在Kotlin中怎样工作的:setOnClickListener的转换(KAD 18),180
    • 3.5 监听EditText的内容变化
    • Amazon Alexa登录授权(Android),amazonandroid
    • android 之 启动画面的两种方法,android两种方法
    • retrofit2中ssl的Trust anchor for certification path not found问题,retrofit2anchor
    • 7.5.6 WebView处理网页返回的错误码信息
    • Android中AsyncTask分析--你所不注意的坑,androidasynctask

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有