diff --git a/.gitignore b/.gitignore index 79c113f..c837fb1 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,12 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +# Place unity project here +/unity + +# flutter will place unity Library dependency here +/unityLibrary + +# unityLibrary will place build here +/android/unityLibrary \ No newline at end of file diff --git a/README.md b/README.md index b77fed4..c3b17fc 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,129 @@ -# furibase +# Furikake App + +Project ini adalah aplikasi mobile Furikake. + +## Konfigurasi UnityLibrary + +Gunakan konfigurasi ini pada file android/unityLibrary/build.gradle: + + +apply plugin: 'com.android.library' + + +dependencies { + implementation(name: 'unity-classes', ext:'jar') + implementation(name: 'arcore_client', ext:'aar') + implementation(name: 'ARPresto', ext:'aar') + implementation(name: 'UnityARCore', ext:'aar') + implementation(name: 'unityandroidpermissions', ext:'aar') + implementation project('xrmanifest.androidlib') + //implementation project('mobilenotifications.androidlib') + +} + +android { + namespace "com.unity3d.player" + // ndkPath "/Applications/Unity/Hub/Editor/2022.3.60f1/PlaybackEngines/AndroidPlayer/NDK" + compileSdkVersion 35 + buildToolsVersion '34.0.0' + ndkVersion "23.1.7779620" + + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } + + defaultConfig { + minSdkVersion 30 + targetSdkVersion 35 + ndk { + abiFilters 'armeabi-v7a', 'arm64-v8a' + } + versionCode 1 + versionName '1.0.2' + consumerProguardFiles 'proguard-unity.txt' + } + + lintOptions { + abortOnError false + } + + aaptOptions { + noCompress = ['.unity3d', '.ress', '.resource', '.obb', '.bundle', '.unityexp'] + ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~" + } + + packagingOptions { + doNotStrip '*/armeabi-v7a/*.so' + doNotStrip '*/arm64-v8a/*.so' + jniLibs { + useLegacyPackaging true + } + } +} + +def getSdkDir() { + Properties local = new Properties() + local.load(new FileInputStream("${rootDir}/local.properties")) + return local.getProperty('sdk.dir') +} + +def BuildIl2Cpp(String workingDir, String configuration, String architecture, String abi, String[] staticLibraries) { + def commandLineArgs = [] + commandLineArgs.add("--compile-cpp") + commandLineArgs.add("--platform=Android") + commandLineArgs.add("--architecture=" + architecture) + commandLineArgs.add("--outputpath=" + workingDir + "/src/main/jniLibs/" + abi + "/libil2cpp.so") + commandLineArgs.add("--baselib-directory=" + workingDir + "/src/main/jniStaticLibs/" + abi) + commandLineArgs.add("--incremental-g-c-time-slice=3") + commandLineArgs.add("--dotnetprofile=unityaot-linux") + commandLineArgs.add("--enable-debugger") + commandLineArgs.add("--profiler-report") + commandLineArgs.add("--profiler-output-file=" + workingDir + "/build/il2cpp_"+ abi + "_" + configuration + "/il2cpp_conv.traceevents") + commandLineArgs.add("--print-command-line") + commandLineArgs.add("--data-folder=" + workingDir + "/src/main/Il2CppOutputProject/Source/il2cppOutput/data") + commandLineArgs.add("--generatedcppdir=" + workingDir + "/src/main/Il2CppOutputProject/Source/il2cppOutput") + commandLineArgs.add("--cachedirectory=" + workingDir + "/build/il2cpp_"+ abi + "_" + configuration + "/il2cpp_cache") + commandLineArgs.add("--tool-chain-path=" + android.ndkDirectory) + staticLibraries.eachWithIndex {fileName, i-> + commandLineArgs.add("--additional-libraries=" + workingDir + "/src/main/jniStaticLibs/" + abi + "/" + fileName) + } + def executableExtension = "" + if (org.gradle.internal.os.OperatingSystem.current().isWindows()) { + executableExtension = ".exe" + commandLineArgs = commandLineArgs*.replace('\"', '\\\"') + } + exec { + executable workingDir + "/src/main/Il2CppOutputProject/IL2CPP/build/deploy/il2cpp" + executableExtension + args commandLineArgs + environment "ANDROID_SDK_ROOT", getSdkDir() + } + delete workingDir + "/src/main/jniLibs/" + abi + "/libil2cpp.sym.so" + ant.move(file: workingDir + "/src/main/jniLibs/" + abi + "/libil2cpp.dbg.so", tofile: workingDir + "/symbols/" + abi + "/libil2cpp.so") +} + +android { + task BuildIl2CppTask { + doLast { + BuildIl2Cpp(projectDir.toString().replaceAll('\\\\', '/'), 'Debug', 'armv7', 'armeabi-v7a', [ ] as String[]); + BuildIl2Cpp(projectDir.toString().replaceAll('\\\\', '/'), 'Debug', 'arm64', 'arm64-v8a', [ ] as String[]); + } + } + afterEvaluate { + if (project(':unityLibrary').tasks.findByName('mergeDebugJniLibFolders')) + project(':unityLibrary').mergeDebugJniLibFolders.dependsOn BuildIl2CppTask + if (project(':unityLibrary').tasks.findByName('mergeReleaseJniLibFolders')) + project(':unityLibrary').mergeReleaseJniLibFolders.dependsOn BuildIl2CppTask + } + sourceSets { + main { + jni.srcDirs = ["src/main/Il2CppOutputProject"] + } + } +} -A new Flutter project. -## Getting Started -This project is a starting point for a Flutter application. -A few resources to get you started if this is your first Flutter project: -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/lib/components/main_menu.dart b/lib/components/main_menu.dart index 4c581e8..61d45d2 100644 --- a/lib/components/main_menu.dart +++ b/lib/components/main_menu.dart @@ -33,7 +33,7 @@ class MainMenu extends StatelessWidget { ), MenuButton( label: "Koleksi", - icon: 'assets/icons/koleksi.svg', + icon: 'assets/icons/Koleksi.svg', onPress: () => { Navigator.push( diff --git a/lib/screen/Home_screen.dart b/lib/screen/Home_screen.dart index bce7774..845fe5a 100644 --- a/lib/screen/Home_screen.dart +++ b/lib/screen/Home_screen.dart @@ -74,14 +74,17 @@ class _HomeScreenState extends State { children: [ Positioned.fill( child: RepaintBoundary( - child: Container( - decoration: const BoxDecoration( - image: const DecorationImage( - image: AssetImage("assets/images/background.jpeg"), - fit: BoxFit.cover, - ), - ), - ), + // child: Container( + // decoration: const BoxDecoration( + // image: const DecorationImage( + // image: AssetImage("assets/images/background.jpeg"), + // fit: BoxFit.cover, + // ), + // ), + // ), + child: UnityWidget( + onUnityCreated: onUnityCreated, + ) ), ), // Positioned( @@ -195,40 +198,40 @@ class _HomeScreenState extends State { ], ), ), - Positioned( - bottom: 150, - left: 0, - right: 0, - child: Column( - children: [ - Container( - padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), - decoration: BoxDecoration( - color: Color.fromARGB(255, 247, 224, 236), - borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow( - color: Color.fromARGB(255, 214, 213, 121), - blurRadius: 5, - spreadRadius: 2, - ), - ], - ), - child: Text( - "Halo....Jotaslim", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.bold, - color: Color(0xFF000000), - ), - ), - ), - SizedBox(height: 10), - setHomeImage("assets/images/luffy.png", 300), - // Image.asset("images/luffy.png", width: 300), - ], - ), - ), + // Positioned( + // bottom: 150, + // left: 0, + // right: 0, + // child: Column( + // children: [ + // Container( + // padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), + // decoration: BoxDecoration( + // color: Color.fromARGB(255, 247, 224, 236), + // borderRadius: BorderRadius.circular(10), + // boxShadow: [ + // BoxShadow( + // color: Color.fromARGB(255, 214, 213, 121), + // blurRadius: 5, + // spreadRadius: 2, + // ), + // ], + // ), + // child: Text( + // "Halo....Jotaslim", + // style: TextStyle( + // fontSize: 12, + // fontWeight: FontWeight.bold, + // color: Color(0xFF000000), + // ), + // ), + // ), + // SizedBox(height: 10), + // setHomeImage("images/luffy.png", 300), + // // Image.asset("images/luffy.png", width: 300), + // ], + // ), + // ), // BG MEnu Stack( children: [