Ejemplo n.º 1
0
    def build_modules_info(self, resources_dir, app_bin_dir):
        self.app_modules = []
        (modules, external_child_modules) = bindings.get_all_module_bindings()

        compiler = Compiler(self.tiapp, resources_dir, self.java, app_bin_dir, os.path.dirname(app_bin_dir))
        compiler.compile(compile_bytecode=False, info_message=None)
        for module in compiler.modules:
            module_bindings = []
            # TODO: we should also detect module properties
            for method in compiler.module_methods:
                if method.lower().startswith(module + ".") and "." not in method:
                    module_bindings.append(method[len(module) + 1 :])

            module_class = None
            module_apiName = None
            for m in modules.keys():
                if modules[m]["fullAPIName"].lower() == module:
                    module_class = m
                    module_apiName = modules[m]["fullAPIName"]
                    break

            if module_apiName == None:
                continue  # module wasn't found
            if "." not in module:
                ext_modules = []
                if module_class in external_child_modules:
                    for child_module in external_child_modules[module_class]:
                        if child_module["fullAPIName"].lower() in compiler.modules:
                            ext_modules.append(child_module)
                self.app_modules.append(
                    {
                        "api_name": module_apiName,
                        "class_name": module_class,
                        "bindings": module_bindings,
                        "external_child_modules": ext_modules,
                    }
                )

                # discover app modules
        detector = ModuleDetector(self.project_dir)
        missing, detected_modules = detector.find_app_modules(self.tiapp, "android")
        for missing_module in missing:
            print "[WARN] Couldn't find app module: %s" % missing_module["id"]

        self.custom_modules = []
        for module in detected_modules:
            if module.jar == None:
                continue
            module_jar = zipfile.ZipFile(module.jar)
            module_bindings = bindings.get_module_bindings(module_jar)
            if module_bindings is None:
                continue

            for module_class in module_bindings["modules"].keys():
                module_id = module_bindings["proxies"][module_class]["proxyAttrs"]["id"]
                print "[DEBUG] module_id = %s" % module_id
                if module_id == module.manifest.moduleid:
                    print "[DEBUG] appending module: %s" % module_class
                    self.custom_modules.append({"class_name": module_class, "manifest": module.manifest})
Ejemplo n.º 2
0
	def build_modules_info(self, resources_dir, app_bin_dir, include_all_ti_modules=False):
		self.app_modules = []
		(modules, external_child_modules) = bindings.get_all_module_bindings()
		
		compiler = Compiler(self.tiapp, resources_dir, self.java, app_bin_dir, os.path.dirname(app_bin_dir),
				include_all_modules=include_all_ti_modules)
		compiler.compile(compile_bytecode=False, info_message=None)
		for module in compiler.modules:
			module_bindings = []
			# TODO: we should also detect module properties
			for method in compiler.module_methods:
				if method.lower().startswith(module+'.') and '.' not in method:
					module_bindings.append(method[len(module)+1:])
			
			module_class = None
			module_apiName = None
			for m in modules.keys():
				if modules[m]['fullAPIName'].lower() == module:
					module_class = m
					module_apiName = modules[m]['fullAPIName']
					break
			
			if module_apiName == None: continue # module wasn't found
			if '.' not in module:
				ext_modules = []
				if module_class in external_child_modules:
					for child_module in external_child_modules[module_class]:
						if child_module['fullAPIName'].lower() in compiler.modules:
							ext_modules.append(child_module)
				self.app_modules.append({
					'api_name': module_apiName,
					'class_name': module_class,
					'bindings': module_bindings,
					'external_child_modules': ext_modules
				})
		
		# discover app modules
		detector = ModuleDetector(self.project_dir)
		missing, detected_modules = detector.find_app_modules(self.tiapp, 'android')
		for missing_module in missing: print '[WARN] Couldn\'t find app module: %s' % missing_module['id']
		
		self.custom_modules = []
		for module in detected_modules:
			if module.jar == None: continue
			module_jar = zipfile.ZipFile(module.jar)
			module_bindings = bindings.get_module_bindings(module_jar)
			if module_bindings is None: continue
			
			for module_class in module_bindings['modules'].keys():
				module_id = module_bindings['proxies'][module_class]['proxyAttrs']['id']
				print '[DEBUG] module_id = %s' % module_id
				if module_id == module.manifest.moduleid:
					print '[DEBUG] appending module: %s' % module_class
					self.custom_modules.append({
						'class_name': module_class,
						'manifest': module.manifest
					})
Ejemplo n.º 3
0
	def build_modules_info(self, resources_dir, app_bin_dir):
		self.app_modules = []
		(modules, external_child_modules) = bindings.get_all_module_bindings()
		
		compiler = Compiler(self.tiapp, resources_dir, self.java, app_bin_dir, os.path.dirname(app_bin_dir))
		compiler.compile(compile_bytecode=False, info_message=None)
		for module in compiler.modules:
			module_bindings = []
			# TODO: we should also detect module properties
			for method in compiler.module_methods:
				if method.lower().startswith(module+'.') and '.' not in method:
					module_bindings.append(method[len(module)+1:])
			
			module_class = None
			module_apiName = None
			for m in modules.keys():
				if modules[m]['fullAPIName'].lower() == module:
					module_class = m
					module_apiName = modules[m]['fullAPIName']
					break
			
			if module_apiName == None: continue # module wasn't found
			if '.' not in module:
				ext_modules = []
				if module_class in external_child_modules:
					for child_module in external_child_modules[module_class]:
						if child_module['fullAPIName'].lower() in compiler.modules:
							ext_modules.append(child_module)
				self.app_modules.append({
					'api_name': module_apiName,
					'class_name': module_class,
					'bindings': module_bindings,
					'external_child_modules': ext_modules
				})
		
		# discover app modules
		detector = ModuleDetector(self.project_dir)
		missing, detected_modules = detector.find_app_modules(self.tiapp, 'android')
		for missing_module in missing: print '[WARN] Couldn\'t find app module: %s' % missing_module['id']
		
		self.custom_modules = []
		for module in detected_modules:
			if module.jar == None: continue
			module_jar = zipfile.ZipFile(module.jar)
			module_bindings = bindings.get_module_bindings(module_jar)
			if module_bindings is None: continue
			
			for module_class in module_bindings['modules'].keys():
				module_id = module_bindings['proxies'][module_class]['proxyAttrs']['id']
				print '[DEBUG] module_id = %s' % module_id
				if module_id == module.manifest.moduleid:
					print '[DEBUG] appending module: %s' % module_class
					self.custom_modules.append({
						'class_name': module_class,
						'manifest': module.manifest
					})
Ejemplo n.º 4
0
	def initAndroidBindings(self, distAndroidDir=None):
		log.info("Initializing Android bindings")
		self.androidBindings = []

		if distAndroidDir == None:
			distAndroidDir = os.path.join(mobileDir, "dist", "android")

		if not os.path.exists(distAndroidDir):
			log.warn("Skipping Android bindings, %s not found" % distAndroidDir)
			self.data.disableCategory(self.data.CATEGORY_BINDING, self.data.PLATFORM_ANDROID)
			return

		for jar in os.listdir(distAndroidDir):
			if not jar.endswith('.jar'): continue
			jarPath = os.path.join(distAndroidDir, jar)
			moduleBindings = bindings.get_module_bindings(zipfile.ZipFile(jarPath))
			if moduleBindings != None:
				self.androidBindings.append(moduleBindings)
Ejemplo n.º 5
0
	def initAndroidBindings(self, distAndroidDir=None):
		log.info("Initializing Android bindings")
		self.androidBindings = []

		if distAndroidDir == None:
			distAndroidDir = os.path.join(mobileDir, "dist", "android")

		if not os.path.exists(distAndroidDir):
			log.warn("Skipping Android bindings, %s not found" % distAndroidDir)
			self.data.disableCategory(self.data.CATEGORY_BINDING, self.data.PLATFORM_ANDROID)
			return

		for jar in os.listdir(distAndroidDir):
			if not jar.endswith('.jar'): continue
			jarPath = os.path.join(distAndroidDir, jar)
			moduleBindings = bindings.get_module_bindings(zipfile.ZipFile(jarPath))
			if moduleBindings != None:
				self.androidBindings.append(moduleBindings)
Ejemplo n.º 6
0
    def build_modules_info(self,
                           resources_dir,
                           app_bin_dir,
                           include_all_ti_modules=False):
        self.app_modules = []
        (modules, external_child_modules) = bindings.get_all_module_bindings()

        compiler = Compiler(self.tiapp,
                            resources_dir,
                            self.java,
                            app_bin_dir,
                            None,
                            os.path.dirname(app_bin_dir),
                            include_all_modules=include_all_ti_modules)
        compiler.compile(compile_bytecode=False, info_message=None)
        for module in compiler.modules:
            module_bindings = []
            # TODO: we should also detect module properties
            for method in compiler.module_methods:
                if method.lower().startswith(module +
                                             '.') and '.' not in method:
                    module_bindings.append(method[len(module) + 1:])

            module_onAppCreate = None
            module_class = None
            module_apiName = None
            for m in modules.keys():
                if modules[m]['fullAPIName'].lower() == module:
                    module_class = m
                    module_apiName = modules[m]['fullAPIName']
                    if 'onAppCreate' in modules[m]:
                        module_onAppCreate = modules[m]['onAppCreate']
                    break

            if module_apiName == None: continue  # module wasn't found
            ext_modules = []
            if module_class in external_child_modules:
                for child_module in external_child_modules[module_class]:
                    if child_module['fullAPIName'].lower() in compiler.modules:
                        ext_modules.append(child_module)
            self.app_modules.append({
                'api_name': module_apiName,
                'class_name': module_class,
                'bindings': module_bindings,
                'external_child_modules': ext_modules,
                'on_app_create': module_onAppCreate
            })

        # discover app modules
        detector = ModuleDetector(self.project_dir)
        missing, detected_modules = detector.find_app_modules(
            self.tiapp, 'android', self.deploy_type)
        for missing_module in missing:
            print '[WARN] Couldn\'t find app module: %s' % missing_module['id']

        self.custom_modules = []
        for module in detected_modules:
            if module.jar == None: continue
            module_jar = zipfile.ZipFile(module.jar)
            module_bindings = bindings.get_module_bindings(module_jar)
            if module_bindings is None: continue

            for module_class in module_bindings['modules'].keys():
                module_apiName = module_bindings['modules'][module_class][
                    'apiName']
                module_proxy = module_bindings['proxies'][module_class]
                module_id = module_proxy['proxyAttrs']['id']
                module_proxy_class_name = module_proxy['proxyClassName']
                module_onAppCreate = None
                if 'onAppCreate' in module_proxy:
                    module_onAppCreate = module_proxy['onAppCreate']

                print '[DEBUG] module_id = %s' % module_id
                if module_id == module.manifest.moduleid:
                    # make sure that the module was not built before 1.8.0.1
                    try:
                        module_api_version = int(module.manifest.apiversion)
                        if module_api_version < 2:
                            print "[ERROR] The 'apiversion' for '%s' in the module manifest is less than version 2.  The module was likely built against a Titanium SDK pre 1.8.0.1.  Please use a version of the module that has 'apiversion' 2 or greater" % module_id
                            touch_tiapp_xml(
                                os.path.join(self.project_dir, 'tiapp.xml'))
                            sys.exit(1)

                    except (TypeError, ValueError):
                        print "[ERROR] The 'apiversion' for '%s' in the module manifest is not a valid value.  Please use a version of the module that has an 'apiversion' value of 2 or greater set in it's manifest file" % module_id
                        touch_tiapp_xml(
                            os.path.join(self.project_dir, 'tiapp.xml'))
                        sys.exit(1)

                    is_native_js_module = (hasattr(module.manifest, 'commonjs')
                                           and module.manifest.commonjs)
                    print '[DEBUG] appending module: %s' % module_class
                    self.custom_modules.append({
                        'module_id':
                        module_id,
                        'module_apiName':
                        module_apiName,
                        'proxy_name':
                        module_proxy_class_name,
                        'class_name':
                        module_class,
                        'manifest':
                        module.manifest,
                        'on_app_create':
                        module_onAppCreate,
                        'is_native_js_module':
                        is_native_js_module
                    })
                    if is_native_js_module:
                        # Need to look at the app modules used in this external js module
                        metadata_file = os.path.join(module.path,
                                                     "metadata.json")
                        metadata = None
                        try:
                            f = open(metadata_file, "r")
                            metadata = f.read()
                        finally:
                            f.close()

                        if metadata:
                            metadata = simplejson.loads(metadata)
                            if metadata.has_key("exports"):
                                exported_module_ids = metadata["exports"]
                                already_included_module_ids = [
                                    m["api_name"].lower()
                                    for m in self.app_modules
                                ]
                                need_to_add = [
                                    m for m in exported_module_ids
                                    if m not in already_included_module_ids
                                ]
                                if need_to_add:
                                    for to_add in need_to_add:
                                        module_onAppCreate = None
                                        module_class = None
                                        module_apiName = None
                                        for m in modules.keys():
                                            if modules[m]['fullAPIName'].lower(
                                            ) == to_add:
                                                module_class = m
                                                module_apiName = modules[m][
                                                    'fullAPIName']
                                                if 'onAppCreate' in modules[m]:
                                                    module_onAppCreate = modules[
                                                        m]['onAppCreate']
                                                break

                                        if module_apiName == None:
                                            continue  # module wasn't found
                                        ext_modules = []
                                        if module_class in external_child_modules:
                                            for child_module in external_child_modules[
                                                    module_class]:
                                                if child_module[
                                                        'fullAPIName'].lower(
                                                        ) in compiler.modules:
                                                    ext_modules.append(
                                                        child_module)
                                        self.app_modules.append({
                                            'api_name':
                                            module_apiName,
                                            'class_name':
                                            module_class,
                                            'bindings': [],
                                            'external_child_modules':
                                            ext_modules,
                                            'on_app_create':
                                            module_onAppCreate
                                        })
Ejemplo n.º 7
0
	def build_modules_info(self, resources_dir, app_bin_dir, include_all_ti_modules=False):
		self.app_modules = []
		(modules, external_child_modules) = bindings.get_all_module_bindings()

		compiler = Compiler(self.tiapp, resources_dir, self.java, app_bin_dir,
				None, os.path.dirname(app_bin_dir),
				include_all_modules=include_all_ti_modules)
		compiler.compile(compile_bytecode=False, info_message=None)
		for module in compiler.modules:
			module_bindings = []
			# TODO: we should also detect module properties
			for method in compiler.module_methods:
				if method.lower().startswith(module+'.') and '.' not in method:
					module_bindings.append(method[len(module)+1:])

			module_onAppCreate = None
			module_class = None
			module_apiName = None
			for m in modules.keys():
				if modules[m]['fullAPIName'].lower() == module:
					module_class = m
					module_apiName = modules[m]['fullAPIName']
					if 'onAppCreate' in modules[m]:
						module_onAppCreate = modules[m]['onAppCreate']
					break

			if module_apiName == None: continue # module wasn't found
			ext_modules = []
			if module_class in external_child_modules:
				for child_module in external_child_modules[module_class]:
					if child_module['fullAPIName'].lower() in compiler.modules:
						ext_modules.append(child_module)
			self.app_modules.append({
				'api_name': module_apiName,
				'class_name': module_class,
				'bindings': module_bindings,
				'external_child_modules': ext_modules,
				'on_app_create': module_onAppCreate
			})

		# discover app modules
		detector = ModuleDetector(self.project_dir)
		missing, detected_modules = detector.find_app_modules(self.tiapp, 'android', self.deploy_type)
		for missing_module in missing: print '[WARN] Couldn\'t find app module: %s' % missing_module['id']

		self.custom_modules = []
		for module in detected_modules:
			if module.jar == None: continue
			module_jar = zipfile.ZipFile(module.jar)
			module_bindings = bindings.get_module_bindings(module_jar)
			if module_bindings is None: continue

			for module_class in module_bindings['modules'].keys():
				module_apiName = module_bindings['modules'][module_class]['apiName']
				module_proxy = module_bindings['proxies'][module_class]
				module_id = module_proxy['proxyAttrs']['id']
				module_proxy_class_name = module_proxy['proxyClassName']
				module_onAppCreate = None
				if 'onAppCreate' in module_proxy:
					module_onAppCreate = module_proxy['onAppCreate']

				print '[DEBUG] module_id = %s' % module_id
				if module_id == module.manifest.moduleid:
					# make sure that the module was not built before 1.8.0.1
					try:
						module_api_version = int(module.manifest.apiversion)
						if module_api_version < 2:
							print "[ERROR] The 'apiversion' for '%s' in the module manifest is less than version 2.  The module was likely built against a Titanium SDK pre 1.8.0.1.  Please use a version of the module that has 'apiversion' 2 or greater" % module_id
							touch_tiapp_xml(os.path.join(self.project_dir, 'tiapp.xml'))
							sys.exit(1)

					except(TypeError, ValueError):
						print "[ERROR] The 'apiversion' for '%s' in the module manifest is not a valid value.  Please use a version of the module that has an 'apiversion' value of 2 or greater set in it's manifest file" % module_id
						touch_tiapp_xml(os.path.join(self.project_dir, 'tiapp.xml'))
						sys.exit(1)


					is_native_js_module = (hasattr(module.manifest, 'commonjs') and module.manifest.commonjs)
					print '[DEBUG] appending module: %s' % module_class
					self.custom_modules.append({
						'module_id': module_id,
						'module_apiName': module_apiName,
						'proxy_name': module_proxy_class_name,
						'class_name': module_class,
						'manifest': module.manifest,
						'on_app_create': module_onAppCreate,
						'is_native_js_module': is_native_js_module
					})
					if is_native_js_module:
						# Need to look at the app modules used in this external js module
						metadata_file = os.path.join(module.path, "metadata.json")
						metadata = None
						try:
							f = open(metadata_file, "r")
							metadata = f.read()
						finally:
							f.close()

						if metadata:
							metadata = simplejson.loads(metadata)
							if metadata.has_key("exports"):
								exported_module_ids = metadata["exports"]
								already_included_module_ids = [m["api_name"].lower() for m in self.app_modules]
								need_to_add = [m for m in exported_module_ids if m not in already_included_module_ids]
								if need_to_add:
									for to_add in need_to_add:
										module_onAppCreate = None
										module_class = None
										module_apiName = None
										for m in modules.keys():
											if modules[m]['fullAPIName'].lower() == to_add:
												module_class = m
												module_apiName = modules[m]['fullAPIName']
												if 'onAppCreate' in modules[m]:
													module_onAppCreate = modules[m]['onAppCreate']
												break

										if module_apiName == None: continue # module wasn't found
										ext_modules = []
										if module_class in external_child_modules:
											for child_module in external_child_modules[module_class]:
												if child_module['fullAPIName'].lower() in compiler.modules:
													ext_modules.append(child_module)
										self.app_modules.append({
											'api_name': module_apiName,
											'class_name': module_class,
											'bindings': [],
											'external_child_modules': ext_modules,
											'on_app_create': module_onAppCreate
										})
	def build_modules_info(self, resources_dir, app_bin_dir, include_all_ti_modules=False):
		self.app_modules = []
		(modules, external_child_modules) = bindings.get_all_module_bindings()
		
		compiler = Compiler(self.tiapp, resources_dir, self.java, app_bin_dir,
				None, os.path.dirname(app_bin_dir),
				include_all_modules=include_all_ti_modules,
				ti_sdk_dir=self.ti_sdk_dir)
		compiler.compile(compile_bytecode=False, info_message=None)
		for module in compiler.modules:
			module_bindings = []
			# TODO: we should also detect module properties
			for method in compiler.module_methods:
				if method.lower().startswith(module+'.') and '.' not in method:
					module_bindings.append(method[len(module)+1:])

			module_onAppCreate = None
			module_class = None
			module_apiName = None
			for m in modules.keys():
				if modules[m]['fullAPIName'].lower() == module:
					module_class = m
					module_apiName = modules[m]['fullAPIName']
					if 'onAppCreate' in modules[m]:
						module_onAppCreate = modules[m]['onAppCreate']
					break
			
			if module_apiName == None: continue # module wasn't found
			ext_modules = []
			if module_class in external_child_modules:
				for child_module in external_child_modules[module_class]:
					if child_module['fullAPIName'].lower() in compiler.modules:
						ext_modules.append(child_module)
			self.app_modules.append({
				'api_name': module_apiName,
				'class_name': module_class,
				'bindings': module_bindings,
				'external_child_modules': ext_modules,
				'on_app_create': module_onAppCreate
			})
		
		# discover app modules
		detector = ModuleDetector(self.project_dir, self.ti_sdk_dir)
		missing, detected_modules = detector.find_app_modules(self.tiapp, 'android')
		for missing_module in missing: print '[WARN] Couldn\'t find app module: %s' % missing_module['id']
		
		self.custom_modules = []
		for module in detected_modules:
			if module.jar == None: continue
			module_jar = zipfile.ZipFile(module.jar)
			module_bindings = bindings.get_module_bindings(module_jar)
			if module_bindings is None: continue
			
			for module_class in module_bindings['modules'].keys():
				module_apiName = module_bindings['modules'][module_class]['apiName']
				module_proxy = module_bindings['proxies'][module_class]
				module_id = module_proxy['proxyAttrs']['id']
				module_proxy_class_name = module_proxy['proxyClassName']
				module_onAppCreate = None
				if 'onAppCreate' in module_proxy:
					module_onAppCreate = module_proxy['onAppCreate']

				print '[DEBUG] module_id = %s' % module_id
				if module_id == module.manifest.moduleid:
					# make sure that the module was not built before 1.8.0.1
					try:
						module_api_version = int(module.manifest.apiversion)
						if module_api_version < 2:
							print "[ERROR] The 'apiversion' for '%s' in the module manifest is less than version 2.  The module was likely built against a Titanium SDK pre 1.8.0.1.  Please use a version of the module that has 'apiversion' 2 or greater" % module_id
							touch_tiapp_xml(os.path.join(self.project_dir, 'tiapp.xml'))
							sys.exit(1)

					except(TypeError, ValueError):
						print "[ERROR] The 'apiversion' for '%s' in the module manifest is not a valid value.  Please use a version of the module that has an 'apiversion' value of 2 or greater set in it's manifest file" % module_id
						touch_tiapp_xml(os.path.join(self.project_dir, 'tiapp.xml'))
						sys.exit(1)
 

					print '[DEBUG] appending module: %s' % module_class
					self.custom_modules.append({
						'module_id': module_id,
						'module_apiName': module_apiName,
						'proxy_name': module_proxy_class_name,
						'class_name': module_class,
						'manifest': module.manifest,
						'on_app_create': module_onAppCreate
					})