[DEV] try to take android soft cration more flexible

This commit is contained in:
Edouard DUPIN 2013-08-25 23:28:25 +02:00
parent 6465630a70
commit d1fe3fe6c3
2 changed files with 110 additions and 75 deletions

View File

@ -81,6 +81,9 @@ class module:
"DESCRIPTION" : set(""),
"VERSION" : set("0.0.0"),
"NAME" : set("no-name"), # name of the application
"ANDROID_MANIFEST" : set(""), # By default generate the manifest
"ANDROID_JAVA_FILES" : ["DEFAULT"], # when user want to create his own services and activities
"ANDROID_RESOURCES" : [],
"RIGHT" : []
}
@ -611,11 +614,20 @@ class module:
self.packageProp[variable] = value
elif "NAME" == variable:
self.packageProp[variable] = value
elif "ANDROID_MANIFEST" == variable:
self.packageProp[variable] = value
elif "ANDROID_JAVA_FILES" == variable:
self.packageProp[variable] = value
elif "RIGHT" == variable:
self.packageProp[variable] = value
elif "ANDROID_RESOURCES" == variable:
self.packageProp[variable] = value
else:
debug.error("not know pak element : '" + variable + "'")
def pkgAddRight(self, value):
self.packageProp["RIGHT"].append(value)
def pkgAdd(self, variable, value):
# TODO : Check values...
self.packageProp[variable].append(value)

View File

@ -125,73 +125,86 @@ class Target(lutinTarget.Target):
lutinTools.CopyFile(pkgProperties["ICON"], self.GetStagingFolder(pkgName) + "/res/drawable/icon.png", True)
debug.printElement("pkg", "AndroidManifest.xml", "<==", "package configurations")
tmpFile = open(self.GetStagingFolder(pkgName) + "/AndroidManifest.xml", 'w')
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
tmpFile.write( "<!-- Manifest is autoGenerated with Ewol ... do not patch it-->\n")
tmpFile.write( "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" \n")
tmpFile.write( " package=\""+pkgProperties["COMPAGNY_TYPE"]+"."+pkgProperties["COMPAGNY_NAME2"]+"." + pkgName + "\" \n")
tmpFile.write( " android:versionCode=\"1\" \n")
tmpFile.write( " android:versionName=\""+pkgProperties["VERSION"]+"\"> \n")
tmpFile.write( " <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />\n")
tmpFile.write( " <uses-sdk android:minSdkVersion=\"" + str(self.boardId) + "\" /> \n")
tmpFile.write( " <uses-feature android:name=\"android.software.live_wallpaper\" /> \n")
tmpFile.write( " \n")
tmpFile.write( " <application android:label=\"" + pkgName + "\" \n")
tmpFile.write( " android:icon=\"@drawable/icon\"")
#tmpFile.write( "\n android:permission=\"android.permission.BIND_WALLPAPER\"")
tmpFile.write( " >\n")
tmpFile.write( " <activity android:name=\"." + pkgName + "\" \n")
if "debug"==self.buildMode:
tmpFile.write( " android:label=\"" + pkgProperties["NAME"] + "-debug\" \n")
if (pkgProperties["ANDROID_MANIFEST"]!=""):
debug.printElement("pkg", "AndroidManifest.xml", "<==", pkgProperties["ANDROID_MANIFEST"])
lutinTools.CopyFile(pkgProperties["ANDROID_MANIFEST"], self.GetStagingFolder(pkgName) + "/AndroidManifest.xml", True)
else:
tmpFile.write( " android:label=\"" + pkgProperties["NAME"] + "\" \n")
tmpFile.write( " android:icon=\"@drawable/icon\" \n")
tmpFile.write( " android:hardwareAccelerated=\"true\" \n")
tmpFile.write( " android:configChanges=\"orientation\"> \n")
tmpFile.write( " <intent-filter> \n")
tmpFile.write( " <action android:name=\"android.intent.action.MAIN\" /> \n")
tmpFile.write( " <category android:name=\"android.intent.category.LAUNCHER\" /> \n")
tmpFile.write( " </intent-filter> \n")
tmpFile.write( " </activity> \n")
#tmpFile.write( " <service android:name=\""+pkgProperties["COMPAGNY_TYPE"]+"."+pkgProperties["COMPAGNY_NAME2"]+"." + pkgName + "Service\"\n")
#tmpFile.write( " android:label=\"" + pkgName + "\" >\n")
#tmpFile.write( " <intent-filter>\n")
#tmpFile.write( " <action android:name=\"android.service.wallpaper.WallpaperService\" />\n")
#tmpFile.write( " </intent-filter>\n")
#tmpFile.write( " <meta-data android:name=\"android.service.wallpaper\"/>\n")
##tmpFile.write( " android:resource=\"@xml/fallingsnow_wp\" />\n")
#tmpFile.write( " </service>\n")
tmpFile.write( " </application> \n")
if True==self.CheckRightPackage(pkgProperties, "WRITE_EXTERNAL_STORAGE"):
tmpFile.write( " <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "CAMERA"):
tmpFile.write( " <uses-permission android:name=\"android.permission.CAMERA\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "INTERNET"):
tmpFile.write( " <uses-permission android:name=\"android.permission.INTERNET\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "MODIFY_AUDIO_SETTINGS"):
tmpFile.write( " <uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_CALENDAR"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_CALENDAR\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_CONTACTS"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_CONTACTS\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_FRAME_BUFFER"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_FRAME_BUFFER\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_PROFILE"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_PROFILE\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "RECORD_AUDIO"):
tmpFile.write( " <uses-permission android:name=\"android.permission.RECORD_AUDIO\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "SET_ORIENTATION"):
tmpFile.write( " <uses-permission android:name=\"android.permission.SET_ORIENTATION\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "VIBRATE"):
tmpFile.write( " <uses-permission android:name=\"android.permission.VIBRATE\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "ACCESS_COARSE_LOCATION"):
tmpFile.write( " <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "ACCESS_FINE_LOCATION"):
tmpFile.write( " <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /> \n")
tmpFile.write( "</manifest>\n\n")
tmpFile.flush()
tmpFile.close()
debug.printElement("pkg", "AndroidManifest.xml", "<==", "package configurations")
tmpFile = open(self.GetStagingFolder(pkgName) + "/AndroidManifest.xml", 'w')
tmpFile.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
tmpFile.write( "<!-- Manifest is autoGenerated with Ewol ... do not patch it-->\n")
tmpFile.write( "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" \n")
tmpFile.write( " package=\""+pkgProperties["COMPAGNY_TYPE"]+"."+pkgProperties["COMPAGNY_NAME2"]+"." + pkgName + "\" \n")
tmpFile.write( " android:versionCode=\"1\" \n")
tmpFile.write( " android:versionName=\""+pkgProperties["VERSION"]+"\"> \n")
tmpFile.write( " <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />\n")
tmpFile.write( " <uses-sdk android:minSdkVersion=\"" + str(self.boardId) + "\" /> \n")
tmpFile.write( " <uses-feature android:name=\"android.software.live_wallpaper\" /> \n")
tmpFile.write( " \n")
tmpFile.write( " <application android:label=\"" + pkgName + "\" \n")
tmpFile.write( " android:icon=\"@drawable/icon\"")
#tmpFile.write( "\n android:permission=\"android.permission.BIND_WALLPAPER\"")
tmpFile.write( " >\n")
tmpFile.write( " <activity android:name=\"." + pkgName + "\" \n")
if "debug"==self.buildMode:
tmpFile.write( " android:label=\"" + pkgProperties["NAME"] + "-debug\" \n")
else:
tmpFile.write( " android:label=\"" + pkgProperties["NAME"] + "\" \n")
tmpFile.write( " android:icon=\"@drawable/icon\" \n")
tmpFile.write( " android:hardwareAccelerated=\"true\" \n")
tmpFile.write( " android:configChanges=\"orientation\"> \n")
tmpFile.write( " <intent-filter> \n")
tmpFile.write( " <action android:name=\"android.intent.action.MAIN\" /> \n")
tmpFile.write( " <category android:name=\"android.intent.category.LAUNCHER\" /> \n")
tmpFile.write( " </intent-filter> \n")
tmpFile.write( " </activity> \n")
#tmpFile.write( " <service android:name=\""+pkgProperties["COMPAGNY_TYPE"]+"."+pkgProperties["COMPAGNY_NAME2"]+"." + pkgName + "Service\"\n")
#tmpFile.write( " android:label=\"" + pkgName + "\" >\n")
#tmpFile.write( " <intent-filter>\n")
#tmpFile.write( " <action android:name=\"android.service.wallpaper.WallpaperService\" />\n")
#tmpFile.write( " </intent-filter>\n")
#tmpFile.write( " <meta-data android:name=\"android.service.wallpaper\"/>\n")
##tmpFile.write( " android:resource=\"@xml/fallingsnow_wp\" />\n")
#tmpFile.write( " </service>\n")
tmpFile.write( " </application> \n")
if True==self.CheckRightPackage(pkgProperties, "WRITE_EXTERNAL_STORAGE"):
tmpFile.write( " <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "CAMERA"):
tmpFile.write( " <uses-permission android:name=\"android.permission.CAMERA\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "INTERNET"):
tmpFile.write( " <uses-permission android:name=\"android.permission.INTERNET\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "MODIFY_AUDIO_SETTINGS"):
tmpFile.write( " <uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_CALENDAR"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_CALENDAR\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_CONTACTS"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_CONTACTS\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_FRAME_BUFFER"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_FRAME_BUFFER\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "READ_PROFILE"):
tmpFile.write( " <uses-permission android:name=\"android.permission.READ_PROFILE\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "RECORD_AUDIO"):
tmpFile.write( " <uses-permission android:name=\"android.permission.RECORD_AUDIO\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "SET_ORIENTATION"):
tmpFile.write( " <uses-permission android:name=\"android.permission.SET_ORIENTATION\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "VIBRATE"):
tmpFile.write( " <uses-permission android:name=\"android.permission.VIBRATE\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "ACCESS_COARSE_LOCATION"):
tmpFile.write( " <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /> \n")
if True==self.CheckRightPackage(pkgProperties, "ACCESS_FINE_LOCATION"):
tmpFile.write( " <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /> \n")
tmpFile.write( "</manifest>\n\n")
tmpFile.flush()
tmpFile.close()
# end generating android manifest
#copy needed resources :
for res_source, res_dest in pkgProperties["ANDROID_RESOURCES"]:
if res_source == "":
continue
lutinTools.CopyFile(res_source , self.GetStagingFolder(pkgName) + "/res/" + res_dest + "/" + os.path.basename(res_source), True)
# Doc :
# http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/
@ -211,16 +224,26 @@ class Target(lutinTarget.Target):
debug.printElement("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:
filesString=""
for element in pkgProperties["ANDROID_JAVA_FILES"]:
if element=="DEFAULT":
filesString += self.folder_ewol + "/sources/android/src/org/ewol/EwolAudioTask.java "
filesString += self.folder_ewol + "/sources/android/src/org/ewol/EwolCallback.java "
filesString += self.folder_ewol + "/sources/android/src/org/ewol/EwolConstants.java "
filesString += self.folder_ewol + "/sources/android/src/org/ewol/Ewol.java "
filesString += self.folder_ewol + "/sources/android/src/org/ewol/EwolRendererGL.java "
filesString += self.folder_ewol + "/sources/android/src/org/ewol/EwolSurfaceViewGL.java "
filesString += self.folder_ewol + "/sources/android/src/org/ewol/EwolActivity.java "
else:
filesString += element + " "
cmdLine = "javac " \
+ "-d " + self.GetStagingFolder(pkgName) + "/build/classes " \
+ "-classpath " + self.folder_sdk + "/platforms/android-" + str(self.boardId) + "/android.jar " \
+ self.folder_ewol + "/sources/android/src/org/ewol/EwolAudioTask.java " \
+ self.folder_ewol + "/sources/android/src/org/ewol/EwolCallback.java " \
+ self.folder_ewol + "/sources/android/src/org/ewol/EwolConstants.java " \
+ self.folder_ewol + "/sources/android/src/org/ewol/Ewol.java " \
+ self.folder_ewol + "/sources/android/src/org/ewol/EwolRendererGL.java " \
+ self.folder_ewol + "/sources/android/src/org/ewol/EwolSurfaceViewGL.java " \
+ self.folder_ewol + "/sources/android/src/org/ewol/EwolActivity.java " \
+ filesString \
+ self.file_finalAbstraction + " " \
+ self.GetStagingFolder(pkgName) + "/src/R.java "
lutinMultiprocess.RunCommand(cmdLine)