2021년 1월 25일 월요일

[Android] meta-tag 으로 app전역에 필요한 설정변수값을 "values/내거.xml"에서 꺼내쓰기

 value 에있는 값을 불러내기 위해서는 같은 프로젝트(또는 라이브러리) 에서 

String mess = context.getResources().getString(R.string.myname);

처럼 해주면 문자열, 부울린, 정수등의 값을 얻을수 있다. 

내 앱이고 단일 라이브러리앱일때는 그냥 저렇게 하는게 좋다.

그러나 다음 시나리오에서는 어떤가

1.  라이브러리 ( wtflover.aar ) : 라이브러리에서 체크할 라이센스키는 라이브러리설치한(즉 구매한) 사람이 알고 있어야함.

2.  wtflover.aar 을 이용해서 내가 만들앱에서는 라이브러리에서 요구하는 키를 소스에 넣을꺼임.

3. java 소스에 하드코딩했더니, Decompiler로 라이센스키 다 까발려짐.


또한 라이센스키는 app전역에서 불러낼수 있어야 한다. 즉 application 레벨의 변수여야 한다.

이를 위해서 meta-tag라는 기능을 제공한다.

사용법은 다음과 같다.

1. AndroidManifest.xml 

: name  은 다른값들과 구분되도록 패키지이름으로 해준다. value는 직접써도 좋지만, value 밑에 별도의 xml을 만들어서 그곳에 입력된 자료들을 지정하는게 좋다. (@string,@bool, @int등이 있다)
value는 @resource로 하면 resourceID가 반환된다.

<application
...>
<
meta-data android:name="com.example.mytest.metatest" android:value="@string/myname" />
또는
<
meta-data android:name="com.example.mytest.metatest.thisbool" android:value="@resource/myname" />

<
activity android:name=".MainActivity">
<
intent-filter>
<
action android:name="android.intent.action.MAIN" />

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

2. values/my_lisensosos.xml 
메타데이터용의 별도의 xml파일을 만드는 것을 권장한다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="myname">ProximitySensor</string>
    <bool name="mybool">true</bool>    
    <integer name="mysec">12</integer >
</resources>



3. 불러내자

ApplicationInfo ai = null;
try {
ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);

if (ai.metaData.containsKey("com.example.mytest.metatest")) {
boolean mybooldata = ai.metaData.getBoolean("com.example.mytest.metatest", false);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}

구글도 네이버도 meta-tag쓴단다.

Related Posts:

  • Timber Timber Timber - Android Logging library Timber - Android Logging library Android 에 기본 Log를 출력기능이 있지만 문자수 제약, Releaseg할때도 실수로 로그를 출력등 불편한점 도 있어서 Timber라이브러리를 많이 사용합니다. Timber는 외부라이브러리서 의존… Read More
  • Kotlin StateFlow , SharedFlow Kotlin StateFlow , SharedFlow StateFlow SharedFlow replay extraBufferCapacity onBufferOverflow Flow를 SharedFlow로 변환 SharedFlow 와 StateFlow 의 비교점 LiveData, StateFlow, SharedFlow LiveData StageF… Read More
  • Android Jet Compose 기초 Android Jet Compose 기초 Sugoi Ebooks(Writen in English) Naver Cafe Sugoi Japanese Find a Job in Japan Android Jetpack Compose 1. 선언적 UI의 과거와 현재 2. Jet Compose를 사용할때의 장점 3. Compose 멀티플랫폼, 멀티디바이스 4.… Read More
  • KOTLIN 에서 AspectJ https://github.com/Ibotta/gradle-aspectj-pipeline-plugin/blob/develop/sample-kotlin/src/main/kotlin/com/ibotta/gradle/aop/kotlin/KotlinAspect.kt 여기를 참고해서 설정하고. @Aspect class KotlinAspect { @Before("execution(* com.… Read More
  • KMM IOS COMPOSE ALPHA KMM IOS COMPOSE ALPHA Sugoi Ebooks(Write in English) Naver Cafe Sugoi Japanese Find a Job in Japan iOS용 Compose Alpha가 공식적으로 출시 iOS용 Compose Alpha가 공식적으로 출시 iOS용 Jetpack Compose… Read More

0 comments:

댓글 쓰기