Android实战技巧之五十:App的系统签名
2016-03-15 18:18
351 查看
这件事困扰我们多时了。
我们一直想用非源码编译的方式解决此事,按如下步骤。
这种获取系统签名的方法如下:
1、apk中需要使用android:sharedUserId=”android.uid.system” 这个属性。在Manifest文件修改,如下:
2、将app做无签名编译(Android Studio)
用命令行编译
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
安装时遇到的问题:
困扰了大概半个月,最后觉得还是源码编译吧。
1、将Android Studio项目复制到源码packages/apps/路径下
2、从其他项目如Settings复制Android.mk,做一些修改如下:
3、将res文件夹和Manifest文件拷到与Android.mk同级目录(项目的根目录)
4、编译
5、成功后会生成两个文件: .odex和.apk文件
前者是优化过的可执行程序。此时可以把apk文件当成普通的应用安装即可。
6、如何证明已经获得系统签名
很简单,使用SystemClock.setCurrentTimeMillis修改系统时间,将其修改为12:15,如下:
Good Luck!
我们一直想用非源码编译的方式解决此事,按如下步骤。
这种获取系统签名的方法如下:
1、apk中需要使用android:sharedUserId=”android.uid.system” 这个属性。在Manifest文件修改,如下:
[code]<?xml version="1.0" encoding="utf-8"?> <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" /> </intent-filter> </activity> </application> </manifest>
2、将app做无签名编译(Android Studio)
用命令行编译
[code]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
安装时遇到的问题:
[code]Installation failed with message INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.
困扰了大概半个月,最后觉得还是源码编译吧。
1、将Android Studio项目复制到源码packages/apps/路径下
2、从其他项目如Settings复制Android.mk,做一些修改如下:
[code]LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_J***A_LIBRARIES := bouncycastle conscrypt telephony-common LOCAL_STATIC_J***A_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、编译
[code]mm -B
5、成功后会生成两个文件: .odex和.apk文件
前者是优化过的可执行程序。此时可以把apk文件当成普通的应用安装即可。
6、如何证明已经获得系统签名
很简单,使用SystemClock.setCurrentTimeMillis修改系统时间,将其修改为12:15,如下:
[code] 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!
相关文章推荐
- Android的Bitmap和BitmapDrawable类解析-android学习之旅(六十)
- Android中的数据库相关以及封装
- Canvas清理画布
- 关于Android类似qq和微信那种在桌面图标右上角更新数字的研究
- Android Studio中多项目共享Library
- android典型的选项卡界面利用viewPager+fragment实现
- iOS多页面传值方式之单例传值singleton
- Mac下Android Studio NDK 环境搭建并运行
- Android 实现模拟按键方法
- Android基础知识之控件系列(4)——CheckedTextView、Chronometer、DigitalClock类
- Apparmor介绍与设置
- Android Studio 加载本地Assets中的html文件
- Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
- iOS开发中的火星坐标系及各种坐标系转换算法
- android各种效果开源项目
- android 跟随手指移动的 view
- Android 中 View 炸裂特效的实现分析
- IOS的KVO不能监听的场景
- Unity 怪名称、血条和飘血跟随
- iOS本地推送