You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
6.0 KiB
208 lines
6.0 KiB
#!/bin/bash
|
|
|
|
echo "🚀 Creating Valid HikeMap APK (Alternative Method)"
|
|
echo "=================================================="
|
|
|
|
# Create temp directory for APK build
|
|
TEMP_DIR="/tmp/hikemap-apk-build"
|
|
rm -rf "$TEMP_DIR"
|
|
mkdir -p "$TEMP_DIR"
|
|
|
|
cd "$TEMP_DIR"
|
|
|
|
# Create basic Android project structure
|
|
echo "📁 Creating Android project structure..."
|
|
mkdir -p app/src/main/java/org/duckdns/bibbit/hikemap
|
|
mkdir -p app/src/main/res/values
|
|
mkdir -p app/src/main/res/drawable
|
|
mkdir -p app/src/main/assets
|
|
|
|
# Create MainActivity.java
|
|
cat > app/src/main/java/org/duckdns/bibbit/hikemap/MainActivity.java <<'EOF'
|
|
package org.duckdns.bibbit.hikemap;
|
|
|
|
import android.app.Activity;
|
|
import android.os.Bundle;
|
|
import android.webkit.WebSettings;
|
|
import android.webkit.WebView;
|
|
import android.webkit.WebViewClient;
|
|
import android.webkit.GeolocationPermissions;
|
|
import android.webkit.WebChromeClient;
|
|
import android.Manifest;
|
|
import android.content.pm.PackageManager;
|
|
import android.os.Build;
|
|
|
|
public class MainActivity extends Activity {
|
|
private WebView webView;
|
|
private static final int LOCATION_PERMISSION_REQUEST = 1;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
webView = new WebView(this);
|
|
setContentView(webView);
|
|
|
|
// Request location permission if needed
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
requestPermissions(new String[]{
|
|
Manifest.permission.ACCESS_FINE_LOCATION,
|
|
Manifest.permission.ACCESS_COARSE_LOCATION
|
|
}, LOCATION_PERMISSION_REQUEST);
|
|
}
|
|
}
|
|
|
|
WebSettings webSettings = webView.getSettings();
|
|
webSettings.setJavaScriptEnabled(true);
|
|
webSettings.setDomStorageEnabled(true);
|
|
webSettings.setDatabaseEnabled(true);
|
|
webSettings.setGeolocationEnabled(true);
|
|
webSettings.setLoadWithOverviewMode(true);
|
|
webSettings.setUseWideViewPort(true);
|
|
webSettings.setAllowFileAccess(true);
|
|
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
|
|
|
|
webView.setWebViewClient(new WebViewClient() {
|
|
@Override
|
|
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
|
if (url.startsWith("https://maps.bibbit.duckdns.org")) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
|
|
webView.setWebChromeClient(new WebChromeClient() {
|
|
@Override
|
|
public void onGeolocationPermissionsShowPrompt(String origin,
|
|
GeolocationPermissions.Callback callback) {
|
|
callback.invoke(origin, true, false);
|
|
}
|
|
});
|
|
|
|
webView.loadUrl("https://maps.bibbit.duckdns.org");
|
|
}
|
|
|
|
@Override
|
|
public void onBackPressed() {
|
|
if (webView.canGoBack()) {
|
|
webView.goBack();
|
|
} else {
|
|
super.onBackPressed();
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
|
|
# Create AndroidManifest.xml
|
|
cat > app/src/main/AndroidManifest.xml <<'EOF'
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
package="org.duckdns.bibbit.hikemap">
|
|
|
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
<uses-permission android:name="android.permission.VIBRATE" />
|
|
|
|
<application
|
|
android:allowBackup="true"
|
|
android:icon="@drawable/ic_launcher"
|
|
android:label="@string/app_name"
|
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
|
android:usesCleartextTraffic="false">
|
|
|
|
<activity
|
|
android:name=".MainActivity"
|
|
android:configChanges="orientation|screenSize|keyboardHidden"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
</intent-filter>
|
|
</activity>
|
|
</application>
|
|
</manifest>
|
|
EOF
|
|
|
|
# Create strings.xml
|
|
cat > app/src/main/res/values/strings.xml <<'EOF'
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<resources>
|
|
<string name="app_name">HikeMap</string>
|
|
</resources>
|
|
EOF
|
|
|
|
# Copy icon if available
|
|
if [ -f /home/frigate/HikeMap/icon-192x192.png ]; then
|
|
cp /home/frigate/HikeMap/icon-192x192.png app/src/main/res/drawable/ic_launcher.png
|
|
else
|
|
# Create a simple default icon
|
|
echo "Creating default icon..."
|
|
convert -size 192x192 xc:green app/src/main/res/drawable/ic_launcher.png 2>/dev/null || true
|
|
fi
|
|
|
|
# Create build.gradle for app module
|
|
cat > app/build.gradle <<'EOF'
|
|
apply plugin: 'com.android.application'
|
|
|
|
android {
|
|
compileSdkVersion 33
|
|
defaultConfig {
|
|
applicationId "org.duckdns.bibbit.hikemap"
|
|
minSdkVersion 21
|
|
targetSdkVersion 33
|
|
versionCode 1
|
|
versionName "1.0.0"
|
|
}
|
|
buildTypes {
|
|
release {
|
|
minifyEnabled false
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
}
|
|
EOF
|
|
|
|
# Create root build.gradle
|
|
cat > build.gradle <<'EOF'
|
|
buildscript {
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
}
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:7.4.2'
|
|
}
|
|
}
|
|
|
|
allprojects {
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
}
|
|
}
|
|
EOF
|
|
|
|
# Create settings.gradle
|
|
cat > settings.gradle <<'EOF'
|
|
include ':app'
|
|
EOF
|
|
|
|
# Create gradle.properties
|
|
cat > gradle.properties <<'EOF'
|
|
android.useAndroidX=false
|
|
android.enableJetifier=false
|
|
EOF
|
|
|
|
echo "✅ Android project structure created"
|
|
echo ""
|
|
echo "📝 Note: To build this APK, you need:"
|
|
echo " 1. Android SDK installed"
|
|
echo " 2. Run: ./gradlew assembleRelease"
|
|
echo " 3. Sign the APK with jarsigner or apksigner"
|
|
echo ""
|
|
echo "The Docker build is still running in the background and will produce a better APK."
|