# 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 签名算法
签名算法 MD5
、SHA1
、SHA256
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 调试桥 )
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
将 local
和 remote
替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如:
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
# 应用场景(微信分享、个推等)
- 微信分享内容后,如果需要知道结果(成功or失败),微信App需要显式调用我们的App组件xxx.xxx.xxx.wxapi.WXEntryActivity来拦截信息(注.xxx.xxx.xxx为包名),所以微信需要在我们的xml中配置WXEntryActivity android:exported=true属性。
- 个推中开放Service
exported="true"
的作用有两个- 多个App中使用个推SDK,会相互共享同一个Service,减少内存占用和耗电量
- 多个App中使用个推SDK,App之间任何一个启动Service后,都会引发service相互唤醒,有效提高个推和透传效果
← 应用上架流程