OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 # On Android we build unit test bundles as shared libraries. To run | 7 # On Android we build unit test bundles as shared libraries. To run |
8 # tests, we launch a special "test runner" apk which loads the library | 8 # tests, we launch a special "test runner" apk which loads the library |
9 # then jumps into it. Since java is required for many tests | 9 # then jumps into it. Since java is required for many tests |
10 # (e.g. PathUtils.java), a "pure native" test bundle is inadequate. | 10 # (e.g. PathUtils.java), a "pure native" test bundle is inadequate. |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 dest]) | 123 dest]) |
124 if self._jars: | 124 if self._jars: |
125 destdir = os.path.join(self._output_directory, 'java/libs') | 125 destdir = os.path.join(self._output_directory, 'java/libs') |
126 if not os.path.exists(destdir): | 126 if not os.path.exists(destdir): |
127 os.makedirs(destdir) | 127 os.makedirs(destdir) |
128 for jar in self._jars: | 128 for jar in self._jars: |
129 dest = os.path.join(destdir, os.path.basename(jar)) | 129 dest = os.path.join(destdir, os.path.basename(jar)) |
130 logging.warn('%s --> %s', jar, dest) | 130 logging.warn('%s --> %s', jar, dest) |
131 shutil.copyfile(jar, dest) | 131 shutil.copyfile(jar, dest) |
132 | 132 |
133 def CreateBundle(self, sdk_build): | 133 def CreateBundle(self): |
134 """Create the apk bundle source and assemble components.""" | 134 """Create the apk bundle source and assemble components.""" |
135 if not sdk_build: | |
136 self._SOURCE_FILES.append('Android.mk') | |
137 self._REPLACEME_FILES.append('Android.mk') | |
138 self._CopyTemplateFilesAndClearDir() | 135 self._CopyTemplateFilesAndClearDir() |
139 self._ReplaceStrings() | 136 self._ReplaceStrings() |
140 self._CopyLibraryAndJars() | 137 self._CopyLibraryAndJars() |
141 | 138 |
142 def Compile(self, ant_args): | 139 def Compile(self, ant_args): |
143 """Build the generated apk with ant. | 140 """Build the generated apk with ant. |
144 | 141 |
145 Args: | 142 Args: |
146 ant_args: extra args to pass to ant | 143 ant_args: extra args to pass to ant |
147 """ | 144 """ |
148 cmd = ['ant'] | 145 cmd = ['ant'] |
149 if ant_args: | 146 if ant_args: |
150 cmd.extend(ant_args) | 147 cmd.extend(ant_args) |
151 cmd.append("-DAPP_ABI=" + self._target_abi) | 148 cmd.append("-DAPP_ABI=" + self._target_abi) |
152 cmd.extend(['-buildfile', | 149 cmd.extend(['-buildfile', |
153 os.path.join(self._output_directory, 'native_test_apk.xml')]) | 150 os.path.join(self._output_directory, 'native_test_apk.xml')]) |
154 logging.warn(cmd) | 151 logging.warn(cmd) |
155 p = subprocess.Popen(cmd, stderr=subprocess.STDOUT) | 152 p = subprocess.Popen(cmd, stderr=subprocess.STDOUT) |
156 (stdout, _) = p.communicate() | 153 (stdout, _) = p.communicate() |
157 logging.warn(stdout) | 154 logging.warn(stdout) |
158 if p.returncode != 0: | 155 if p.returncode != 0: |
159 logging.error('Ant return code %d', p.returncode) | 156 logging.error('Ant return code %d', p.returncode) |
160 sys.exit(p.returncode) | 157 sys.exit(p.returncode) |
161 | 158 |
162 def CompileAndroidMk(self): | |
163 """Build the generated apk within Android source tree using Android.mk.""" | |
164 try: | |
165 import compile_android_mk # pylint: disable=F0401 | |
166 except: | |
167 raise AssertionError('Not in Android source tree. ' | |
168 'Please use --sdk-build.') | |
169 compile_android_mk.CompileAndroidMk(self._native_library, | |
170 self._output_directory) | |
171 | |
172 | |
173 def main(argv): | 159 def main(argv): |
174 parser = optparse.OptionParser() | 160 parser = optparse.OptionParser() |
175 parser.add_option('--verbose', | 161 parser.add_option('--verbose', |
176 help='Be verbose') | 162 help='Be verbose') |
177 parser.add_option('--native_library', | 163 parser.add_option('--native_library', |
178 help='Full name of native shared library test bundle') | 164 help='Full name of native shared library test bundle') |
179 parser.add_option('--jars', | 165 parser.add_option('--jars', |
180 help='Space separated list of jars to be included') | 166 help='Space separated list of jars to be included') |
181 parser.add_option('--output', | 167 parser.add_option('--output', |
182 help='Output directory for generated files.') | 168 help='Output directory for generated files.') |
(...skipping 27 matching lines...) Expand all Loading... |
210 # Remove all quotes from the jars string | 196 # Remove all quotes from the jars string |
211 jar_list = [] | 197 jar_list = [] |
212 if options.jars: | 198 if options.jars: |
213 jar_list = options.jars.replace('"', '').split() | 199 jar_list = options.jars.replace('"', '').split() |
214 | 200 |
215 ntag = NativeTestApkGenerator(native_library=options.native_library, | 201 ntag = NativeTestApkGenerator(native_library=options.native_library, |
216 jars=jar_list, | 202 jars=jar_list, |
217 strip_binary=options.strip_binary, | 203 strip_binary=options.strip_binary, |
218 output_directory=options.output, | 204 output_directory=options.output, |
219 target_abi=options.app_abi) | 205 target_abi=options.app_abi) |
220 ntag.CreateBundle(options.sdk_build) | 206 ntag.CreateBundle() |
221 | 207 ntag.Compile(options.ant_args) |
222 if options.sdk_build: | |
223 ntag.Compile(options.ant_args) | |
224 else: | |
225 ntag.CompileAndroidMk() | |
226 | |
227 logging.warn('COMPLETE.') | 208 logging.warn('COMPLETE.') |
228 | 209 |
229 if __name__ == '__main__': | 210 if __name__ == '__main__': |
230 sys.exit(main(sys.argv)) | 211 sys.exit(main(sys.argv)) |
OLD | NEW |