編輯:關於Android編程
這件事困擾我們多時了。
我們一直想用非源碼編譯的方式解決此事,按如下步驟。
這種獲取系統簽名的方法如下:
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!
當傳統的手工打包方式遇上同一應用,多渠道/多包名及多種引導頁/icon等等差異時,就變成了苦不堪言的純體力活了。 但有了Gradle這一切不再是問題了,Gradle使得這
基於Android 6.0的源碼剖析, 分析Binder IPC通信的權限控制方法clearCallingIdentity和restoreCallingId
最近用上了印象筆記,覺得android 版的底部導航欄挺不錯的,好多應用裡面都有用到,想著自己動手實現一下,不多說,先上圖: 要完成這樣的效果。需要自定義ViewGrou
前面照著android系統的裁剪圖片的功能自己寫了一個相似的工具。功能是大體上實現了,但留下了一個調用的問題:如何從我的程序調用這個裁剪工具,並且獲得裁剪後的圖片呢?其實