最新项目中需要启动第三方App,代码很简单,调用对应的API即可,主要是获取包名。可以使用sdk下自带的aapt来获取应用的一些信息。

1.首先要配置aapt的环境变量,否则会报命令没有发现。

使用open命令打开.bash_profile文件,在文件末尾追加以下代码行

1.  AAPT_HOME=/Users/du/Library/Android/sdk/build-tools/27.0.1  2.  export AAPT_HOME  3.  export PATH=$PATH:$AAPT_HOME

把AAPT_HOME换成自己的路径,27.0.1 可以是build-tools下面的任意一个版本

2.通过aapt dump badging命令获取App信息

aapt dump badging apkPath //apkPath:安装包的路径

下面以京东为例:

EDZdeMacBook-Pro:~ gfd$ aapt dump badging /Users/fj/Downloads/JDpad.apkpackage: name='com.jingdong.app.mall' versionCode='57940' versionName='6.6.9' platformBuildVersionName='8.0.0'sdkVersion:'14'targetSdkVersion:'25'uses-permission: name='android.permission.INTERNET'uses-permission: name='android.permission.ACCESS_WIFI_STATE'uses-permission: name='android.permission.ACCESS_NETWORK_STATE'uses-permission: name='android.permission.ACCESS_NETWORK_STATE'uses-permission: name='android.permission.READ_PHONE_STATE'uses-permission: name='android.permission.CALL_PHONE'uses-permission: name='android.permission.CAMERA'uses-permission: name='android.permission.FLASHLIGHT'uses-permission: name='android.permission.VIBRATE'uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE'uses-permission: name='android.permission.READ_EXTERNAL_STORAGE'uses-permission: name='android.permission.MOUNT_UNMOUNT_FILESYSTEMS'uses-permission: name='android.permission.DOWNLOAD_WITHOUT_NOTIFICATION'uses-permission: name='com.android.launcher.permission.INSTALL_SHORTCUT'uses-permission: name='com.android.launcher.permission.UNINSTALL_SHORTCUT'uses-permission: name='android.permission.RESTART_PACKAGES'uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'uses-permission: name='android.permission.GET_TASKS'uses-permission: name='android.permission.KILL_BACKGROUND_PROCESSES'uses-permission: name='android.permission.READ_CONTACTS'uses-permission: name='android.permission.RECORD_AUDIO'uses-permission: name='android.permission.ACCESS_COARSE_LOCATION'uses-permission: name='android.permission.ACCESS_FINE_LOCATION'uses-permission: name='android.permission.ACCESS_LOCATION_EXTRA_COMMANDS'uses-permission: name='android.permission.READ_LOGS'uses-permission: name='android.permission.EXPAND_STATUS_BAR'uses-permission: name='android.permission.MODIFY_AUDIO_SETTINGS'uses-permission: name='android.permission.WAKE_LOCK'uses-permission: name='android.permission.SYSTEM_ALERT_WINDOW'uses-permission: name='com.jingdong.app.mall.permission.self_broadcast'uses-permission: name='com.jingdong.app.mall.permission.MIPUSH_RECEIVE'uses-permission: name='android.permission.INTERACT_ACROSS_USERS'uses-permission: name='android.permission.INTERACT_ACROSS_USERS_FULL'uses-permission: name='com.meizu.flyme.push.permission.RECEIVE'uses-permission: name='com.jingdong.app.mall.push.permission.MESSAGE'uses-permission: name='com.meizu.c2dm.permission.RECEIVE'uses-permission: name='com.jingdong.app.mall.permission.C2D_MESSAGE'uses-permission: name='getui.permission.GetuiService.com.jingdong.app.mall'uses-permission: name='android.permission.RECEIVE_USER_PRESENT'uses-permission: name='android.permission.BROADCAST_STICKY'uses-permission: name='android.permission.BLUETOOTH'uses-permission: name='android.permission.BATTERY_STATS'uses-permission: name='android.permission.DISABLE_KEYGUARD'uses-permission: name='com.jd.permissions.MSG_BROADCAST'uses-permission: name='android.permission.NFC'uses-permission: name='android.permission.BLUETOOTH_ADMIN'uses-permission: name='android.permission.BLUETOOTH_ADMIN'uses-permission: name='android.permission.CHANGE_WIFI_MULTICAST_STATE'uses-permission: name='android.permission.CHANGE_NETWORK_STATE'uses-permission: name='android.permission.CHANGE_WIFI_STATE'uses-permission: name='com.android.launcher.permission.READ_SETTINGS'uses-permission: name='com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE'uses-permission: name='android.permission.USE_FINGERPRINT'application-label:'京东'application-icon-120:'r/b/jd_buy_icon.png'application-icon-160:'r/b/jd_buy_icon.png'application-icon-240:'r/b/jd_buy_icon.png'application-icon-320:'r/u/jd_buy_icon.png'application-icon-400:'r/s/jd_buy_icon.png'application-icon-420:'r/s/jd_buy_icon.png'application-icon-480:'r/s/jd_buy_icon.png'application-icon-560:'r/k/jd_buy_icon.png'application-icon-640:'r/k/jd_buy_icon.png'application-icon-65534:'r/b/jd_buy_icon.png'application-icon-65535:'r/k/jd_buy_icon.png'application: label='京东' icon='r/b/jd_buy_icon.png'launchable-activity: name='com.jingdong.app.mall.main.MainActivity'  label='' icon=''aapt(850,0x7fff9aa9f3c0) malloc: *** error for object 0x2: pointer being freed was not allocated*** set a breakpoint in malloc_error_break to debugAbort trap: 6EDZdeMacBook-Pro:~ gfd$ 

从上面我们可以看到packagelaunchable-activity,有这两个信息我们就可以在自己的应用里启动它了。

3.通过Intent启动第三方App

Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);ComponentName cn = new ComponentName("com.jingdong.app.mall",                "com.jingdong.app.mall.main.MainActivity");intent.setComponent(cn);if (intent.resolveActivityInfo(context.getPackageManager(), PackageManager.MATCH_DEFAULT_ONLY) != null) {//启动的intent存在          context.startActivity(intent);} else {      Toast.makeText(context, "应用未安装", Toast.LENGTH_SHORT).show();}

intent.resolveActivityInfo(context.getPackageManager(), PackageManager.MATCH_DEFAULT_ONLY) != null是用来判断启动app是否安装了。看到网上很多都是获取packageInfo = this.getPackageManager().getPackageInfo(pkgName, 0);,然后通过判断packageInfo是否为空来判断是否安装过来。该Api在高版本上会报错。

最后

如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足,定期免费分享技术干货。谢谢!

更多相关文章

  1. 在Linux中连接android设备
  2. android Debug模式如何签名
  3. Qt for Android(安卓)编译纯C工程
  4. 查看Android中支持的linux命令
  5. [Android] 基于 Linux 命令行构建 Android(安卓)应用(五):Ant 构建
  6. android下使用gdb调试工具笔记
  7. Android人脸识别app——基于Face++,MVP+Retofit+RxJava+Dagger高
  8. adb常用命令总结
  9. Android自学笔记-3-ADB的常用命令

随机推荐

  1. java中循环遍历删除List和Set集合中元素
  2. getter on xmlbeans生成的类返回null,它不
  3. 如何从webview获取javascript值到android
  4. 当只使用get()和set()方法时,用原始类型替换At
  5. 蓝桥杯 ALGO-53 算法训练 最小乘积(基本
  6. 关于LSA的相关学习---短文本聚类涉及到的
  7. 理顺 JavaScript (12) - 一个比较实用的
  8. 请问用Java如何逐行的读取一个文本文件呀
  9. web基础之自动处理表单填装javabean
  10. 给JavaScript24条最佳实践