[DEV] android dev is now ok

This commit is contained in:
Edouard DUPIN 2015-06-20 22:34:01 +02:00
parent a4ddf8e81b
commit 07058eda14
17 changed files with 141 additions and 89 deletions

View File

@ -84,6 +84,14 @@ def print_pretty(myString, force=False):
"cf", "cf",
"-C" "-C"
] ]
elif end_with(cmdApplication, ["aapt"]) == True:
baseElementList = [
"-M",
"-F",
"-I",
"-S",
"-J"
]
for element in baseElementList: for element in baseElementList:
tmpcmdLine = tmpcmdLine.replace(element+'\n\t', element+' ') tmpcmdLine = tmpcmdLine.replace(element+'\n\t', element+' ')
for element in ["<", "<<", ">", ">>"]: for element in ["<", "<<", ">", ">>"]:

View File

@ -88,7 +88,6 @@ class Module:
"VERSION_CODE" : "", "VERSION_CODE" : "",
"NAME" : set("no-name"), # name of the application "NAME" : set("no-name"), # name of the application
"ANDROID_MANIFEST" : "", # By default generate the manifest "ANDROID_MANIFEST" : "", # By default generate the manifest
"ANDROID_JAVA_FILES" : ["DEFAULT"], # when user want to create his own services and activities
"ANDROID_RESOURCES" : [], "ANDROID_RESOURCES" : [],
"ANDROID_APPL_TYPE" : "APPL", # the other mode is "WALLPAPER" ... and later "WIDGET" "ANDROID_APPL_TYPE" : "APPL", # the other mode is "WALLPAPER" ... and later "WIDGET"
"ANDROID_WALLPAPER_PROPERTIES" : [], # To create properties of the wallpaper (no use of EWOL display) "ANDROID_WALLPAPER_PROPERTIES" : [], # To create properties of the wallpaper (no use of EWOL display)
@ -194,7 +193,7 @@ class Module:
self.sub_heritage_list = heritage.HeritageList() self.sub_heritage_list = heritage.HeritageList()
# optionnal dependency : # optionnal dependency :
for dep, option, export in self.depends_optionnal: for dep, option, export in self.depends_optionnal:
inherit_list, isBuilt = target.build_optionnal(dep, package_name) inherit_list, isBuilt = target.build(dep, package_name, True)
if isBuilt == True: if isBuilt == True:
self.local_heritage.add_depends(dep); self.local_heritage.add_depends(dep);
# TODO : Add optionnal Flags ... # TODO : Add optionnal Flags ...
@ -206,7 +205,8 @@ class Module:
# add at the heritage list : # add at the heritage list :
self.sub_heritage_list.add_heritage_list(inherit_list) self.sub_heritage_list.add_heritage_list(inherit_list)
for dep in self.depends: for dep in self.depends:
inherit_list = target.build(dep, package_name) debug.debug("module: '" + str(self.name) + "' request: '" + dep + "'")
inherit_list = target.build(dep, package_name, False)
# add at the heritage list : # add at the heritage list :
self.sub_heritage_list.add_heritage_list(inherit_list) self.sub_heritage_list.add_heritage_list(inherit_list)
# do sub library action for automatic generating ... # do sub library action for automatic generating ...
@ -215,7 +215,7 @@ class Module:
elem = action(target, self, package_name); elem = action(target, self, package_name);
if self.type != 'PREBUILD':
# build local sources in a specific order : # build local sources in a specific order :
for extention_local in self.extention_order_build: for extention_local in self.extention_order_build:
list_file = tools.filter_extention(self.src, [extention_local]) list_file = tools.filter_extention(self.src, [extention_local])
@ -269,6 +269,7 @@ class Module:
# generate end point: # generate end point:
if self.type=='PREBUILD': if self.type=='PREBUILD':
debug.print_element("Prebuild", self.name, "==>", "find") debug.print_element("Prebuild", self.name, "==>", "find")
self.local_heritage.add_sources(self.src)
elif self.type=='LIBRARY': elif self.type=='LIBRARY':
try: try:
tmp_builder = builder.get_builder_with_output("a"); tmp_builder = builder.get_builder_with_output("a");
@ -323,6 +324,7 @@ class Module:
self.sub_heritage_list, self.sub_heritage_list,
name = "lib" + self.name, name = "lib" + self.name,
basic_folder = self.origin_folder) basic_folder = self.origin_folder)
self.local_heritage.add_sources(resFile)
except ValueError: except ValueError:
debug.error(" UN-SUPPORTED link format: '.so'") debug.error(" UN-SUPPORTED link format: '.so'")
try: try:
@ -355,6 +357,10 @@ class Module:
target.copy_to_staging(self.name) target.copy_to_staging(self.name)
if target.endGeneratePackage==True: if target.endGeneratePackage==True:
# generate the package with his properties ... # generate the package with his properties ...
if target.name=="Android":
self.sub_heritage_list.add_heritage(self.local_heritage)
target.make_package(self.name, self.package_prop, self.origin_folder + "/..", self.sub_heritage_list)
else:
target.make_package(self.name, self.package_prop, self.origin_folder + "/..") target.make_package(self.name, self.package_prop, self.origin_folder + "/..")
else: else:
debug.error("Dit not know the element type ... (impossible case) type=" + self.type) debug.error("Dit not know the element type ... (impossible case) type=" + self.type)

View File

@ -30,6 +30,7 @@ class System:
self.export_flags_ld_shared=[] self.export_flags_ld_shared=[]
self.export_libs_ld=[] self.export_libs_ld=[]
self.export_libs_ld_shared=[] self.export_libs_ld_shared=[]
self.export_src=[]
def append_and_check(self, listout, newElement, order): def append_and_check(self, listout, newElement, order):
for element in listout: for element in listout:
@ -62,6 +63,9 @@ class System:
def add_export_flag_MM(self, list): def add_export_flag_MM(self, list):
self.append_to_internalList(self.export_flags_mm, list) self.append_to_internalList(self.export_flags_mm, list)
def add_export_SRC(self, list):
self.append_to_internalList(self.export_src, list)
@ -74,6 +78,7 @@ def createModuleFromSystem(target, dict):
myModule.add_export_flag('c++', dict["system"].export_flags_xx) myModule.add_export_flag('c++', dict["system"].export_flags_xx)
myModule.add_export_flag('m', dict["system"].export_flags_m) myModule.add_export_flag('m', dict["system"].export_flags_m)
myModule.add_export_flag('mm', dict["system"].export_flags_mm) myModule.add_export_flag('mm', dict["system"].export_flags_mm)
myModule.add_src_file(dict["system"].export_src)
# add the currrent module at the # add the currrent module at the
return myModule return myModule
@ -114,6 +119,7 @@ def import_path(path):
"loaded":False, "loaded":False,
"exist":False, "exist":False,
"module":None}] "module":None}]
debug.debug("list system=" + str(systemList))
def display(): def display():
global systemList global systemList
@ -123,8 +129,9 @@ def display():
debug.info(" '" + data["name"] +"' in " + data["path"]) debug.info(" '" + data["name"] +"' in " + data["path"])
def exist(lib_name, target_name) : def exist(lib_name, target_name, target) :
global systemList global systemList
debug.verbose("exist= " + lib_name + " in " + target_name)
if target_name not in systemList: if target_name not in systemList:
return False return False
for data in systemList[target_name]: for data in systemList[target_name]:
@ -137,7 +144,8 @@ def exist(lib_name, target_name) :
theSystem = __import__(__startSystemName + target_name + "_" + data["name"]) theSystem = __import__(__startSystemName + target_name + "_" + data["name"])
#create the system module #create the system module
try: try:
data["system"] = theSystem.System() debug.info("call : " + data["name"])
data["system"] = theSystem.System(target)
data["exist"] = data["system"].valid data["exist"] = data["system"].valid
except: except:
debug.debug("Not find: '" + data["name"] + "'") debug.debug("Not find: '" + data["name"] + "'")

View File

@ -345,13 +345,9 @@ class Target:
for elem in self.moduleList: for elem in self.moduleList:
if elem.name == name: if elem.name == name:
return True return True
if optionnal == False:
module.load_module(self, name)
return True
else:
# TODO : Check internal module and system module ... # TODO : Check internal module and system module ...
# need to import the module (or the system module ...) # need to import the module (or the system module ...)
exist = system.exist(name, self.name) exist = system.exist(name, self.name, self)
if exist == True: if exist == True:
system.load(self, name, self.name) system.load(self, name, self.name)
return True; return True;
@ -374,19 +370,7 @@ class Target:
mod.ext_project_add_module(self, projectMng, addedModule) mod.ext_project_add_module(self, projectMng, addedModule)
return return
def build_optionnal(self, moduleName, packagesName=None): def build(self, name, packagesName=None, optionnal=False):
present = self.load_if_needed(moduleName, optionnal=True)
if present == False:
return [heritage.HeritageList(), False]
# clean requested
for mod in self.moduleList:
if mod.name == moduleName:
debug.debug("build module '" + moduleName + "'")
return [mod.build(self, None), True]
debug.warning("not know module name : '" + moduleName + "' to '" + "build" + "' it")
return [heritage.HeritageList(), False]
def build(self, name, packagesName=None):
if name == "dump": if name == "dump":
debug.info("dump all") debug.info("dump all")
self.load_all() self.load_all()
@ -417,7 +401,7 @@ class Target:
actionName = gettedElement[1] actionName = gettedElement[1]
else : else :
actionName = "build" actionName = "build"
debug.verbose("requested : " + moduleName + "-" + actionName) debug.verbose("requested : " + moduleName + "?" + actionName)
if actionName == "install": if actionName == "install":
self.build(moduleName + "?build") self.build(moduleName + "?build")
self.install_package(moduleName) self.install_package(moduleName)
@ -426,7 +410,10 @@ class Target:
elif actionName == "log": elif actionName == "log":
self.Log(moduleName) self.Log(moduleName)
else: else:
self.load_if_needed(moduleName) present = self.load_if_needed(moduleName, optionnal=optionnal)
if present == False \
and optionnal == True:
return [heritage.HeritageList(), False]
# clean requested # clean requested
for mod in self.moduleList: for mod in self.moduleList:
if mod.name == moduleName: if mod.name == moduleName:
@ -438,7 +425,11 @@ class Target:
return mod.clean(self) return mod.clean(self)
elif actionName == "build": elif actionName == "build":
debug.debug("build module '" + moduleName + "'") debug.debug("build module '" + moduleName + "'")
if optionnal == True:
return [mod.build(self, None), True]
return mod.build(self, None) return mod.build(self, None)
if optionnal == True:
return [heritage.HeritageList(), False]
debug.error("not know module name : '" + moduleName + "' to '" + actionName + "' it") debug.error("not know module name : '" + moduleName + "' to '" + actionName + "' it")
def add_action(self, name_of_state="PACKAGE", action=None): def add_action(self, name_of_state="PACKAGE", action=None):

View File

@ -65,8 +65,7 @@ def compile(file, binary, target, depancy, flags, path, name, basic_folder):
out += ":" out += ":"
out += elem out += elem
cmd.append(out) cmd.append(out)
# todo : Remplace this with class_extern = [] and add a dependency with android framework ... class_extern = []
class_extern = [target.folder_sdk + "/platforms/android-" + str(target.boardId) + "/android.jar"]
upper_jar = tools.filter_extention(depancy.src, ["jar"]) upper_jar = tools.filter_extention(depancy.src, ["jar"])
#debug.warning("ploppppp = " + str(upper_jar)) #debug.warning("ploppppp = " + str(upper_jar))
for elem in upper_jar: for elem in upper_jar:

View File

@ -99,3 +99,4 @@ def link(file, binary, target, depancy, name, basic_folder):
# write cmd line only after to prevent errors ... # write cmd line only after to prevent errors ...
multiprocess.store_command(cmdLine, file_cmd) multiprocess.store_command(cmdLine, file_cmd)
#debug.print_element("SharedLib", self.name, "==>", tmpList[1]) #debug.print_element("SharedLib", self.name, "==>", tmpList[1])
return file_dst

View File

@ -0,0 +1,24 @@
#!/usr/bin/python
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
from lutin import debug
from lutin import system
from lutin import tools
import os
class System(system.System):
def __init__(self, target):
system.System.__init__(self)
# create some HELP:
self.help="SDK: Android SDK basic interface java\n"
self.valid = True
# todo : create a searcher of the presence of the library:
self.add_export_SRC(target.folder_sdk + "/platforms/android-" + str(target.boardId) + "/android.jar")

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="CoreAudio : Ios interface for audio (all time present, just system interface)" self.help="CoreAudio : Ios interface for audio (all time present, just system interface)"

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="ALSA : Advanced Linux Sound Architecture\n Can be install with the package:\n - libasound2-dev" self.help="ALSA : Advanced Linux Sound Architecture\n Can be install with the package:\n - libasound2-dev"

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="BOOST : Boost interface (need when we have not all c++ feature\n Can be install with the package:\n - libboost-all-dev" self.help="BOOST : Boost interface (need when we have not all c++ feature\n Can be install with the package:\n - libboost-all-dev"

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="JACK : Jack Low-Latency Audio Server\n Can be install with the package:\n - libjack-jackd2-dev (new)\n - libjack-dev (old)" self.help="JACK : Jack Low-Latency Audio Server\n Can be install with the package:\n - libjack-jackd2-dev (new)\n - libjack-dev (old)"

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="OSS : Linux Open Sound System\n Can be install with the package:\n - ... TODO ..." self.help="OSS : Linux Open Sound System\n Can be install with the package:\n - ... TODO ..."

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="PULSE : The Linux PulseAudio\n Can be install with the package:\n - libpulse-dev" self.help="PULSE : The Linux PulseAudio\n Can be install with the package:\n - libpulse-dev"

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="Z : z library \n Can be install with the package:\n - zlib1g-dev" self.help="Z : z library \n Can be install with the package:\n - zlib1g-dev"

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="CoreAudio : MacOs interface for audio (all time present, just system interface)" self.help="CoreAudio : MacOs interface for audio (all time present, just system interface)"

View File

@ -13,7 +13,7 @@ from lutin import tools
import os import os
class System(system.System): class System(system.System):
def __init__(self): def __init__(self, target):
system.System.__init__(self) system.System.__init__(self)
# create some HELP: # create some HELP:
self.help="DirectSound : Direct sound API for windows audio interface" self.help="DirectSound : Direct sound API for windows audio interface"

View File

@ -192,7 +192,7 @@ class Target(target.Target):
def get_staging_folder_data(self, binaryName): def get_staging_folder_data(self, binaryName):
return self.get_staging_folder(binaryName) + self.folder_data return self.get_staging_folder(binaryName) + self.folder_data
def make_package(self, pkgName, pkgProperties, basePkgPath): def make_package(self, pkgName, pkgProperties, basePkgPath, heritage):
# http://alp.developpez.com/tutoriels/debian/creer-paquet/ # http://alp.developpez.com/tutoriels/debian/creer-paquet/
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")
debug.info("Generate package '" + pkgName + "'") debug.info("Generate package '" + pkgName + "'")
@ -262,6 +262,7 @@ class Target(target.Target):
debug.error("an error occured when getting the tools for android") debug.error("an error occured when getting the tools for android")
androidToolPath += dirnames[0] + "/" androidToolPath += dirnames[0] + "/"
# this is to create resource file for android ... (we did not use aset in jar with ewol ...
adModResouceFolder = "" adModResouceFolder = ""
if "ADMOD_ID" in pkgProperties: if "ADMOD_ID" in pkgProperties:
adModResouceFolder = " -S " + self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/res/ " adModResouceFolder = " -S " + self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/res/ "
@ -273,25 +274,17 @@ class Target(target.Target):
+ adModResouceFolder \ + adModResouceFolder \
+ "-J " + self.get_staging_folder(pkgName) + "/src/ " + "-J " + self.get_staging_folder(pkgName) + "/src/ "
multiprocess.run_command(cmdLine) multiprocess.run_command(cmdLine)
#aapt package -f -M ${manifest.file} -F ${packaged.resource.file} -I ${path.to.android-jar.library}
# -S ${android-resource-directory} [-m -J ${folder.to.output.the.R.java}]
tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/build/classes/noFile") tools.create_directory_of_file(self.get_staging_folder(pkgName) + "/build/classes/noFile")
debug.print_element("pkg", "*.class", "<==", "*.java") debug.print_element("pkg", "*.class", "<==", "*.java")
# more information with : -Xlint
# + self.file_finalAbstraction + " "\ # this generate ex: out/Android/debug/staging/tethys/src/com/edouarddupin/tethys/edn.java
#generate android java files: #generate android java files:
filesString="" filesString=""
for element in pkgProperties["ANDROID_JAVA_FILES"]:
if element=="DEFAULT":
# this is deprecated ...
else:
filesString += element + " "
"""
old :
if "ADMOD_ID" in pkgProperties: if "ADMOD_ID" in pkgProperties:
# TODO : check this I do not think it is really usefull ... ==> write for IDE only ...
filesString += self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/src/android/UnusedStub.java " filesString += self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/src/android/UnusedStub.java "
if len(pkgProperties["ANDROID_WALLPAPER_PROPERTIES"])!=0: if len(pkgProperties["ANDROID_WALLPAPER_PROPERTIES"])!=0:
filesString += self.folder_javaProject + pkgNameApplicationName + "Settings.java " filesString += self.folder_javaProject + pkgNameApplicationName + "Settings.java "
@ -307,6 +300,23 @@ class Target(target.Target):
+ self.file_finalAbstraction + " " \ + self.file_finalAbstraction + " " \
+ self.get_staging_folder(pkgName) + "/src/R.java " + self.get_staging_folder(pkgName) + "/src/R.java "
multiprocess.run_command(cmdLine) multiprocess.run_command(cmdLine)
"""
debug.verbose("heritage .so=" + str(tools.filter_extention(heritage.src, ["so"])))
debug.verbose("heritage .jar=" + str(tools.filter_extention(heritage.src, ["jar"])))
class_extern = ""
upper_jar = tools.filter_extention(heritage.src, ["jar"])
#debug.warning("ploppppp = " + str(upper_jar))
for elem in upper_jar:
if len(class_extern) > 0:
class_extern += ":"
class_extern += elem
# create enpoint element :
cmdLine = "javac " \
+ "-d " + self.get_staging_folder(pkgName) + "/build/classes " \
+ "-classpath " + class_extern + " " \
+ self.get_staging_folder(pkgName) + "/src/R.java "
multiprocess.run_command(cmdLine)
debug.print_element("pkg", ".dex", "<==", "*.class") debug.print_element("pkg", ".dex", "<==", "*.class")
cmdLine = androidToolPath + "dx " \ cmdLine = androidToolPath + "dx " \
@ -316,6 +326,11 @@ class Target(target.Target):
if "ADMOD_ID" in pkgProperties: if "ADMOD_ID" in pkgProperties:
cmdLine += self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar " cmdLine += self.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar "
# add element to dexification:
for elem in upper_jar:
# remove android sdk:
if elem[-len("android.jar"):] != "android.jar":
cmdLine += elem + " "
multiprocess.run_command(cmdLine) multiprocess.run_command(cmdLine)
@ -404,7 +419,7 @@ class Target(target.Target):
if self.config["mode"] == "debug": if self.config["mode"] == "debug":
pkgNameApplicationName += "debug" pkgNameApplicationName += "debug"
cmdLine = self.folder_sdk + "/platform-tools/adb uninstall " + pkgNameApplicationName cmdLine = self.folder_sdk + "/platform-tools/adb uninstall " + pkgNameApplicationName
Rmultiprocess.unCommand(cmdLine) Rmultiprocess.run_command(cmdLine)
def Log(self, pkgName): def Log(self, pkgName):
debug.debug("------------------------------------------------------------------------") debug.debug("------------------------------------------------------------------------")