| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Dvid Project Structure</title> |
| <script src="https://cdn.tailwindcss.com"></script> |
| <style> |
| .file-tree { |
| font-family: 'Courier New', monospace; |
| background-color: #f8f9fa; |
| padding: 20px; |
| border-radius: 8px; |
| margin-bottom: 20px; |
| } |
| .folder { |
| color: #1a73e8; |
| font-weight: bold; |
| } |
| .file { |
| color: #34a853; |
| margin-left: 20px; |
| } |
| .file-content { |
| background-color: #f1f3f4; |
| padding: 15px; |
| border-radius: 6px; |
| margin-top: 10px; |
| overflow-x: auto; |
| } |
| .section-title { |
| color: #5f6368; |
| border-bottom: 1px solid #dadce0; |
| padding-bottom: 8px; |
| margin-top: 30px; |
| } |
| </style> |
| </head> |
| <body class="bg-gray-50 p-8"> |
| <div class="max-w-6xl mx-auto"> |
| <h1 class="text-3xl font-bold text-gray-800 mb-6">Dvid Android Project Structure</h1> |
| |
| <div class="bg-white rounded-lg shadow-md p-6 mb-8"> |
| <h2 class="text-xl font-semibold text-gray-700 mb-4">Project Specifications</h2> |
| <ul class="list-disc pl-6 text-gray-600"> |
| <li><span class="font-medium">Project Name:</span> Dvid</li> |
| <li><span class="font-medium">Package Name:</span> com.example.dvid</li> |
| <li><span class="font-medium">Minimum SDK:</span> 21 (Android 5.0 Lollipop)</li> |
| <li><span class="font-medium">Language:</span> Java</li> |
| <li><span class="font-medium">Features:</span> Whisper.cpp with NDK support</li> |
| </ul> |
| </div> |
|
|
| <h2 class="section-title text-2xl">Complete Project Structure</h2> |
| <div class="file-tree"> |
| <div class="folder">Dvid/</div> |
| <div class="file">.gitignore</div> |
| <div class="file">build.gradle (Project-level)</div> |
| <div class="file">settings.gradle</div> |
| <div class="file">gradle.properties</div> |
| |
| <div class="folder">app/</div> |
| <div class="file">build.gradle (Module-level)</div> |
| <div class="file">proguard-rules.pro</div> |
| |
| <div class="folder">src/</div> |
| <div class="folder">main/</div> |
| <div class="file">AndroidManifest.xml</div> |
| |
| <div class="folder">java/com/example/dvid/</div> |
| <div class="file">MainActivity.java</div> |
| <div class="file">WhisperJNI.java (JNI interface)</div> |
| |
| <div class="folder">jni/</div> |
| <div class="file">Android.mk</div> |
| <div class="file">Application.mk</div> |
| <div class="file">CMakeLists.txt</div> |
| <div class="folder">whisper.cpp/ (full whisper.cpp library)</div> |
| |
| <div class="folder">assets/</div> |
| <div class="file">ggml-base.en.bin (Whisper model)</div> |
| |
| <div class="folder">res/</div> |
| <div class="folder">drawable/</div> |
| <div class="file">ic_launcher.png (app icon)</div> |
| <div class="file">ic_mic.png (microphone icon)</div> |
| |
| <div class="folder">layout/</div> |
| <div class="file">activity_main.xml</div> |
| |
| <div class="folder">values/</div> |
| <div class="file">strings.xml</div> |
| <div class="file">colors.xml</div> |
| <div class="file">styles.xml</div> |
| |
| <div class="folder">gradle/</div> |
| <div class="folder">wrapper/</div> |
| <div class="file">gradle-wrapper.jar</div> |
| <div class="file">gradle-wrapper.properties</div> |
| </div> |
|
|
| <h2 class="section-title text-2xl">Key File Contents</h2> |
|
|
| <div class="mb-8"> |
| <h3 class="text-lg font-medium text-gray-700 mb-2">app/build.gradle</h3> |
| <div class="file-content"> |
| <pre> |
| apply plugin: 'com.android.application' |
|
|
| android { |
| compileSdkVersion 33 |
| defaultConfig { |
| applicationId "com.example.dvid" |
| minSdkVersion 21 |
| targetSdkVersion 33 |
| versionCode 1 |
| versionName "1.0" |
| testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |
| externalNativeBuild { |
| cmake { |
| cppFlags "-std=c++17" |
| arguments "-DANDROID_STL=c++_shared" |
| } |
| } |
| ndk { |
| abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' |
| } |
| } |
| buildTypes { |
| release { |
| minifyEnabled false |
| proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |
| } |
| } |
| externalNativeBuild { |
| cmake { |
| path "src/main/jni/CMakeLists.txt" |
| version "3.22.1" |
| } |
| } |
| sourceSets { |
| main { |
| assets.srcDirs = ['src/main/assets'] |
| jniLibs.srcDirs = ['src/main/jniLibs'] |
| } |
| } |
| } |
|
|
| dependencies { |
| implementation fileTree(dir: 'libs', include: ['*.jar']) |
| implementation 'androidx.appcompat:appcompat:1.6.1' |
| implementation 'com.google.android.material:material:1.9.0' |
| implementation 'androidx.constraintlayout:constraintlayout:2.1.4' |
| testImplementation 'junit:junit:4.13.2' |
| androidTestImplementation 'androidx.test.ext:junit:1.1.5' |
| androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' |
| }</pre> |
| </div> |
| </div> |
|
|
| <div class="mb-8"> |
| <h3 class="text-lg font-medium text-gray-700 mb-2">AndroidManifest.xml</h3> |
| <div class="file-content"> |
| <pre> |
| <?xml version="1.0" encoding="utf-8"?> |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
| package="com.example.dvid"> |
|
|
| <uses-permission android:name="android.permission.RECORD_AUDIO" /> |
| <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
| <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |
|
|
| <application |
| android:allowBackup="true" |
| android:icon="@drawable/ic_launcher" |
| android:label="@string/app_name" |
| android:roundIcon="@drawable/ic_launcher_round" |
| android:supportsRtl="true" |
| android:theme="@style/AppTheme"> |
| <activity android:name=".MainActivity"> |
| <intent-filter> |
| <action android:name="android.intent.action.MAIN" /> |
| <category android:name="android.intent.category.LAUNCHER" /> |
|
|
| </html> |