Skip to content

Commit

Permalink
asset 放弃task, 改成直接调用
Browse files Browse the repository at this point in the history
  • Loading branch information
allenymt committed Sep 18, 2023
1 parent c98fa03 commit 61c78d1
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 90 deletions.
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,4 @@
.cxx
local.properties
/plugin-sentry/~/.m2/
/privacy-ui
/privacy-processor
/.build_history
.build_history/
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ package com.yl.lib.plugin.sentry.transform.booster

import com.didiglobal.booster.transform.Transformer
import com.yl.lib.plugin.sentry.transform.booster.asmtransform.PrivacyBaseTransform
import com.yl.lib.plugin.sentry.transform.booster.classtransform.hook.ClassProxyTransform
import com.yl.lib.plugin.sentry.transform.booster.classtransform.hook.FieldProxyTransform
import com.yl.lib.plugin.sentry.transform.booster.classtransform.hook.MethodHookTransform
import com.yl.lib.plugin.sentry.transform.booster.classtransform.hook.ServiceHookTransform
import com.yl.lib.plugin.sentry.transform.booster.classtransform.hook.*
import com.yl.lib.plugin.sentry.transform.booster.transformer.PrivacyBaseTransformer
import org.gradle.api.Project

Expand All @@ -21,7 +18,8 @@ class PrivacyHookTransform (project:Project) : PrivacyBaseTransform(project){
MethodHookTransform(),
FieldProxyTransform(),
ClassProxyTransform(),
ServiceHookTransform()
ServiceHookTransform(),
FlushHookDataTransform()
)
)
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.yl.lib.plugin.sentry.transform.booster.classtransform.hook

import com.didiglobal.booster.transform.TransformContext
import com.yl.lib.plugin.sentry.util.PrivacyMoveAssetsUtil
import org.objectweb.asm.tree.ClassNode

/**
* @author yulun
* @since 2023-08-29 11:22
*/
class FlushHookDataTransform : BaseHookTransform(){
override fun ignoreClass(context: TransformContext, klass: ClassNode): Boolean {
return true
}

override fun onPostTransform(context: TransformContext) {
super.onPostTransform(context)
PrivacyMoveAssetsUtil.Asset.doFlushProxyData()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@ package com.yl.lib.plugin.sentry.transform.booster.processor

import com.android.build.gradle.api.ApplicationVariant
import com.android.build.gradle.api.BaseVariant
import com.android.build.gradle.internal.pipeline.TransformTask
import com.didiglobal.booster.gradle.getTaskName
import com.didiglobal.booster.gradle.project
import com.didiglobal.booster.task.spi.VariantProcessor
import com.yl.lib.plugin.sentry.extension.PrivacyExtension
import com.yl.lib.plugin.sentry.transform.booster.task.PrivacyMoveAssetsTask
import com.yl.lib.plugin.sentry.transform.booster.PrivacyHookTransform
import com.yl.lib.plugin.sentry.util.PrivacyMoveAssetsUtil
import com.yl.lib.plugin.sentry.util.privacyPrintln

/**
Expand All @@ -20,38 +17,22 @@ class PrivacyAssetsProcessor : VariantProcessor {
// privacy插件不支持library单独引用,只支持application引用
if (variant is ApplicationVariant) {
"PrivacyAssetsProcessor ${variant.name}".privacyPrintln()
var variantName = variant.name.capitalize()
var moveTask = variant.project.tasks.create(
"Privacy${variantName}AssetsTask",
PrivacyMoveAssetsTask::class.java
)
var findTask = variant.project.tasks.findByName(
variant.getTaskName("Privacy", "AssetsTask")
)
"PrivacyAssetsProcessor findTask is $findTask".privacyPrintln()
"PrivacyAssetsProcessor $variantName MoveAssetsTask is $moveTask".privacyPrintln()
// var variantName = variant.name.capitalize()
// var moveTask = variant.project.tasks.create(
// "Privacy${variantName}AssetsTask",
// PrivacyMoveAssetsTask::class.java
// )
// var findTask = variant.project.tasks.findByName(
// variant.getTaskName("Privacy", "AssetsTask")
// )
// "PrivacyAssetsProcessor findTask is $findTask".privacyPrintln()
// "PrivacyAssetsProcessor $variantName MoveAssetsTask is $moveTask".privacyPrintln()
var privacyExtension = variant.project.extensions.findByType(
PrivacyExtension::class.java
)
moveTask.fileName = privacyExtension?.replaceFileName ?: ""
moveTask.assetsPathList.add(variant.mergeAssetsProvider.get().outputDir.get().asFile.absolutePath)
"PrivacyAssetsProcessor assetsPathList ${moveTask.assetsPathList}".privacyPrintln()

var transformTask = variant.project.tasks.withType(TransformTask::class.java)
var privacySentryTask =
transformTask.first { task ->
task.variantName.equals(
variant.name,
ignoreCase = true
) && task.transform is PrivacyHookTransform
}
variant.project.logger.info("PrivacyAssetsProcessor project MoveAssetsTask finalizedBy privacySentryTask is $privacySentryTask , MoveAssetsTask is $moveTask $variantName after fileName is ${moveTask.fileName} ")
// 在任务结束之后执行指定的 Task, 也就是mergeAssetsTask执行完后,执行moveTask,把我们代理的api列表同步到assets目录下
variant.project.logger.info("PrivacyAssetsProcessor AssetsTask is ${variant.mergeAssetsProvider.get().name}")
privacySentryTask.finalizedBy(moveTask)
moveTask.dependsOn(privacySentryTask)
// moveTask 在privacySentryTask执行
moveTask.mustRunAfter(variant.mergeAssetsProvider.get())
PrivacyMoveAssetsUtil.Asset.fileName = privacyExtension?.replaceFileName ?: ""
PrivacyMoveAssetsUtil.Asset.assetsPathList.add(variant.mergeAssetsProvider.get().outputDir.get().asFile.absolutePath)
PrivacyMoveAssetsUtil.Asset.buildDir = variant.project.buildDir
}
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ class HookedDataManger {
hookServiceList.add(serviceName)
}

fun flushToFile(fileName: String, project: Project) {
fun flushToFile(fileName: String, buildDir:File) {
if (fileName == null || replaceMethodMap.isEmpty() || hookServiceList.isEmpty()) {
return
}
var resultFile = File(project.buildDir.absolutePath + File.separator + fileName)
var resultFile = File(buildDir.absolutePath + File.separator + fileName)
if (resultFile?.parentFile != null && !resultFile.parentFile.exists()) {
GFileUtils.mkdirs(resultFile)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.yl.lib.plugin.sentry.util

import com.yl.lib.plugin.sentry.transform.manager.HookedDataManger
import org.gradle.util.GFileUtils
import java.io.File

/**
* @author yulun
* @since 2022-06-29 16:06
* 把扫描生成的静态文件 写到apk assets目录下
* todo demo里task可以执行,但是在项目里,task注入不进去,待排查
*/
open class PrivacyMoveAssetsUtil{

object Asset{

var fileName: String? = null

var assetsPathList: ArrayList<String> = ArrayList()

var buildDir:File?=null

fun doFlushProxyData() {
PrivacyPluginUtil.privacyPluginUtil.i("MoveAssetsTask-flushToFile")
// 写入被代理所有的类和文件
fileName?.let {
HookedDataManger.MANAGER.flushToFile(it, buildDir!!)
}

var originFile = File(buildDir?.absolutePath + File.separator + fileName)
if (!originFile.exists()) {
PrivacyPluginUtil.privacyPluginUtil.i("MoveAssetsTask originFile don't exist,path is ${buildDir?.absolutePath + File.separator + fileName}")
return
}
assetsPathList.forEach { assetsPath ->
var assetsFile = File(assetsPath+ File.separator+ fileName)
PrivacyPluginUtil.privacyPluginUtil.i("MoveAssetsTask assetsPath is ${assetsPath}")
assetsFile.let {
GFileUtils.deleteFileQuietly(assetsFile)
}
PrivacyPluginUtil.privacyPluginUtil.i("MoveAssetsTask originFile is ${originFile.absolutePath} assetsPath is $assetsPath")
GFileUtils.copyFile(originFile, assetsFile)
}

}
}




}

0 comments on commit 61c78d1

Please sign in to comment.