Skip to content

Commit 8e2556c

Browse files
author
weiqiangliu
committed
Release 3.2.15
1 parent 59735dc commit 8e2556c

File tree

4 files changed

+31
-35
lines changed

4 files changed

+31
-35
lines changed

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
![logo](https://opensource.sensorsdata.cn/wp-content/uploads/logo.png)
22

3-
# sa-sdk-android-plugin2
3+
## 神策简介
4+
5+
[**神策数据**](https://www.sensorsdata.cn/)
6+
(Sensors Data),隶属于神策网络科技(北京)有限公司,是一家专业的大数据分析服务公司,大数据分析行业开拓者,为客户提供深度用户行为分析平台、以及专业的咨询服务和行业解决方案,致力于帮助客户实现数据驱动。神策数据立足大数据及用户行为分析的技术与实践前沿,业务现已覆盖以互联网、金融、零售快消、高科技、制造等为代表的十多个主要行业、并可支持企业多个职能部门。公司总部在北京,并在上海、深圳、合肥、武汉等地拥有本地化的服务团队,覆盖东区及南区市场;公司拥有专业的服务团队,为客户提供一对一的客户服务。公司在大数据领域积累的核心关键技术,包括在海量数据采集、存储、清洗、分析挖掘、可视化、智能应用、安全与隐私保护等领域。 [**More**](https://www.sensorsdata.cn/about/aboutus.html)
7+
8+
9+
## SDK 简介
10+
11+
SensorsAnalytics SDK 是国内第一家开源商用版用户行为采集 SDK,目前支持代码埋点、全埋点、App 点击图、可视化全埋点等。目前已累计有 1500 多家付费客户,2500+ 的 App 集成使用,作为 App 数据采集利器,致力于帮助客户挖掘更多的商业价值,为其精准运营和业务支撑提供了可靠的数据来源。其采集全面而灵活、性能良好,并一直保持稳定的迭代,经受住了时间和客户的考验。
412

5-
The official Android SDK Plugin for Sensors Analytics
613

714
## 快速集成
815

plugin/ext.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
project.ext {
2-
pluginVersion = '3.2.14'
2+
pluginVersion = '3.2.15'
33
Properties properties = new Properties()
44
if (project.file('local.properties').exists()) {
55
properties.load(project.file('local.properties').newDataInputStream())

plugin/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsClassVisitor.groovy

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -257,21 +257,17 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
257257
methodVisitor.visitVarInsn(ILOAD, 3)
258258
methodVisitor.visitVarInsn(ISTORE, third)
259259
localIds.add(third)
260-
} else if (nameDesc == 'setUserVisibleHint(Z)V' && pubAndNoStaticAccess) {
261-
isSetUserVisibleHint = true
262-
variableID = newLocal(Type.getObjectType("java/lang/Integer"))
263-
methodVisitor.visitVarInsn(ILOAD, 1)
264-
methodVisitor.visitVarInsn(ISTORE, variableID)
265-
} else if (nameDesc == 'onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V' && pubAndNoStaticAccess) {
260+
} else if (pubAndNoStaticAccess && SensorsAnalyticsUtil.isInstanceOfFragment(mSuperName)
261+
&& SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc) != null) {
262+
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc)
266263
localIds = new ArrayList<>()
267-
int localId = newLocal(Type.getObjectType("java/lang/Integer"))
268-
methodVisitor.visitVarInsn(ALOAD, 1)
269-
methodVisitor.visitVarInsn(ASTORE, localId)
270-
localIds.add(localId)
271-
localId = newLocal(Type.getObjectType("java/lang/Integer"))
272-
methodVisitor.visitVarInsn(ALOAD, 2)
273-
methodVisitor.visitVarInsn(ASTORE, localId)
274-
localIds.add(localId)
264+
Type[] types = Type.getArgumentTypes(desc)
265+
for (int i = 1; i < sensorsAnalyticsMethodCell.paramsCount; i++) {
266+
int localId = newLocal(types[i - 1])
267+
methodVisitor.visitVarInsn(sensorsAnalyticsMethodCell.opcodes.get(i), i)
268+
methodVisitor.visitVarInsn(SensorsAnalyticsUtil.convertOpcodes(sensorsAnalyticsMethodCell.opcodes.get(i)), localId)
269+
localIds.add(localId)
270+
}
275271
} else if (nameDesc == "onCheckedChanged(Landroid/widget/RadioGroup;I)V" && pubAndNoStaticAccess) {
276272
localIds = new ArrayList<>()
277273
int firstLocalId = newLocal(Type.getObjectType("android/widget/RadioGroup"))
@@ -308,19 +304,16 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
308304
methodVisitor.visitVarInsn(ALOAD, 1)
309305
methodVisitor.visitVarInsn(ASTORE, secondLocalId)
310306
localIds.add(secondLocalId)
311-
} else if (!transformHelper.isHookOnMethodEnter && nameDesc == "onMenuItemClick(Landroid/view/MenuItem;)Z" && pubAndNoStaticAccess) {
307+
} else if (nameDesc == "onMenuItemClick(Landroid/view/MenuItem;)Z" && pubAndNoStaticAccess) {
312308
localIds = new ArrayList<>()
313309
int firstLocalId = newLocal(Type.getObjectType("android/view/MenuItem"))
314310
methodVisitor.visitVarInsn(ALOAD, 1)
315311
methodVisitor.visitVarInsn(ASTORE, firstLocalId)
316312
localIds.add(firstLocalId)
317313
}
318-
if (transformHelper.isHookOnMethodEnter) {
319-
handleCode()
320-
}
321314

322315
// Lambda 参数优化部分,对现有参数进行复制
323-
if (!transformHelper.isHookOnMethodEnter && transformHelper.extension.lambdaEnabled) {
316+
if (transformHelper.extension.lambdaEnabled) {
324317
SensorsAnalyticsMethodCell lambdaMethodCell = mLambdaMethodCells.get(nameDesc)
325318
if (lambdaMethodCell != null) {
326319
//判断是否是在采样中,在采样中才会处理或者开关打开也统一处理
@@ -350,6 +343,10 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
350343
}
351344
}
352345
}
346+
347+
if (transformHelper.isHookOnMethodEnter) {
348+
handleCode()
349+
}
353350
}
354351

355352
@Override
@@ -384,19 +381,11 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor {
384381
SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.FRAGMENT_METHODS.get(nameDesc)
385382
if (sensorsAnalyticsMethodCell != null) {
386383
visitedFragMethods.add(nameDesc)
387-
if (isSetUserVisibleHint) {
388-
methodVisitor.visitVarInsn(ALOAD, 0)
389-
methodVisitor.visitVarInsn(ILOAD, variableID)
390-
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
391-
} else if (localIds != null) {
392-
methodVisitor.visitVarInsn(ALOAD, 0)
393-
for (localId in localIds) {
394-
methodVisitor.visitVarInsn(ALOAD, localId)
395-
}
396-
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
397-
} else {
398-
visitMethodWithLoadedParams(methodVisitor, Opcodes.INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, sensorsAnalyticsMethodCell.paramsStart, sensorsAnalyticsMethodCell.paramsCount, sensorsAnalyticsMethodCell.opcodes)
384+
methodVisitor.visitVarInsn(ALOAD, 0)
385+
for (int i = 1; i < sensorsAnalyticsMethodCell.paramsCount; i++) {
386+
methodVisitor.visitVarInsn(sensorsAnalyticsMethodCell.opcodes.get(i), localIds[i - 1])
399387
}
388+
methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false)
400389
isHasTracked = true
401390
return
402391
}

plugin/src/main/groovy/com/sensorsdata/analytics/android/plugin/SensorsAnalyticsTransform.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import java.util.jar.JarOutputStream
4545

4646
class SensorsAnalyticsTransform extends Transform {
4747
private SensorsAnalyticsTransformHelper transformHelper
48-
public static final String VERSION = "3.2.14"
48+
public static final String VERSION = "3.2.15"
4949
public static final String MIN_SDK_VERSION = "4.3.2"
5050
private WaitableExecutor waitableExecutor
5151
private URLClassLoader urlClassLoader

0 commit comments

Comments
 (0)