Skip to content

Commit

Permalink
Merge pull request Tencent#298 from Tencent/dev
Browse files Browse the repository at this point in the history
dev分支经过测试合入master
  • Loading branch information
shifujun committed Apr 5, 2020
2 parents e005e61 + f494abe commit e2936bd
Show file tree
Hide file tree
Showing 372 changed files with 13,224 additions and 5,458 deletions.
21 changes: 21 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,27 @@
# Issue
在Tencent Shadow开源的初期,我们会密切关注所有Issue反馈。晚些时候再根据反馈的情况制定Issue模板。

反馈问题时,请Fork Shadow的代码库到自己的名下。新建分支,添加可以复现问题的最小改动,提交后push到Github上。然后在Issue单中附上你的代码库地址和分支名即可。

```sh
git clone https://github.com/Tencent/Shadow.git //大概之前你已经这样clone过Shadow的代码库了
cd shadow //切换到你clone的shadow目录
git remote add your_name https://github.com/<your_name>/Shadow.git //把你fork的版本库添加成一个远端
git fetch --all //更新所有远端的代码
git checkout -b new_branch_name origin/dev // 基于Shadow代码库的dev分支新建一个分支
//加上你复现问题的修改
git commit
git push -u your_name //推送new_branch_name分支到你fork的版本库
```
然后你的分支地址应该类似:`https://github.com/<your_name>/Shadow/tree/new_branch_name`

其他人可以用这样的命令获取到你的分支,看到你的提交做了哪些改动,运行并Debug。
```sh
cd shadow //切换到shadow目录
git fetch https://github.com/<your_name>/Shadow.git new_branch_name
git checkout -b new_branch_name FETCH_HEAD
```

# Pull Request
由于PR会修改代码,因此即便是在开源初期,我们也会对PR谨慎处理。

Expand Down
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# Shadow

Shadow的设计细节将在掘金持续分享:https://juejin.im/user/5d12faee6fb9a07ed8425178/posts

## 介绍
Shadow是一个腾讯自主研发的Android插件框架,经过线上亿级用户量检验。
Shadow不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。
Expand Down
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ task clean(type: Delete) {
delete rootProject.buildDir
dependsOn gradle.includedBuild('coding').task(':checks:clean')
dependsOn gradle.includedBuild('coding').task(':lint:clean')
dependsOn gradle.includedBuild('coding').task(':code-generator:clean')
dependsOn gradle.includedBuild('core').task(':gradle-plugin:clean')
dependsOn gradle.includedBuild('core').task(':common:clean')
dependsOn gradle.includedBuild('core').task(':loader:clean')
dependsOn gradle.includedBuild('core').task(':manager:clean')
dependsOn gradle.includedBuild('core').task(':runtime:clean')
dependsOn gradle.includedBuild('core').task(':activity-container:clean')
dependsOn gradle.includedBuild('core').task(':transform:clean')
dependsOn gradle.includedBuild('core').task(':transform-kit:clean')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-host:clean')
Expand Down
2 changes: 1 addition & 1 deletion buildScripts/gradle/common.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def gitShortRev() {
}

allprojects {
ext.COMPILE_SDK_VERSION = 28
ext.COMPILE_SDK_VERSION = 29
ext.MIN_SDK_VERSION = 14
ext.TARGET_SDK_VERSION = 28
ext.VERSION_CODE = 1
Expand Down
92 changes: 89 additions & 3 deletions buildScripts/gradle/maven.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ task buildSdk() {
dependsOn gradle.includedBuild('core').task(':loader:assembleRelease')
dependsOn gradle.includedBuild('core').task(':manager:assembleRelease')
dependsOn gradle.includedBuild('core').task(':runtime:jarReleasePackage')
dependsOn gradle.includedBuild('core').task(':activity-container:jarReleasePackage')
dependsOn gradle.includedBuild('core').task(':transform-kit:assemble')
dependsOn gradle.includedBuild('core').task(':transform-kit:testJar')
dependsOn gradle.includedBuild('core').task(':transform:assemble')
Expand All @@ -13,18 +14,23 @@ task buildSdk() {
dependsOn gradle.includedBuild('dynamic').task(':dynamic-loader:jarReleasePackage')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-loader-impl:assembleRelease')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-manager:assembleRelease')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-host-multi-loader-ext:jarReleasePackage')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-manager-multi-loader-ext:assembleRelease')
}

task lintSdk() {
dependsOn gradle.includedBuild('core').task(':common:lint')
dependsOn gradle.includedBuild('core').task(':loader:lint')
dependsOn gradle.includedBuild('core').task(':manager:lint')
dependsOn gradle.includedBuild('core').task(':runtime:lint')
dependsOn gradle.includedBuild('core').task(':activity-container:lint')
dependsOn gradle.includedBuild('core').task(':load-parameters:lint')

dependsOn gradle.includedBuild('dynamic').task(':dynamic-host:lint')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-loader-impl:lint')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-manager:lint')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-host-multi-loader-ext:lint')
dependsOn gradle.includedBuild('dynamic').task(':dynamic-manager-multi-loader-ext:lint')
}

task testSdk() {
Expand Down Expand Up @@ -77,6 +83,17 @@ def setGeneratePomFileAndDepends(publicationName) {
}
}

def sourceJar(String name, String path) {
return tasks.create("source${name.capitalize()}Jar", Jar) {
group = "publishing"
description = "package ${name} source to jar"
from "$path/src/main/java"
from "$path/src/main/kotlin"
destinationDir = file("$path/build/libs/")
classifier = 'sources'
}
}

def publicationVersion = project.ARTIFACT_VERSION
def coreGroupId = 'com.tencent.shadow.core'
def corePath = 'projects/sdk/core'
Expand All @@ -90,6 +107,7 @@ publishing {
artifactId 'gradle-plugin'
version publicationVersion
artifact("$corePath/gradle-plugin/build/libs/gradle-plugin.jar")
artifact sourceJar("gradlePlugin", "$corePath/gradle-plugin")

pom.withXml {
def root = asNode()
Expand All @@ -99,6 +117,7 @@ publishing {
dependencies.append(getDependencyNode('compile', coreGroupId, 'transform-kit', publicationVersion))
dependencies.append(getDependencyNode('compile', coreGroupId, 'transform', publicationVersion))
dependencies.append(getDependencyNode('compile', coreGroupId, 'runtime', publicationVersion))
dependencies.append(getDependencyNode('compile', coreGroupId, 'activity-container', publicationVersion))

def scm = root.appendNode('scm')
setScm(scm)
Expand All @@ -109,6 +128,7 @@ publishing {
artifactId 'common'
version publicationVersion
artifact("$corePath/common/build/outputs/jar/common-release.jar")
artifact sourceJar("common", "$corePath/common")

pom.withXml {
def root = asNode()
Expand All @@ -122,6 +142,7 @@ publishing {
artifactId 'load-parameters'
version publicationVersion
artifact("$corePath/load-parameters/build/outputs/aar/load-parameters-release.aar")
artifact sourceJar("loadParameters", "$corePath/load-parameters")

pom.withXml {
def root = asNode()
Expand All @@ -135,12 +156,14 @@ publishing {
artifactId 'loader'
version publicationVersion
artifact("$corePath/loader/build/outputs/aar/loader-release.aar")
artifact sourceJar("loader", "$corePath/loader")

pom.withXml {
def root = asNode()
def dependencies = root.appendNode('dependencies')
dependencies.append(getDependencyNode('compile', 'org.jetbrains.kotlin', 'kotlin-stdlib-jdk7', kotlin_version))
dependencies.append(getDependencyNode('provided',coreGroupId, 'runtime', publicationVersion))
dependencies.append(getDependencyNode('compile', coreGroupId, 'runtime', publicationVersion))
dependencies.append(getDependencyNode('provided', coreGroupId, 'activity-container', publicationVersion))
dependencies.append(getDependencyNode('provided', coreGroupId, 'common', publicationVersion))
dependencies.append(getDependencyNode('compile', coreGroupId, 'load-parameters', publicationVersion))

Expand All @@ -153,6 +176,7 @@ publishing {
artifactId 'manager'
version publicationVersion
artifact("$corePath/manager/build/outputs/aar/manager-release.aar")
artifact sourceJar("manager", "$corePath/manager")

pom.withXml {
def root = asNode()
Expand All @@ -169,6 +193,21 @@ publishing {
artifactId 'runtime'
version publicationVersion
artifact("$corePath/runtime/build/outputs/jar/runtime-release.jar")
artifact sourceJar("runtime", "$corePath/runtime")

pom.withXml {
def root = asNode()

def scm = root.appendNode('scm')
setScm(scm)
}
}
activityContainer(MavenPublication) {
groupId coreGroupId
artifactId 'activity-container'
version publicationVersion
artifact("$corePath/activity-container/build/outputs/jar/activity-container-release.jar")
artifact sourceJar("activity-container", "$corePath/activity-container")

pom.withXml {
def root = asNode()
Expand All @@ -183,6 +222,7 @@ publishing {
artifactId 'transform-kit'
version publicationVersion
artifact("$corePath/transform-kit/build/libs/transform-kit.jar")
artifact sourceJar("transformKit", "$corePath/transform-kit")

pom.withXml {
def root = asNode()
Expand Down Expand Up @@ -217,6 +257,7 @@ publishing {
artifactId 'transform'
version publicationVersion
artifact("$corePath/transform/build/libs/transform.jar")
artifact sourceJar("transform", "$corePath/transform")

pom.withXml {
def root = asNode()
Expand All @@ -232,22 +273,41 @@ publishing {
artifactId 'host'
version publicationVersion
artifact("$dynamicPath/dynamic-host/build/outputs/jar/dynamic-host-release.jar")
artifact sourceJar("dynamicHost", "$dynamicPath/dynamic-host")

pom.withXml {
def root = asNode()
def dependencies = root.appendNode('dependencies')
dependencies.append(getDependencyNode('compile', coreGroupId, 'common', publicationVersion))

def scm = root.appendNode('scm')
setScm(scm)
}
}
dynamicHostMultiLoaderExt(MavenPublication) {
groupId dynamicGroupId
artifactId 'host-multi-loader-ext'
version publicationVersion
artifact("$dynamicPath/dynamic-host-multi-loader-ext/build/outputs/jar/dynamic-host-multi-loader-ext-release.jar")
artifact sourceJar("dynamicHostMultiLoaderExt", "$dynamicPath/dynamic-host-multi-loader-ext")

pom.withXml {
def root = asNode()
def dependencies = root.appendNode('dependencies')
dependencies.append(getDependencyNode('provided',coreGroupId, 'runtime', publicationVersion))
dependencies.append(getDependencyNode('compile', coreGroupId, 'common', publicationVersion))
dependencies.append(getDependencyNode('compile', dynamicGroupId, 'host', publicationVersion))

def scm = root.appendNode('scm')
setScm(scm)
}
}

dynamicLoader(MavenPublication) {
groupId dynamicGroupId
artifactId 'loader'
version publicationVersion
artifact("$dynamicPath/dynamic-loader/build/outputs/jar/dynamic-loader-release.jar")
artifact sourceJar("dynamicLoader", "$dynamicPath/dynamic-loader")

pom.withXml {
def root = asNode()
Expand All @@ -260,13 +320,14 @@ publishing {
artifactId 'loader-impl'
version publicationVersion
artifact("$dynamicPath/dynamic-loader-impl/build/outputs/aar/dynamic-loader-impl-release.aar")
artifact sourceJar("dynamicLoaderImpl", "$dynamicPath/dynamic-loader-impl")

pom.withXml {
def root = asNode()
def dependencies = root.appendNode('dependencies')
dependencies.append(getDependencyNode('compile', 'org.jetbrains.kotlin', 'kotlin-stdlib-jdk7', kotlin_version))
dependencies.append(getDependencyNode('compile', coreGroupId, 'loader', publicationVersion))
dependencies.append(getDependencyNode('provided',coreGroupId, 'runtime', publicationVersion))
dependencies.append(getDependencyNode('provided', coreGroupId, 'activity-container', publicationVersion))
dependencies.append(getDependencyNode('provided', coreGroupId, 'common', publicationVersion))
dependencies.append(getDependencyNode('provided', dynamicGroupId, 'host', publicationVersion))
dependencies.append(getDependencyNode('compile', dynamicGroupId, 'loader', publicationVersion))
Expand All @@ -280,6 +341,7 @@ publishing {
artifactId 'manager'
version publicationVersion
artifact("$dynamicPath/dynamic-manager/build/outputs/aar/dynamic-manager-release.aar")
artifact sourceJar("dynamicManager", "$dynamicPath/dynamic-manager")

pom.withXml {
def root = asNode()
Expand All @@ -293,6 +355,27 @@ publishing {
setScm(scm)
}
}

dynamicManagerMultiLoaderExt(MavenPublication) {
groupId dynamicGroupId
artifactId 'manager-multi-loader-ext'
version publicationVersion
artifact("$dynamicPath/dynamic-manager-multi-loader-ext/build/outputs/aar/dynamic-manager-multi-loader-ext-release.aar")
artifact sourceJar("dynamicManagerMultiLoaderExt", "$dynamicPath/dynamic-manager-multi-loader-ext")

pom.withXml {
def root = asNode()
def dependencies = root.appendNode('dependencies')
dependencies.append(getDependencyNode('compile', coreGroupId, 'manager', publicationVersion))
dependencies.append(getDependencyNode('compile', dynamicGroupId, 'loader', publicationVersion))
dependencies.append(getDependencyNode('compile', dynamicGroupId, 'manager', publicationVersion))
dependencies.append(getDependencyNode('provided', coreGroupId, 'common', publicationVersion))
dependencies.append(getDependencyNode('provided', dynamicGroupId, 'host-multi-loader-ext', publicationVersion))

def scm = root.appendNode('scm')
setScm(scm)
}
}
}
repositories {
mavenLocal()
Expand All @@ -305,10 +388,13 @@ setGeneratePomFileAndDepends('loadParameters')
setGeneratePomFileAndDepends('coreLoader')
setGeneratePomFileAndDepends('coreManager')
setGeneratePomFileAndDepends('runtime')
setGeneratePomFileAndDepends('activityContainer')
setGeneratePomFileAndDepends('transformKit')
setGeneratePomFileAndDepends('transformKitTest')
setGeneratePomFileAndDepends('transform')
setGeneratePomFileAndDepends('dynamicHost')
setGeneratePomFileAndDepends('dynamicHostMultiLoaderExt')
setGeneratePomFileAndDepends('dynamicLoader')
setGeneratePomFileAndDepends('dynamicLoaderImpl')
setGeneratePomFileAndDepends('dynamicManager')
setGeneratePomFileAndDepends('dynamicManagerMultiLoaderExt')
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
org.gradle.jvmargs=-Xmx4096m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
Expand Down
5 changes: 5 additions & 0 deletions projects/sample/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,8 @@ adb push sample-manager/build/outputs/apk/debug/sample-manager-debug.apk /data/l
最后可以用Android Studio打开`host-project`直接运行`sample-host`模块。

`plugin-project`中的`plugin-normal-apk`模块也可以直接安装运行,演示不使用Shadow时插件的运行情况。

## 演示AndroidX正常工作的Sample(`projects/sample/sunflower`)
这个Sample和`projects/sample/maven`的组织结构是一样的。

主要是将https://github.com/android/sunflower/改造成插件运行起来。
2 changes: 1 addition & 1 deletion projects/sample/maven/host-project/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.shadow_version = '2.0.12-782812a5-SNAPSHOT'
ext.shadow_version = '2.0.12-c3a2c91f-SNAPSHOT'
repositories {
google()
jcenter()
Expand Down
2 changes: 1 addition & 1 deletion projects/sample/maven/host-project/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
org.gradle.jvmargs=-Xmx4096m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apply plugin: 'com.android.library'

android {
compileSdkVersion 28
compileSdkVersion 29


defaultConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ public static PluginManager getPluginManager() {
}

public static void onApplicationCreate(Application application) {
//Log接口Manager也需要使用,所以主进程也初始化。
LoggerFactory.setILoggerFactory(new AndroidLoggerFactory());

if (isProcess(application, ":plugin")) {
//在全动态架构中,Activity组件没有打包在宿主而是位于被动态加载的runtime,
//为了防止插件crash后,系统自动恢复crash前的Activity组件,此时由于没有加载runtime而发生classNotFound异常,导致二次crash
//因此这里恢复加载上一次的runtime
DynamicRuntime.recoveryRuntime(application);
}

//Log接口Manager也需要使用,所以主进程也初始化。
LoggerFactory.setILoggerFactory(new AndroidLoggerFactory());

FixedPathPmUpdater fixedPathPmUpdater
= new FixedPathPmUpdater(new File("/data/local/tmp/sample-manager-debug.apk"));
boolean needWaitingUpdate
Expand All @@ -52,7 +52,7 @@ public static void onApplicationCreate(Application application) {
}

private static boolean isProcess(Context context, String processName) {
String currentProcName = null;
String currentProcName = "";
ActivityManager manager =
(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
Expand All @@ -61,6 +61,7 @@ private static boolean isProcess(Context context, String processName) {
break;
}
}
return processName.equals(currentProcName);

return currentProcName.endsWith(processName);
}
}
Loading

0 comments on commit e2936bd

Please sign in to comment.