meta-tag 으로 app전역에 필요한 설정변수값을 "values 내거.xml"에서 꺼내쓰기
meta-tag 으로 app전역에 필요한 설정변수값을 "values/내거.xml"에서 꺼내쓰기
value 에있는 값을 불러내기 위해서는 같은 프로젝트(또는 라이브러리) 에서
String mess = context.getResources().getString(R.string.myname);
처럼 해주면 문자열, 부울린, 정수등의 값을 얻을수 있다.
내 앱이고 단일 라이브러리앱일때는 그냥 저렇게 하는게 좋다.
그러나 다음 시나리오에서는 어떤가
-
라이브러리 ( wtflover.aar ) : 라이브러리에서 체크할 라이센스키는 라이브러리설치한(즉 구매한) 사람이 알고 있어야함.
-
wtflover.aar 을 이용해서 내가 만들앱에서는 라이브러리에서 요구하는 키를 소스에 넣을꺼임.
-
java 소스에 하드코딩했더니, Decompiler로 라이센스키 다 까발려짐.
또한 라이센스키는 app전역에서 불러낼수 있어야 한다. 즉 application 레벨의 변수여야 한다.이를 위해서 meta-tag라는 기능을 제공한다.
사용법은 다음과 같다.
- 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>
- 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쓴단다.
0 comments:
댓글 쓰기