2012/01/11 10:38:00String launcher = null;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
PackageManager pm = context.getPackageManager();
ResolveInfo info = pm.resolveActivity(intent,
PackageManager.MATCH_DEFAULT_ONLY);
if (info != null) {
ActivityInfo a = info.activityInfo;
if (a != null) {
launcher = a.packageName;
Log.d(TAG, "launcher="+launcher);
}
}
2011/10/28 13:49:00
- それはWebアプリケーションでは実現できないのか?
- 要求するパーミッションは適切か?
- 安易にREAD_PHONE_STATEを要求していないか?
- 端末固有情報に依存した設計になっていないか?
- そのアプリケーションには広告が必要か?
- 認証方式は適切か?
- 端末固有情報で認証しようとしていないか?(←論外)
- SQLインジェクションに耐えられるか?
- 任意のJavaScriptをロードできるようになっていないか?
- rootをとられてもデータを守れるのか?
- ユーザーに無断で情報を送信していないか?
- 利用許諾は適切か?
- 送信の都度、許可画面を表示しているか?
- 難読化したからといって安心していないか?
- ProGuardの限界
- 文字列は難読化できない
- 既存API呼び出しは難読化できない
- Android Marketにロックインされていないか?
- LVL
- アプリ内課金
- リファラー追跡
- (C2DM)
- 代替手段はないのか?
- 本当にプリインストールする必要があるのか?
2011/10/19 16:51:00Class clazz = Class.forName("android.content.res.AssetManager");
Object am = clazz.newInstance();
Method addAssetPath =
am.getClass().getMethod(
"addAssetPath",
new Class[]{ String.class });
Object c = addAssetPath.invoke(am, publicSourceDir);//.apkのフルパス
if (c != null) {
int cookie = Integer.parseInt(c.toString());
Method openXmlResourceParser =
am.getClass().getMethod(
"openXmlResourceParser",
new Class[]{ int.class, String.class });
Object p =
openXmlResourceParser.invoke(am, cookie, "AndroidManifest.xml");
if (p instanceof XmlResourceParser) {
XmlResourceParser parser = (XmlResourceParser)p;
int type;
String tagName = null;
while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT) {
switch (type) {
case XmlResourceParser.START_TAG:
tagName = parser.getName();
// 要素開始の処理
break;
case XmlResourceParser.END_TAG:
tagName = parser.getName();
// 要素終了の処理
break;
}
}
}
}
注:こんなことやらなくてもPackageManager経由でAndroidManifest.xmlに書いてある情報はとれます。AndroidManifest.xmlを直接読まなければ取得できない情報はreceiverぐらい。
2011/08/23 11:40:00<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="packages/apps/AccountsAndSyncSettings/src"/>
<classpathentry kind="src" path="packages/apps/Bluetooth/src"/>
<classpathentry kind="src" path="packages/apps/Browser/src"/>
<classpathentry kind="src" path="packages/apps/Calendar/src"/>
<classpathentry kind="src" path="packages/apps/Calculator/src"/>
<classpathentry kind="src" path="packages/apps/Camera/src"/>
<classpathentry kind="src" path="packages/apps/CertInstaller/src"/>
<classpathentry kind="src" path="packages/apps/Contacts/src"/>
<classpathentry kind="src" path="packages/apps/DeskClock/src"/>
<classpathentry kind="src" path="packages/apps/Email/src"/>
<classpathentry kind="src" path="packages/apps/HTMLViewer/src"/>
<classpathentry kind="src" path="packages/apps/Launcher2/src"/>
<classpathentry kind="src" path="packages/apps/Mms/src"/>
<classpathentry kind="src" path="packages/apps/PackageInstaller/src"/>
<classpathentry kind="src" path="packages/apps/Phone/src"/>
<classpathentry kind="src" path="packages/apps/QuickSearchBox/src"/>
<classpathentry kind="src" path="packages/apps/Settings/src"/>
<classpathentry kind="src" path="packages/apps/SoundRecorder/src"/>
<classpathentry kind="src" path="packages/apps/Stk/src"/>
<classpathentry kind="src" path="packages/apps/Tag/src"/>
<classpathentry kind="src" path="packages/apps/VoiceDialer/src"/>
<classpathentry kind="src" path="packages/providers/CalendarProvider/src"/>
<classpathentry kind="src" path="packages/providers/ContactsProvider/src"/>
<classpathentry kind="src" path="packages/providers/DownloadProvider/src"/>
<classpathentry kind="src" path="packages/providers/DrmProvider/src"/>
<classpathentry kind="src" path="packages/providers/MediaProvider/src"/>
<classpathentry kind="src" path="packages/providers/TelephonyProvider/src"/>
<classpathentry kind="src" path="frameworks/base/awt"/>
<classpathentry kind="src" path="frameworks/base/cmds/am/src"/>
<classpathentry kind="src" path="frameworks/base/cmds/input/src"/>
<classpathentry kind="src" path="frameworks/base/cmds/pm/src"/>
<classpathentry kind="src" path="frameworks/base/cmds/svc/src"/>
<classpathentry kind="src" path="frameworks/base/common/java"/>
<classpathentry kind="src" path="frameworks/base/core/java"/>
<classpathentry kind="src" path="frameworks/base/core/config/sdk"/>
<classpathentry kind="src" path="frameworks/base/graphics/java"/>
<classpathentry kind="src" path="frameworks/base/keystore/java"/>
<classpathentry kind="src" path="frameworks/base/location/java"/>
<classpathentry kind="src" path="frameworks/base/media/java"/>
<classpathentry kind="src" path="frameworks/base/obex"/>
<classpathentry kind="src" path="frameworks/base/opengl/java"/>
<classpathentry kind="src" path="frameworks/base/packages/SettingsProvider/src"/>
<classpathentry kind="src" path="frameworks/base/policy/src"/>
<classpathentry kind="src" path="frameworks/base/sax/java"/>
<classpathentry kind="src" path="frameworks/base/services/java"/>
<classpathentry kind="src" path="frameworks/base/telephony/java"/>
<classpathentry kind="src" path="frameworks/base/test-runner/src"/>
<classpathentry kind="src" path="frameworks/base/voip/java"/>
<classpathentry kind="src" path="frameworks/base/vpn/java"/>
<classpathentry kind="src" path="frameworks/base/wifi/java"/>
<classpathentry kind="src" path="development/samples/ApiDemos/src"/>
<classpathentry kind="src" path="development/samples/ApiDemos/tests/src"/>
<classpathentry kind="src" path="development/samples/Compass/src"/>
<classpathentry kind="src" path="development/samples/HelloActivity/src"/>
<classpathentry kind="src" path="development/samples/HelloActivity/tests/src"/>
<classpathentry kind="src" path="development/samples/Home/src"/>
<classpathentry kind="src" path="development/samples/LunarLander/src"/>
<classpathentry kind="src" path="development/samples/LunarLander/tests/src"/>
<classpathentry kind="src" path="development/samples/NotePad/src"/>
<classpathentry kind="src" path="development/samples/NotePad/tests/src"/>
<classpathentry kind="src" path="development/samples/RSSReader/src"/>
<classpathentry kind="src" path="development/samples/SkeletonApp/src"/>
<classpathentry kind="src" path="development/samples/SkeletonApp/tests/src"/>
<classpathentry kind="src" path="development/samples/Snake/src"/>
<classpathentry kind="src" path="development/samples/Snake/tests/src"/>
<classpathentry kind="src" path="development/apps/Term/src"/>
<classpathentry kind="src" path="libcore/dalvik/src/main/java"/>
<classpathentry kind="src" path="libcore/icu/src/main/java"/>
<classpathentry kind="src" path="libcore/json/src/main/java"/>
<classpathentry kind="src" path="libcore/junit/src/main/java"/>
<classpathentry kind="src" path="libcore/luni/src/main/java"/>
<classpathentry kind="src" path="libcore/xml/src/main/java"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/ApiDemos_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/Browser_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/CalendarProvider_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/ContactsProvider_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/Email_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/Music_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/Phone_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/APPS/QuickSearchBox_intermediates/src/src"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/location/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/media/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/telephony/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/voip/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/vpn/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/wifi/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/services_intermediates/src"/>
<classpathentry kind="src" path="out/target/common/R"/>
<classpathentry kind="src" path="external/tagsoup/src"/>
<classpathentry kind="src" path="external/apache-http/src"/>
<classpathentry kind="src" path="external/bouncycastle/src/main/java"/>
<classpathentry kind="src" path="external/nist-sip/java"/>
<classpathentry kind="lib" path="packages/apps/Calculator/arity-2.1.2.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/core_intermediates/javalib.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/guava_intermediates/javalib.jar"/>
<classpathentry kind="output" path="out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes"/>
</classpath>
2011/08/22 15:42:00これを読んでおかしいなあと思って調べてみた。
正解は下記。(なかのひとさんありがとう)
TelephonyManager tm =
(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String spn = tm.getSimOperatorName();
参考: 「設定」の「
端末の状態」と同じことをやってみあた。
package com.example.phone.info.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class Main extends Activity {
private static final String TAG = Main.class.getName();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
Class telephonyProperties =
Class.forName("com.android.internal.telephony.TelephonyProperties");
Log.d(TAG, "onCreate: telephonyProperties="+telephonyProperties);
Field[] fields = telephonyProperties.getFields();
Log.d(TAG, "onCreate: fields="+fields);
Class systemProperties =
Class.forName("android.os.SystemProperties");
Log.d(TAG, "onCreate: systemProperties="+systemProperties);
Method get =
systemProperties.getMethod("get", new Class[] { String.class });
Log.d(TAG, "onCreate: get="+get);
for (Field f: fields) {
Object obj = f.get(null);
Object result = get.invoke(systemProperties, new Object[] { obj });
Log.d(TAG, "onCreate: obj="+obj+", result="+result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上記を実行した結果、こんなLogCatが得られた。
08-22 15:44:40.835: DEBUG/com.example.phone.info.test.Main(15121): onCreate: obj=gsm.sim.operator.alpha, result=NTT DoCoMo
実験結果:
SystemProperties.get("gsm.sim.operator.alpha")
追試希望:
auの場合、"cdma.sim.operator.alpha"になりはしないのか。だれか追試して。
|
|
| | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | 15 | 16 | 17 | 18 | 19 | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 28 | | 29 | 30 | 31 | | | | |
|
|
|