@@ -68,11 +68,12 @@ def __del__(self):
68
68
self .package_name = ''
69
69
70
70
def run_plugin (self ):
71
+ ret = True
71
72
if self .package_manager_name == const .GRADLE or self .package_manager_name == const .ANDROID :
72
- self .run_gradle_task ()
73
+ ret = self .run_gradle_task ()
73
74
else :
74
75
logger .info (f"This package manager({ self .package_manager_name } ) skips the step to run plugin." )
75
- return True
76
+ return ret
76
77
77
78
def append_input_package_list_file (self , input_package_file ):
78
79
self .input_package_list_file .append (input_package_file )
@@ -87,35 +88,101 @@ def parse_direct_dependencies(self):
87
88
pass
88
89
89
90
def run_gradle_task (self ):
91
+ ret_task = True
90
92
if os .path .isfile (const .SUPPORT_PACKAE .get (self .package_manager_name )):
91
93
gradle_backup = f'{ const .SUPPORT_PACKAE .get (self .package_manager_name )} _bk'
92
94
93
95
shutil .copy (const .SUPPORT_PACKAE .get (self .package_manager_name ), gradle_backup )
94
- ret = self .add_allDeps_in_gradle ()
95
- if ret :
96
- try :
97
- if os .path .isfile ('gradlew' ) or os .path .isfile ('gradlew.bat' ):
98
- if self .platform == const .WINDOWS :
99
- cmd_gradle = "gradlew.bat"
100
- else :
101
- cmd_gradle = "./gradlew"
102
-
103
- cmd = f"{ cmd_gradle } allDeps"
96
+ ret_alldeps = self .add_allDeps_in_gradle ()
97
+
98
+ ret_plugin = False
99
+ if (self .package_manager_name == const .ANDROID ):
100
+ module_build_gradle = os .path .join (self .app_name , const .SUPPORT_PACKAE .get (self .package_manager_name ))
101
+ module_gradle_backup = f'{ module_build_gradle } _bk'
102
+ if os .path .isfile (module_build_gradle ) and (not os .path .isfile (self .input_file_name )):
103
+ shutil .copy (module_build_gradle , module_gradle_backup )
104
+ ret_plugin = self .add_android_plugin_in_gradle (module_build_gradle )
105
+
106
+ if os .path .isfile ('gradlew' ) or os .path .isfile ('gradlew.bat' ):
107
+ if self .platform == const .WINDOWS :
108
+ cmd_gradle = "gradlew.bat"
109
+ else :
110
+ cmd_gradle = "./gradlew"
111
+ else :
112
+ ret_task = False
113
+ logger .warning ('No gradlew file exists. (skip to find dependencies relationship.' )
114
+ if ret_plugin :
115
+ logger .warning ('Also it cannot run android-dependency-scanning plugin.' )
116
+ if ret_task :
117
+ if ret_alldeps :
118
+ cmd = f"{ cmd_gradle } allDeps"
119
+ try :
104
120
ret = subprocess .check_output (cmd , shell = True , encoding = 'utf-8' )
105
121
if ret != 0 :
106
122
self .parse_dependency_tree (ret )
107
123
else :
108
124
self .set_direct_dependencies (False )
109
125
logger .warning ("Failed to run allDeps task." )
110
- except Exception as e :
111
- self .set_direct_dependencies (False )
112
- logger .error (f'Fail to run allDeps: { e } ' )
113
- logger .warning ('It cannot print the direct/transitive dependencies relationship.' )
126
+ except Exception as e :
127
+ self .set_direct_dependencies (False )
128
+ logger .error (f'Fail to run { cmd } : { e } ' )
129
+ logger .warning ('It cannot print the direct/transitive dependencies relationship.' )
130
+
131
+ if ret_plugin :
132
+ cmd = f"{ cmd_gradle } generateLicenseTxt"
133
+ try :
134
+ ret = subprocess .check_output (cmd , shell = True , encoding = 'utf-8' )
135
+ if ret == 0 :
136
+ ret_task = False
137
+ logger .error (f'Fail to run { cmd } ' )
138
+ if os .path .isfile (self .input_file_name ):
139
+ logger .info ('Automatically run android-dependency-scanning plugin and generate output.' )
140
+ self .plugin_auto_run = True
141
+ else :
142
+ logger .warning ('Automatically run android-dependency-scanning plugin, but fail to generate output.' )
143
+ except Exception as e :
144
+ logger .error (f'Fail to run { cmd } : { e } ' )
145
+ ret_task = False
114
146
115
147
if os .path .isfile (gradle_backup ):
116
148
os .remove (const .SUPPORT_PACKAE .get (self .package_manager_name ))
117
149
shutil .move (gradle_backup , const .SUPPORT_PACKAE .get (self .package_manager_name ))
118
150
151
+ if (self .package_manager_name == const .ANDROID ):
152
+ if os .path .isfile (module_gradle_backup ):
153
+ os .remove (module_build_gradle )
154
+ shutil .move (module_gradle_backup , module_build_gradle )
155
+ return ret_task
156
+
157
+ def add_android_plugin_in_gradle (self , module_build_gradle ):
158
+ ret = False
159
+ build_script = '''buildscript {
160
+ repositories {
161
+ mavenCentral()
162
+ }
163
+ dependencies {
164
+ //Android dependency scanning Plugin
165
+ classpath 'org.fosslight:android-dependency-scanning:+'
166
+ }
167
+ }'''
168
+ apply = "apply plugin: 'org.fosslight'\n "
169
+ try :
170
+ with open (const .SUPPORT_PACKAE .get (self .package_manager_name ), 'r' , encoding = 'utf-8' ) as original :
171
+ data = original .read ()
172
+ with open (const .SUPPORT_PACKAE .get (self .package_manager_name ), 'w' , encoding = 'utf-8' ) as modified :
173
+ modified .write (f"{ build_script } \n { data } " )
174
+ ret = True
175
+ except Exception as e :
176
+ logging .warning (f"Cannot add the buildscript task in build.gradle: { e } " )
177
+
178
+ try :
179
+ with open (module_build_gradle , 'a' , encoding = 'utf-8' ) as modified :
180
+ modified .write (f'\n { apply } \n ' )
181
+ ret = True
182
+ except Exception as e :
183
+ logging .warning (f"Cannot add the apply plugin in { module_build_gradle } : { e } " )
184
+ return ret
185
+
119
186
def add_allDeps_in_gradle (self ):
120
187
ret = False
121
188
config = android_config if self .package_manager_name == 'android' else gradle_config
0 commit comments