어플을 수정할때, AndroidManifest.xml을 건드리면 폰에서 앱자체를 인식을 못합니다.
실제로 매니페스트 수정하고 앱이 안떠서 수정을 잘못했나? 하시던 분들 많으실겁니다.
하지만 그냥 매니페스트 수정으로 그 앱파일의 사인키가 깨져서 폰에서 이를 인식해 설치를 막은겁니다.
이걸 풀어주려면 프웤을 수정해야하는데요, 의외로 모르는분이 많을것같아 강좌글을 써봅니다.
http://forum.xda-developers.com/showthread.php?t=2733681 이것이 엑다에 있는 원본 강좌입니다.
1. core.jar(킷캣이하) 혹은 core-libart.jar(롤팝) 를 백스말리 해줍시다.
2. smali/java/security 폴더로 가서 MessageDigest.smali를 열어줍시다.
3. .method public static isEqual([B[B)Z 를 검색해줍시다.
4. 메소드 맨앞부분에
const/4 v1, 0x0
array-length v2, p0
이런게 있을겁니다.
5. 위 코드에서 0x0을 0x1로 바꿔줍시다.
(수정후)
const/4 v1, 0x1
array-length v2, p0
6. 저장하고 MessageDigest.smali를 닫아줍시다.
7. 같은 폴더에서 Signature.smali를 열어줍시다.
8. .method public final verify([B)Z 를 검색해줍시다.
9. 메소드 맨 끝부분에
invoke-virtual {p0, p1}, Ljava/security/SignatureSpi;->engineVerify([B)Z
move-result v0
return v0
이런게 있을겁니다.
10. 위 코드의 move-result v0을 다음과 같이 바꿔줍시다.
invoke-virtual {p0, p1}, Ljava/security/SignatureSpi;->engineVerify([B)Z
const/4 v0, 0x1
return v0
11. .method public final verify([BII)Z 를 검색해줍시다.
12. 메소드 맨 끝부분에
invoke-virtual {p0, p1, p2, p3}, Ljava/security/SignatureSpi;->engineVerify([BII)Z
move-result v0
return v0
이런게 있을겁니다.
13. 위 코드의 move-result v0을 다음과 같이 바꿔줍시다.
invoke-virtual {p0, p1, p2, p3}, Ljava/security/SignatureSpi;->engineVerify([BII)Z
const/4 v0, 0x1
return v0
14. 저장하고 Signature.smali를 닫아준 후, core-jar(혹은 core-libart.jar)를 컴파일해줍시다.
15. services.jar를 백스말리합니다.
16. smali/com/android/server/pm 폴더로 가서 PackageManagerService$InstallParams.smali 를 열어줍시다.
17. .method private installLocationPolicy(Landroid/content/pm/PackageInfoLite;I)I 를 검색해줍시다.
18. 밑으로 내리다보면
if-nez v7, :cond_1
iget v7, p1, Landroid/content/pm/PackageInfoLite;->versionCode:I
iget v8, v3, Landroid/content/pm/PackageParser$Package;->mVersionCode:I
if-ge v7, v8, :cond_1
const-string v4, "PackageManager"
new-instance v5, Ljava/lang/StringBuilder;
invoke-direct {v5}, Ljava/lang/StringBuilder;->()V
const-string v7, "Can't install update of "
이런게 있을겁니다.
19. 위의 빨간색으로 된 부분의 v값을 일치시켜줍시다.
if-ge v8, v8, :cond_1
이런식으로요.
20. 저장하고 파일을 닫아준 뒤 services.jar를 컴파일해줍시다.