From b6c3c9c58a5f974de7119c41c3062485968b6446 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Fri, 18 Sep 2015 21:29:53 +0200 Subject: [PATCH] [DEBUG] correct file interface of android --- android/src/org/gale/Gale.java | 6 +- android/src/org/gale/GaleActivity.java | 10 +-- android/src/org/gale/GaleWallpaper.java | 8 +- gale/context/Android/Context.cpp | 12 ++- gale/context/Context.cpp | 4 +- gale/context/Context.h | 2 +- lutin_gale.py | 104 ++++++++++++------------ 7 files changed, 77 insertions(+), 69 deletions(-) diff --git a/android/src/org/gale/Gale.java b/android/src/org/gale/Gale.java index c12482e..f39419f 100644 --- a/android/src/org/gale/Gale.java +++ b/android/src/org/gale/Gale.java @@ -27,8 +27,8 @@ public class Gale { public void setJavaVirtualMachineStop() { EWsetJavaVirtualMachineStop(m_instanceID); } - public void paramSetArchiveDir(int _mode, String _myString) { - EWparamSetArchiveDir(m_instanceID, _mode, _myString); + public void paramSetArchiveDir(int _mode, String _myString, String _applicationName) { + EWparamSetArchiveDir(m_instanceID, _mode, _myString, _applicationName); } public boolean getHardKeyboardHidden() { @@ -108,7 +108,7 @@ public class Gale { private native int EWsetJavaVirtualMachineStart(T _activityInstance, int _typeApplication); private native void EWsetJavaVirtualMachineStop(int _instanceId); - private native void EWparamSetArchiveDir(int _instanceId, int _mode, String _myString); + private native void EWparamSetArchiveDir(int _instanceId, int _mode, String _myString, String _applicationName); // activity status private native void EWonCreate(int _instanceId); diff --git a/android/src/org/gale/GaleActivity.java b/android/src/org/gale/GaleActivity.java index d5e3f66..b7b5922 100644 --- a/android/src/org/gale/GaleActivity.java +++ b/android/src/org/gale/GaleActivity.java @@ -73,7 +73,7 @@ public abstract class GaleActivity extends Activity implements GaleCallback, Gal tmpClipBoard = ""; } - protected void initApkPath(String _org, String _vendor, String _project) { + protected void initApkPath(String _org, String _vendor, String _project, String _applName) { StringBuilder sb = new StringBuilder(); sb.append(_org).append("."); sb.append(_vendor).append("."); @@ -88,7 +88,7 @@ public abstract class GaleActivity extends Activity implements GaleCallback, Gal throw new RuntimeException("Unable to locate assets, aborting..."); } apkFilePath = appInfo.sourceDir; - m_galeNative.paramSetArchiveDir(0, apkFilePath); + m_galeNative.paramSetArchiveDir(0, apkFilePath, _applName); } @Override protected void onCreate(Bundle _savedInstanceState) { @@ -97,11 +97,11 @@ public abstract class GaleActivity extends Activity implements GaleCallback, Gal GaleActivity.m_context = getApplicationContext(); // Load the application directory - m_galeNative.paramSetArchiveDir(1, getFilesDir().toString()); - m_galeNative.paramSetArchiveDir(2, getCacheDir().toString()); + m_galeNative.paramSetArchiveDir(1, getFilesDir().toString(), ""); + m_galeNative.paramSetArchiveDir(2, getCacheDir().toString(), ""); // to enable extarnal storage: add in the manifest the restriction needed ... //packageManager.checkPermission("android.permission.READ_SMS", myPackage) == PERMISSION_GRANTED; - //Gale.paramSetArchiveDir(3, getExternalCacheDir().toString()); + //Gale.paramSetArchiveDir(3, getExternalCacheDir().toString(), ""); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); diff --git a/android/src/org/gale/GaleWallpaper.java b/android/src/org/gale/GaleWallpaper.java index 3105ece..b224e9b 100644 --- a/android/src/org/gale/GaleWallpaper.java +++ b/android/src/org/gale/GaleWallpaper.java @@ -34,7 +34,7 @@ public abstract class GaleWallpaper extends WallpaperService implements GaleCall private GLEngine mGLView; private Gale m_galeNative; - protected void initApkPath(String _org, String _vendor, String _project) { + protected void initApkPath(String _org, String _vendor, String _project, String _applName) { StringBuilder sb = new StringBuilder(); sb.append(_org).append("."); sb.append(_vendor).append("."); @@ -49,7 +49,7 @@ public abstract class GaleWallpaper extends WallpaperService implements GaleCall throw new RuntimeException("Unable to locate assets, aborting..."); } apkFilePath = appInfo.sourceDir; - m_galeNative.paramSetArchiveDir(0, apkFilePath); + m_galeNative.paramSetArchiveDir(0, apkFilePath, _applName); } @Override public Engine onCreateEngine() { @@ -57,8 +57,8 @@ public abstract class GaleWallpaper extends WallpaperService implements GaleCall m_galeNative = new Gale(this, GALE_APPL_TYPE_WALLPAPER); // Load the application directory - m_galeNative.paramSetArchiveDir(1, getFilesDir().toString()); - m_galeNative.paramSetArchiveDir(2, getCacheDir().toString()); + m_galeNative.paramSetArchiveDir(1, getFilesDir().toString(), ""); + m_galeNative.paramSetArchiveDir(2, getCacheDir().toString(), ""); // to enable extarnal storage: add in the manifest the restriction needed ... //packageManager.checkPermission("android.permission.READ_SMS", myPackage) == PERMISSION_GRANTED; //Gale.paramSetArchiveDir(3, getExternalCacheDir().toString()); diff --git a/gale/context/Android/Context.cpp b/gale/context/Android/Context.cpp index f27b5a4..87f6436 100644 --- a/gale/context/Android/Context.cpp +++ b/gale/context/Android/Context.cpp @@ -478,7 +478,8 @@ extern "C" { jclass _cls, jint _id, jint _mode, - jstring _myString) { + jstring _myString, + jstring _applicationName) { std::unique_lock lock(g_interfaceMutex); if( _id >= (int32_t)s_listInstance.size() || _id<0 @@ -491,12 +492,19 @@ extern "C" { // direct setting of the date in the string system ... jboolean isCopy; const char* str = _env->GetStringUTFChars(_myString, &isCopy); - s_listInstance[_id]->setArchiveDir(_mode, str); + jboolean isCopy2; + const char* str2 = _env->GetStringUTFChars(_applicationName, &isCopy2); + s_listInstance[_id]->setArchiveDir(_mode, str, str2); if (isCopy == JNI_TRUE) { // from here str is reset ... _env->ReleaseStringUTFChars(_myString, str); str = nullptr; } + if (isCopy2 == JNI_TRUE) { + // from here str is reset ... + _env->ReleaseStringUTFChars(_applicationName, str2); + str2 = nullptr; + } } // declare main application instance like an application: diff --git a/gale/context/Context.cpp b/gale/context/Context.cpp index 965f2b9..a4c9818 100644 --- a/gale/context/Context.cpp +++ b/gale/context/Context.cpp @@ -158,11 +158,11 @@ void gale::Context::processEvents() { } } -void gale::Context::setArchiveDir(int _mode, const char* _str) { +void gale::Context::setArchiveDir(int _mode, const char* _str, const char* _applName) { switch(_mode) { case 0: GALE_DEBUG("Directory APK : path=" << _str); - etk::setBaseFolderData(_str); + etk::setBaseFolderData(_str, _applName); break; case 1: GALE_DEBUG("Directory mode=FILE path=" << _str); diff --git a/gale/context/Context.h b/gale/context/Context.h index 78da56d..7b84040 100644 --- a/gale/context/Context.h +++ b/gale/context/Context.h @@ -80,7 +80,7 @@ namespace gale { void processEvents(); public: - virtual void setArchiveDir(int _mode, const char* _str); + virtual void setArchiveDir(int _mode, const char* _str, const char* _applName=nullptr); virtual void OS_SetInput(enum gale::key::type _type, enum gale::key::status _status, diff --git a/lutin_gale.py b/lutin_gale.py index ac0be31..11df821 100644 --- a/lutin_gale.py +++ b/lutin_gale.py @@ -151,7 +151,7 @@ def create(target): myModule.add_module_depend(["SDK", "jvm-basics"]) myModule.add_export_flag('link', "-lGLESv2") # add tre creator of the basic java class ... - target.add_action("PACKAGE", 50, "gale-auto-wrapper", tool_generate_main_java_class) + target.add_action("BINARY", 50, "gale-auto-wrapper", tool_generate_main_java_class) # TODO : Add the same for BINARY to create a console interface ? elif target.name=="Windows": myModule.add_module_depend("glew") @@ -188,18 +188,18 @@ def tool_generate_main_java_class(target, module, package_name): application_name = package_name if target.config["mode"] == "debug": application_name += "debug" - target.folder_java_project= target.get_build_folder(package_name) \ + target.path_java_project= target.get_build_path(package_name) \ + "/src/" \ + module.package_prop["COMPAGNY_TYPE"] \ + "/" + module.package_prop["COMPAGNY_NAME2"] \ + "/" + application_name + "/" - java_file_wrapper = target.folder_java_project + "/" + application_name + ".java" + java_file_wrapper = target.path_java_project + "/" + application_name + ".java" android_package_name = module.package_prop["COMPAGNY_TYPE"]+"."+module.package_prop["COMPAGNY_NAME2"]+"." + application_name debug.print_element("pkg", "absractionFile", "<==", "dynamic file") - # Create folder : + # Create path : tools.create_directory_of_file(java_file_wrapper) debug.debug("create file : '" + java_file_wrapper + "'") # Create file : @@ -246,7 +246,7 @@ def tool_generate_main_java_class(target, module, package_name): if module.package_prop["ANDROID_APPL_TYPE"]!="APPL": tmpFile.write( " public Engine onCreateEngine() {\n") tmpFile.write( " Engine tmpEngine = super.onCreateEngine();\n") - tmpFile.write( " initApkPath(\"" + module.package_prop["COMPAGNY_TYPE"]+"\", \""+module.package_prop["COMPAGNY_NAME2"]+"\", \"" + application_name + "\");\n") + tmpFile.write( " initApkPath(\"" + module.package_prop["COMPAGNY_TYPE"]+"\", \""+module.package_prop["COMPAGNY_NAME2"]+"\", \"" + application_name + "\", \"" + package_name + "\");\n") tmpFile.write( " return tmpEngine;\n") tmpFile.write( " }\n") @@ -259,7 +259,7 @@ def tool_generate_main_java_class(target, module, package_name): tmpFile.write( " public void onCreate(android.os.Bundle savedInstanceState) {\n") tmpFile.write( " super.onCreate(savedInstanceState);\n") - tmpFile.write( " initApkPath(\"" + module.package_prop["COMPAGNY_TYPE"]+"\", \""+module.package_prop["COMPAGNY_NAME2"]+"\", \"" + application_name + "\");\n") + tmpFile.write( " initApkPath(\"" + module.package_prop["COMPAGNY_TYPE"]+"\", \""+module.package_prop["COMPAGNY_NAME2"]+"\", \"" + application_name + "\", \"" + package_name + "\");\n") if "GENERATE_SECTION__ON_CREATE" in module.package_prop: for elem in module.package_prop["GENERATE_SECTION__ON_CREATE"]: @@ -325,13 +325,13 @@ def tool_generate_main_java_class(target, module, package_name): """ ## todo: - tools.create_directory_of_file(target.get_staging_folder(package_name) + "/res/drawable/icon.png"); + tools.create_directory_of_file(target.get_staging_path(package_name) + "/res/drawable/icon.png"); if "ICON" in module.package_prop.keys() \ and module.package_prop["ICON"] != "": - image.resize(module.package_prop["ICON"], target.get_staging_folder(package_name) + "/res/drawable/icon.png", 256, 256) + image.resize(module.package_prop["ICON"], target.get_staging_path(package_name) + "/res/drawable/icon.png", 256, 256) else: # to be sure that we have all time a resource ... - tmpFile = open(target.get_staging_folder(package_name) + "/res/drawable/plop.txt", 'w') + tmpFile = open(target.get_staging_path(package_name) + "/res/drawable/plop.txt", 'w') tmpFile.write('plop\n') tmpFile.flush() tmpFile.close() @@ -339,7 +339,7 @@ def tool_generate_main_java_class(target, module, package_name): """ if module.package_prop["ANDROID_MANIFEST"] == "": # force manifest file: - module.package_prop["ANDROID_MANIFEST"] = target.get_build_folder(package_name) + "/AndroidManifest.xml"; + module.package_prop["ANDROID_MANIFEST"] = target.get_build_path(package_name) + "/AndroidManifest.xml"; debug.debug(" create file: '" + module.package_prop["ANDROID_MANIFEST"] + "'") if "VERSION_CODE" not in module.package_prop: module.package_prop["VERSION_CODE"] = "1" @@ -466,8 +466,8 @@ def tool_generate_main_java_class(target, module, package_name): if module.package_prop["ANDROID_APPL_TYPE"]!="APPL": #create the Wallpaper sub files : (main element for the application debug.print_element("pkg", application_name + "_resource.xml", "<==", "package configurations") - tools.create_directory_of_file(target.get_build_folder(package_name) + "/res/xml/" + application_name + "_resource.xml") - tmpFile = open(target.get_build_folder(package_name) + "/res/xml/" + application_name + "_resource.xml", 'w') + tools.create_directory_of_file(target.get_build_path(package_name) + "/res/xml/" + application_name + "_resource.xml") + tmpFile = open(target.get_build_path(package_name) + "/res/xml/" + application_name + "_resource.xml", 'w') tmpFile.write( "\n") tmpFile.write( "\n") tmpFile.write( "\n") tmpFile.write( "\n") tmpFile.write( " \n") @@ -569,35 +569,35 @@ def tool_generate_main_java_class(target, module, package_name): for res_source, res_dest in module.package_prop["ANDROID_RESOURCES"]: if res_source == "": continue - tools.copy_file(res_source , target.get_staging_folder(package_name) + "/res/" + res_dest + "/" + os.path.basename(res_source), force=True) + tools.copy_file(res_source , target.get_staging_path(package_name) + "/res/" + res_dest + "/" + os.path.basename(res_source), force=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/ debug.print_element("pkg", "R.java", "<==", "Resources files") - tools.create_directory_of_file(target.get_staging_folder(package_name) + "/src/noFile") - androidToolPath = target.folder_sdk + "/build-tools/" + tools.create_directory_of_file(target.get_staging_path(package_name) + "/src/noFile") + androidToolPath = target.path_sdk + "/build-tools/" # find android tool version - dirnames = tools.get_list_sub_folder(androidToolPath) + dirnames = tools.get_list_sub_path(androidToolPath) if len(dirnames) != 1: debug.error("an error occured when getting the tools for android") androidToolPath += dirnames[0] + "/" - adModResouceFolder = "" + adModResoucepath = "" if "ADMOD_ID" in module.package_prop: - adModResouceFolder = " -S " + target.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/res/ " + adModResoucepath = " -S " + target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/res/ " cmdLine = androidToolPath + "aapt p -f " \ - + "-M " + target.get_staging_folder(package_name) + "/AndroidManifest.xml " \ - + "-F " + target.get_staging_folder(package_name) + "/resources.res " \ - + "-I " + target.folder_sdk + "/platforms/android-" + str(target.boardId) + "/android.jar "\ - + "-S " + target.get_staging_folder(package_name) + "/res/ " \ - + adModResouceFolder \ - + "-J " + target.get_staging_folder(package_name) + "/src/ " + + "-M " + target.get_staging_path(package_name) + "/AndroidManifest.xml " \ + + "-F " + target.get_staging_path(package_name) + "/resources.res " \ + + "-I " + target.path_sdk + "/platforms/android-" + str(target.boardId) + "/android.jar "\ + + "-S " + target.get_staging_path(package_name) + "/res/ " \ + + adModResoucepath \ + + "-J " + target.get_staging_path(package_name) + "/src/ " 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}] + # -S ${android-resource-directory} [-m -J ${path.to.output.the.R.java}] - tools.create_directory_of_file(target.get_staging_folder(package_name) + "/build/classes/noFile") + tools.create_directory_of_file(target.get_staging_path(package_name) + "/build/classes/noFile") debug.print_element("pkg", "*.class", "<==", "*.java") # more information with : -Xlint # + java_file_wrapper + " "\ # this generate ex: out/Android/debug/staging/tethys/src/com/edouarddupin/tethys/edn.java @@ -606,44 +606,44 @@ def tool_generate_main_java_class(target, module, package_name): filesString="" for element in module.package_prop["ANDROID_JAVA_FILES"]: if element=="DEFAULT": - filesString += target.folder_gale + "/android/src/org/gale/GaleAudioTask.java " - filesString += target.folder_gale + "/android/src/org/gale/GaleCallback.java " - filesString += target.folder_gale + "/android/src/org/gale/GaleConstants.java " - filesString += target.folder_gale + "/android/src/org/gale/Gale.java " - filesString += target.folder_gale + "/android/src/org/gale/GaleRendererGL.java " - filesString += target.folder_gale + "/android/src/org/gale/GaleSurfaceViewGL.java " - filesString += target.folder_gale + "/android/src/org/gale/GaleActivity.java " - filesString += target.folder_gale + "/android/src/org/gale/GaleWallpaper.java " + filesString += target.path_gale + "/android/src/org/gale/GaleAudioTask.java " + filesString += target.path_gale + "/android/src/org/gale/GaleCallback.java " + filesString += target.path_gale + "/android/src/org/gale/GaleConstants.java " + filesString += target.path_gale + "/android/src/org/gale/Gale.java " + filesString += target.path_gale + "/android/src/org/gale/GaleRendererGL.java " + filesString += target.path_gale + "/android/src/org/gale/GaleSurfaceViewGL.java " + filesString += target.path_gale + "/android/src/org/gale/GaleActivity.java " + filesString += target.path_gale + "/android/src/org/gale/GaleWallpaper.java " else: filesString += element + " " if "ADMOD_ID" in module.package_prop: - filesString += target.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/src/android/UnusedStub.java " + filesString += target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/src/android/UnusedStub.java " if len(module.package_prop["ANDROID_WALLPAPER_PROPERTIES"])!=0: - filesString += target.folder_java_project + application_name + "Settings.java " + filesString += target.path_java_project + application_name + "Settings.java " adModJarFile = "" if "ADMOD_ID" in module.package_prop: - adModJarFile = ":" + target.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar" + adModJarFile = ":" + target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar" cmdLine = "javac " \ - + "-d " + target.get_staging_folder(package_name) + "/build/classes " \ - + "-classpath " + target.folder_sdk + "/platforms/android-" + str(target.boardId) + "/android.jar" \ + + "-d " + target.get_staging_path(package_name) + "/build/classes " \ + + "-classpath " + target.path_sdk + "/platforms/android-" + str(target.boardId) + "/android.jar" \ + adModJarFile + " " \ + filesString \ + java_file_wrapper + " " \ - + target.get_staging_folder(package_name) + "/src/R.java " + + target.get_staging_path(package_name) + "/src/R.java " multiprocess.run_command(cmdLine) debug.print_element("pkg", ".dex", "<==", "*.class") cmdLine = androidToolPath + "dx " \ + "--dex --no-strict " \ - + "--output=" + target.get_staging_folder(package_name) + "/build/" + application_name + ".dex " \ - + target.get_staging_folder(package_name) + "/build/classes/ " + + "--output=" + target.get_staging_path(package_name) + "/build/" + application_name + ".dex " \ + + target.get_staging_path(package_name) + "/build/classes/ " if "ADMOD_ID" in module.package_prop: - cmdLine += target.folder_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar " + cmdLine += target.path_sdk + "/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar " multiprocess.run_command(cmdLine) """ return {"files":file_list}