Youtube ReVanced 쉽게 빌드 하기

예전에 Youtube Vanced 앱이 있었습니다. Youtube premium 에 가입하지 않고도 광고를 안 볼수 있게 해주는 앱으로 알려져 있습니다.

그리고 또 하나 용도로는 아이들 tablet 에 부모보호 모드가 있으면 계정 추가가 안됩니다. 그러면 부모가 Premium 계정이 있어도, 아이들 tablet 에 계정 추가를 못해서, 광고 없는 youtube환경을 만들수 없습니다. 그럴때 Youtube Vanced 와 MicroG를 설치 하면 부모 계정으로 youtube를 보게 할 수 있습니다.

그러나 현재 이 앱은 더이상 서비스 하지 않습니다. 이유는 구글과의 소송 때문이고, 문제가 된 것은 “수정된 apk를 배포’했기 때문입니다. 그래서 Revanced는 이 점을 회피해서 사용자가 original APK를 다운 받아서, ‘직접’ apk를 수정하는 방식으로 변경되었습니다.

그러나 비개발자가 ‘직접’ 이런것을 하기는 매우어렵습니다.

여기서는 이것을 쉽게 하는 방법을 설명 합니다.. 필요한 것은 github 계정뿐입니다.

Github는 최근에 Actions 라는 CI/CD 환경을 지원해 줍니다. 이것을 이용해서 특별히 빌드 환경을 만들지 않아도, github 환경에서 수정된 apk를 만드는 법을 설명 합니다.

  1. n0k0m3/revanced-build-template: Github Template for building Revanced 이 주소를 들어 갑니다.
  2. Create a new reposity를 선택 합니다.
  3. 꼭 Private 로 설정을 해서 새로운 리포를 만듭니다. (이미 말한것처럼 수정된 APK를 배포하는 것은 법적 이슈가 있습니다. 그래서 Private 로 해야, 수정된 APK과 공개적으로 배포되지 않습니다.)
  4. Actions – Revanced Build -workflow 에서 빌드를 하고 완료를 기다립니다. (APKMirror에서 apk를 다운받아서, 패치하는 작업을 자동으로 합니다.)
  5. 이제 Release 에서 완성된 APK를 다운받아서 table 에서 사용하면 됩니다. 필요하면은 microG로 추가로 설치해서 구글 계정과 연동 하면 됩니다.
  6. 이제 광고없거나 자녀의 tablet 에 apk 를 설치해서 사용하면 됩니다
    루팅안된장비는 noroot가 붙은것으로, 루팅된 장비는 -root.apk를 받아서 사용하면 됩니다.
  7. 아래 그림을 참고해서 하면 됩니다.~

Pandas, 중복 행네임시 rename 과 insert 다른 동작

data={'COL1':['A','B','C','D'],'COL2':['1','2','3','4']}
df1 = pd.DataFrame(data)
try:
    df1.insert(1,'COL1',df1['COL2'])
except Exception as e:
    print(e) 
    df1=df1.rename(columns={'COL2':'COL1'})
print(df1)
print("#############################")
df1 = pd.DataFrame(data)
df1.insert(1,'COL1',df1['COL2'],allow_duplicates=True)
print(df1)
print("##############################")
df1 = pd.DataFrame(data).set_flags(allows_duplicate_labels=False)

try:
    df1=df1.rename(columns={'COL2':'COL1'})
except Exception as e:
    print("ERROR:",e) 
print(df1)

위 코드를 동작 시키면 아래와 같이 출력 됩니다.

cannot insert COL1, already exists  <==== insert 시 이름이 중복이라고 에러가 남. 
그러나 rename 은 동작해서 아래와 같이 COL1 이 출력됨.
  COL1 COL1
0    A    1
1    B    2
2    C    3
3    D    4
#############################
insert 시 allow_duplicates=True를 주면 동일한 이름의 column이 들어감
  COL1 COL1 COL2
0    A    1    1
1    B    2    2
2    C    3    3
3    D    4    4
##############################
Dataframe 의 속성을 duplicate를 false로 설정하면 rename 시에도 중복으로 에러가 발생함.
ERROR: Index has duplicates.
      positions
label          
COL1     [0, 1]
  COL1 COL2
0    A    1
1    B    2
2    C    3
3    D    4

여기서 이상한 점은 dataframe 의 속성이 중복 허용이어도 insert는 다르게 동작 한다는 것이다. pandas/flags.py at bedd8f0170b5ff6cd0bab0e40f9bc5b95f6e1eec · pandas-dev/pandas (github.com) 이 코드를 보면
“allows_duplicate_labels : bool, default True” .. dataframe 의 기본값은 True이다. 즉 중복을 허용한다. 그러나 pandas/frame.py at main · pandas-dev/pandas (github.com) 의 insert 함수를 보면 이 값은 false 입니다. 즉 insert 의 경우 좀더 강하게 중복에 대해서 재 검증을 하고 있습니다.

pandas 의 column이 많아 지게 되면, rename 도 이름을 중복하는 실수를 할 수도 있습니다. dataframe 의 중복기본값이 왜 ‘허용’인지는 의문이나, 안전하게 하려면 dataframe 생성시 기본적으로 .set_flags(allows_duplicate_labels=False) 속성을 주는 것이 좋아 보입니다.

tmap

tmap의 설정은 계정으로 동기화가 됩니다. 즉 핸드폰에서 ‘이름을 불러 대화 시작하기’를 On 하면, 자동차도 ‘On’이 되는데요. ‘On’ 일때 애플파이에서 문제가 사운드 모드가 ‘통화’가 되는 문제가 있습니다.

그래서 이름을 불러 대화 시작하기를 끄면 핸드폰에서도 꺼지는 불편함이 있어서 수정했습니다.

따로 On하기 전까지 매번 실행때마다 저 설정은 항상 ‘Off’입니다.



ux999 7/4 Firmware

ux999 pro Jul-4th firmware 입니다.
댓글로는 전 보다 더 안좋아졌다는 이야기도 있어서… 업그레이드는 신중하게…..

알집으로 압축되어 있고, 이거를 풀면 zip파일이 생깁니다. 이거를 TFlash 메모리에 넣고
ux999 pro의 소켓에 넣고 부팅하면 팝업이 뜨고 업그레이드가 진행 됩니다.

Tmap for Wide-screen-2

점전 팰리세이드에 최적화 시키고 있는 느낌입니다. ㅎ;
이번 수정은 광고폭을 변경 했습니다. 기존에는 이와 같이 넓게 광고가 나왔는데,
와이드 스크린이라 광고가 깨지보이기도 하고..
목적지도 몇 개 안보여서, 나름 그래도 광고는 보여주는 방향으로…
타협을 했습니다.

기존 모습
3칸만 광고로 보이는 모습.

Tmap for wide-screen

요즘 네비게이션은 wide-screen을 사용합니다.
그런데 여기서 tmap을 돌리면 축척이 너무 작다(화면에 내용이 너무 조금 보인다)라는
이야기를 들어서 수정하였습니다.

이것은 기본 축척 입니다. 속도에 따라 축척이 변하는데 이 속도 일때의 축척입니다.
그런데 이런 축척이면 고속도로 출구등을 알기가 어렵다는 VOC 였습니다.

첨부된 APK은 기존의 GPS + 축척 tweak 가 적용되었습니다. 아래와 같이 좀 더 많은 정보가 보입니다.

Tmap for UX999

네이버에 ux999를 입력하면.
ux999 : 네이버 통합검색 (naver.com)
많은 결과가 나온다.

바로 애플카플레이 프토토콜로 안드로이드를 사용하는 AI BOX라고도 불리는 장치이다.

얼마전에 이것을 구입해서 잘 활용하고 있는데.. 문제점이 있는 것이
TMAP에서만 GPS가 끊기는 현상이 있다. 장치 내부 GPS를 이용하면 괜찮은데, 애플카플레이 프로토콜로 GPS를 받으면 달리다가 끊기는 현상이다. 즉 자동차 외부 GPS를 사용하면 장치를 눈에 안 보이는 곳에 숨길수 있는데, 장치 내부 GPS를 쓰면 GPS를 수신할수 있게 꺼내 놓아야 한다. 그렇다고 외부 GPS연동에 문제가 있는가 하면 ‘카카오 내비’는 잘 작동 한다는 것이다.

그래서 TMAP 고객센터에 문의 했더니 GPS신호를 1초마다 수신해야 하는데 그렇지 못해서 그런것이고, GPS 모듈 문제라는 회신을 받았다. 카카오내비도 잘되고 GPS 좌표도 정상적으로 받는다고 아무리 이야기 했지만 그냥 내 GPS 문제라고.

그래서 카카오내비를 썼는데.. 아무래도 불편하다. 그래서 tmap을 동작하게 해야 겠다고 생각했다.

TMAP을 리버싱해서 확인해보니.. 역시 역사가 느껴지는 코드이다. 예전 장비들은 GPS 오류가 많았던것으로 추측이 되고.. 그에 대해서 다양한 방법으로 그 GPS오류를 회피하게 해놓았다.
GPS가 갑자기 튀거나, 터널을 들어가거나, 교차로를 지나가는 등등.. 상황을 예상해서 필터를 걸고,
이러한 로직중에 나의 환경과 충돌나는 부분이 있었는데.,
난 카플레이 프토토콜로 GPS를 사용하기 떄문에 사용가능한 GPS 개수는 0개이다. 그냥 좌표값만 나온다.
그러나 TMAP의 로직은 사용가능한 GPS가 0개이면 그냥 아웃시켜 버린다. 그결과 달리다가 GPS가 끊기는 결과가 나왔다.

이런 문제를 회피하는 방법은 사용가능한 GPS를 여러개 있다고 가짜로 알려 주면 된다. 그러면 여기서 안드로이드 Framework를 수정하거나 Tmap을 수정해야 하는데, Framework를 수정하는게 맞는 방향이기는 하나, 귀찮다.; 그래서 그냥 Tmap을 수정하기로 했다. 그냥 GPS가 항상 언제나 0x10개라고 return 하게 해주었다. 이렇게 하면 단점이 진짜로 GPS신호를 잃었을 때도 있다고 잘못된 정보가 나가는 것인데…

나의 환경으로 봐서는 GPS가 있는데 없다고 하는것 보다, 없는데도 있다고 하는게 더 좋다. 실제로 GPS가 고장날 가능성은 낮고, 이런 경우 금방 문제가 눈에 보일 것이고.. 현재 프로토콜상 실제 GPS개수를 알수도 없기 때문이다. 아래 코드가 반영된 APK은 아래와 같다.

Tmap이 처음 안내처럼 GPS가 1초마다 변하면 GPS 신호를 인정해주거나…
이런 새로운 장비도 지원을 해 주었으면 좋겠는데…

diff --git a/smali_classes4/com/skt/tmap/engine/navigation/location/GpsStatusListener.smali b/smali_classes4/com/skt/tmap/engine/navigation/location/GpsStatusListener.smali
index aca1d41d..dbcbb64e 100644
--- a/smali_classes4/com/skt/tmap/engine/navigation/location/GpsStatusListener.smali
+++ b/smali_classes4/com/skt/tmap/engine/navigation/location/GpsStatusListener.smali
@@ -107,6 +107,7 @@

     .line 1
     iget v0, p0, Lcom/skt/tmap/engine/navigation/location/GpsStatusListener;->fixedSatelliteCount:I
+    const v0, 0x10

     return v0
 .end method