|
本帖最后由 ironMan.K 于 2018-7-10 11:00 编辑
最近要定制个Launcher,最后选择了 Launcher3,要在4.4上跑,掉坑里去了,太深 :sob:
首先在桌面上要显示一些应用的快捷方式,小部件之类的,这就需要知道他们的包名和入口 Activity.
获取应用包名 这个有以下几种方式:
1 经常用R.E管理器的同学,应该知道在系统/data/data目录下存着该手机所有的应用数据,并且是以包名为文件夹命名的,so直接ls查看就可以了
adb shell //进入系统终端cd /data/data && lswindow用户找不到adb命令的,请把adb目录加入到环境变量里。
请看:
adb1s
我的终端是git带的,还不错的。
2 包管理器pm获取
adb shellpm list packagepm list package -f//显示的更详细些请看:
pmlist
pmlistf
我们都知道,开发的安卓app的AndroidManifest.xml文件里有一个起始 Activity,包含如下过滤信息:
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
复制代码
因此可以根据这个来获取包名和入口 Activity,具体代码在后面,请稍等。。。
获取应用的入口 Activity这个必须获取到app才能继续,可以通过Android Device Monitor工具,pull到桌面,(直接adb pull 出现问题,搞不懂)然后进行下面,可以同时获取包名和入口 Activity
- aapt dump badging ***.apk
复制代码
找不到的,把该工具加入环境变量,我的在这里:D:\Android\Sdk\build-tools\23.0.2
请看:
appt
网上找了个脚本,我放到了这个 Gist, Come on, boy.
运行脚本,搞掂,这样:
sh
apktool.bat d ***.apk之后找到AndroidManifest.xml文件,后面你们都知道了,搞定。
- Intent intent = new Intent(Intent.ACTION_MAIN, null);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- List<ResolveInfo> packageInfos = getPackageManager().queryIntentActivities(intent, 0);
- for (int i = 0; i < packageInfos.size(); i++) {
- String launcherActivityName = packageInfos.get(i).activityInfo.name;
- String packageName = packageInfos.get(i).activityInfo.packageName;
- Log.i("appappinfo", i + " -- launcherActivityName: " + launcherActivityName);
- Log.e("appappinfo", i + " -- packageName: " + packageName);
- }
复制代码
好了,这样就搞掂,enjoy。
获取小部件包名和类名
- List<AppWidgetProviderInfo> widgetProviderInfos = AppWidgetManager.getInstance(this).getInstalledProviders();
- Log.d("widget", "allWidgetSize = " + widgetProviderInfos.size());
- for (int i = 0; i < widgetProviderInfos.size(); i++) {
- AppWidgetProviderInfo info = widgetProviderInfos.get(i);
- String packageName = info.provider.getPackageName(); //获取包名
- String className = info.provider.getClassName(); //获取类名
- Log.d("widget", "packageName: " + packageName);
- Log.d("widget", "className: " + className);
- }
复制代码
根据包名打开该应用
- public static void openApp(Context context,String packageName) throws Exception{
- Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
- context.startActivity(intent);
- }
复制代码
That' all.
https://www.jianshu.com/p/99c9360a7d4b
|
上一篇: Android系统定制之SystemUI修改:下拉通知栏尺寸下一篇: 乐视pro3 x650 双摄ai版 原厂线刷包解锁救砖,纯净无内置资料
|