如何快速查询apk包名和activity

转载请注明作者和出处:美二 https://blog.csdn.net/qq_32654897/article/details/89217656

测试工作中,查询apk包名是经常会用到的,分享几种不同场景下的简便查询方法:

一、aapt查询

  1. 该情况适用于:(已下载apk包至电脑)
  2. 先把安装包放在一个具体位置下,本例放于D:\test
  3. 输入以下命令即可查询apk文件详细信息
    aapt dump badging D:\test\360smartai.apk.
    在这里插入图片描述
  4. 拖至中间可找到launchable
    在这里插入图片描述

二、命令查询

  1. 该情况适用于:(已安装应用至手机)
  2. 打开usb调试模式
  3. 打开待查询的app
  4. 输入命令:adb shell dumpsys window | findstr mCurrentFocus
    在这里插入图片描述

三、快速查询包名

  1. 该情况适用于:(已安装应用至手机)
  2. 打开usb调试模式
  3. 输入am monitor后点击手机应用,即可快速查询包名
    adb shell.
    am monitor.
    在这里插入图片描述
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,让我来尝试回答你的问题。 首先,我们需要在布局文件中添加一个 RecyclerView 控件,如下所示: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 接下来,我们需要创建一个 Adapter 类,用于将数据绑定到 RecyclerView 上。在 Adapter 类中,我们需要实现以下几个方法: ```java public class AppListAdapter extends RecyclerView.Adapter<AppListAdapter.ViewHolder> { private List<AppInfo> mDataList; private List<String> mIndexList; private OnItemClickListener mOnItemClickListener; public AppListAdapter(List<AppInfo> dataList) { mDataList = dataList; mIndexList = new ArrayList<>(); // 初始化索引列表 for (AppInfo appInfo : mDataList) { String index = HanziToPinyin.getPinYin(appInfo.getAppName()).substring(0, 1).toUpperCase(); if (!mIndexList.contains(index)) { mIndexList.add(index); } } Collections.sort(mIndexList); } // 创建 ViewHolder @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app_list, parent, false); return new ViewHolder(view); } // 绑定数据到 ViewHolder @Override public void onBindViewHolder(ViewHolder holder, int position) { AppInfo appInfo = mDataList.get(position); holder.appName.setText(appInfo.getAppName()); holder.packageName.setText(appInfo.getPackageName()); } // 获取数据项数量 @Override public int getItemCount() { return mDataList.size(); } // 获取索引列表 public List<String> getIndexList() { return mIndexList; } // 获取索引对应的位置 public int getPositionForIndex(String index) { for (int i = 0; i < mDataList.size(); i++) { String appName = mDataList.get(i).getAppName(); if (HanziToPinyin.getPinYin(appName).substring(0, 1).equalsIgnoreCase(index)) { return i; } } return -1; } // 设置点击事件监听器 public void setOnItemClickListener(OnItemClickListener listener) { mOnItemClickListener = listener; } // ViewHolder 类 public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView appName; TextView packageName; public ViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); appName = itemView.findViewById(R.id.tv_app_name); packageName = itemView.findViewById(R.id.tv_package_name); } @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(getAdapterPosition(), mDataList.get(getAdapterPosition())); } } } // 点击事件监听器接口 public interface OnItemClickListener { void onItemClick(int position, AppInfo appInfo); } } ``` 在 Adapter 类中,我们使用了 HanziToPinyin 类,该类是一个工具类,用于将汉字转换为拼音。由于该类是系统自带的,因此我们无需导入第三方库。 接下来,我们需要实现一个 Activity 类,并在其中初始化 RecyclerView 和 Adapter。在 Activity 类中,我们还需要实现一个字幕条索引,用于快速定位列表项。下面是完整的 Activity 类代码: ```java public class MainActivity extends AppCompatActivity implements SideIndexBar.OnTouchLetterChangeListener { private RecyclerView mRecyclerView; private AppListAdapter mAdapter; private TextView mIndexText; private SideIndexBar mSideIndexBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = findViewById(R.id.recycler_view); mIndexText = findViewById(R.id.tv_index); mSideIndexBar = findViewById(R.id.side_index_bar); List<AppInfo> appList = getAppList(); mAdapter = new AppListAdapter(appList); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setAdapter(mAdapter); mSideIndexBar.setOnTouchLetterChangeListener(this); mAdapter.setOnItemClickListener(new AppListAdapter.OnItemClickListener() { @Override public void onItemClick(int position, AppInfo appInfo) { // 处理列表项点击事件 } }); } @Override public void onTouchLetterChange(String letter) { int position = mAdapter.getPositionForIndex(letter); if (position != -1) { mRecyclerView.scrollToPosition(position); } mIndexText.setText(letter); mIndexText.setVisibility(View.VISIBLE); mHandler.removeCallbacksAndMessages(null); mHandler.postDelayed(new Runnable() { @Override public void run() { mIndexText.setVisibility(View.GONE); } }, 1000); } private Handler mHandler = new Handler(); // 获取应用列表 private List<AppInfo> getAppList() { List<AppInfo> appList = new ArrayList<>(); PackageManager pm = getPackageManager(); List<PackageInfo> packages = pm.getInstalledPackages(0); for (PackageInfo packageInfo : packages) { AppInfo appInfo = new AppInfo(); appInfo.setAppName(packageInfo.applicationInfo.loadLabel(pm).toString()); appInfo.setPackageName(packageInfo.packageName); appList.add(appInfo); } Collections.sort(appList, new Comparator<AppInfo>() { @Override public int compare(AppInfo o1, AppInfo o2) { return HanziToPinyin.getPinYin(o1.getAppName()).compareToIgnoreCase(HanziToPinyin.getPinYin(o2.getAppName())); } }); return appList; } } ``` 在 Activity 类中,我们还使用了一个 AppInfo 类,用于表示应用信息。下面是 AppInfo 类的代码: ```java public class AppInfo { private String appName; private String packageName; public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } } ``` 最后,我们还需要在布局文件中添加一个字幕条索引控件,如下所示: ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <TextView android:id="@+id/tv_index" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/bg_index_text" android:gravity="center" android:textColor="@android:color/white" android:textSize="60sp" android:visibility="gone" /> <com.example.sideindexbar.SideIndexBar android:id="@+id/side_index_bar" android:layout_width="40dp" android:layout_height="match_parent" android:layout_gravity="end" /> </LinearLayout> ``` 在布局文件中,我们还需要定义一个 bg_index_text 资源文件,用于为字幕条索引控件添加背景颜色。bg_index_text.xml 文件的内容如下所示: ```xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#CC000000" /> <corners android:radius="10dp" /> <size android:width="120dp" android:height="120dp" /> </shape> ``` 至此,我们就完成了使用 RecyclerView 获取应用包名,并按照首字母排序,支持字幕条索引的功能实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值