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

#!/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."