# Android常用指令

# gradlew指令

如:发生Manifest文件合并冲突或者参数错误,显示错误内容:Error:Execution failed for task ':test:processDebugManifest'.> Manifest merger failed with multiple errors, see logs, 就可以使用 gradlew processDebugManifest 来查看Manifest详细日志

Windows环境:

gradlew compileDebugSource --stacktrace -info (打印具体错误栈信息)
gradlew processDebugManifest --stacktrace (查看所有Manifest中详细错误日志记录)
    
gradlew -q :app:dependencies // 查看详细的依赖信息,树形结构(重要)
gradlew dependencies --info  // 查看详细的依赖信息
gradlew tasks --all 查看所有任务
gradlew -v              // 查看Gradle、Groovy、Ant、JVM等的版本
gradlew clean           // 类似 Clean Project
gradlew build --info    // 编译并打印日志
gradlew assembleDebug   // 编译打debug包
gradlew assembleRelease // 编译打release包

// 结合应用变体 productFlavorsName,编译[mmm_ability_fir]变体的release包(注意大小写)
gradlew assembleMmm_ability_firRelease

Mac OS或Linux系统下:

$ chmod +x gradlew        // chmod命令是给gradlew增加执行权限,只需要执行一次
$ ./gradlew clean         // 类似 Clean Project
$ ./gradlew assembleDebug // 编译并打Debug包

# apk 签名工具

apksigner 工具指南 (opens new window)

cd D:\Program Files\Java\jdk1.8.0_144\bin

jarsigner -verbose -keystore D:\Maimaimai\merchantplatform.jks -signedjar D:\tap_sign.apk D:\tap_unsign.apk merchantplatform

参数说明:

-verbose -keystore xxx.jks(密钥库路径)

-signedjar xxx.apk(签名后的apk路径) xxx.apk(未签名的apk路径)

merchantplatform 密钥库别名

# apk 签名算法

签名指南 (opens new window)

签名算法 MD5SHA1SHA256

cd D:\Program Files\Java\jre1.8.0_144\bin>

  • Debug调试版: C:\Users\zhengz.android\debug.keystore

    keytool -list -v -keystore C:\Users\zhengz\.android\debug.keystore
    
  • 正式发布版: D:\Maimaimai\dongpin-git\merchantplatform.jks

    keytool -list -v -keystore D:\Maimaimai\merchantplatform.jks
    

控制台输出

密钥库类型: JKS
密钥库提供方: SUN
别名: androiddebugkey
...
证书指纹:
         MD5: A0:30:89:00:88:AF:B4:B5:0B:3C:E0:78:20:9D:73:77
         SHA1: F8:71:5F:22:AC:A9:9C:D7:A4:35:2F:35:A0:90:D0:6B:2D:CD:BD:B7
         SHA256: E7:B5:4F:D0:FF:81:F8:B9:FE:75:D9:E8:78:5A:05:F7:2B:72:04:EE:2D:84:39:F1:7C:FA:F7:D2:8B:A2:B0:2B
         签名算法名称: SHA1withRSA
         版本: 1

# adb 指令(Android 调试桥 )

adb指南 (opens new window)

cd D:\Android\android-sdk\platform-tools (本机adb路径)

# 一、根据协议启动应用

定义 Scheme 协议拉起应用(如. mmmdp://app)

adb shell am start -W -a "android.intent.action.VIEW" -d "mmmdp://app" com.maimaimai.dongping.dev.debug

定义 App Links 协议拉起应用(如. https://ks.fjmaimaimai.com/app)

adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "https://ks.fjmaimaimai.com/app" 

# 二、通过 WLAN 连接到设备

adb tcpip 5555    // 设置目标设备以监听端口 5555 上的 TCP/IP 连接
adb connect 192.168.100.60:5555     // (通过IP地址连接到设,同局域网)

# 三、将文件复制到设备/从设备复制文件

如需从设备中复制某个文件或目录(及其子目录),请使用以下命令:

adb pull remote local

如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令:

adb push local remote

localremote 替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如:

adb push foo.txt /sdcard/foo.txt

# 四、更多指令

  • 安装应用
  • 查询设备
  • 设置端口转发

# exported 属性

android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。 true表示允许被另一个Application的组件启动,false不允许被启动。总体来说它的主要作用是:是否支持其它应用调用当前组件;

# Manifest中的设置说明

  • 如果显式设置exported属性,不管这个activity有没有设置intent-filter,那么exported的值就是显式设置的值。
  • 如果没有设置exported属性,那么exported属性取决于这个activity是否有intent-filter
    • 如有intent-filter,那么exported的值就是true
    • 如没有intent-filter,那么exported的值就是false

# 如何合理设置exported

我们知道代码离不开用户场景,那么我把一个Activity被调用的场景分为3种:封闭式、半封闭式和开放式。

  • 封闭式

    • 没有intent-filter情况,可以不设置exported或者设置exported为false
    • 有intent-filter情况,必须设置exported为false
  • 半封闭式:被调用的Activity只能被约定好的其他App调用,比如公司下的不同产品相互组件调用

    • 除了满足封闭式设置外,还必须把调用App和被调用App设置相同的uid,即在2个App的AndroidManifest.xml组件中添加相同的android:sharedUserId
  • 开放式:可以被任何App调用

    • 这种场景主要是对外接口,如微信、微博的分享接口。大多数情况下,这样的Activity都会有intent-filter,因此也没必要显式地把exported设为true,不设是可以的,当然不能设为false
    • 但如果你没有intent-filter,那就必须显式地把exported设为true

# 应用场景(微信分享、个推等)

  1. 微信分享内容后,如果需要知道结果(成功or失败),微信App需要显式调用我们的App组件xxx.xxx.xxx.wxapi.WXEntryActivity来拦截信息(注.xxx.xxx.xxx为包名),所以微信需要在我们的xml中配置WXEntryActivity android:exported=true属性。
  2. 个推中开放Service exported="true" 的作用有两个
    • 多个App中使用个推SDK,会相互共享同一个Service,减少内存占用和耗电量
    • 多个App中使用个推SDK,App之间任何一个启动Service后,都会引发service相互唤醒,有效提高个推和透传效果
最后更新时间: 11/24/2021, 1:59:05 AM