Use app startup

pull/605/head
jhengazuki 5 months ago
parent eb21bb6ecd
commit e7a6011d00
  1. 2
      app/build.gradle
  2. 10
      app/src/main/AndroidManifest.xml
  3. 129
      app/src/main/java/com/fongmi/android/tv/App.java
  4. 40
      app/src/main/java/com/fongmi/android/tv/Startup.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/api/loader/PyLoader.java
  6. 1
      catvod/build.gradle
  7. 13
      catvod/src/main/AndroidManifest.xml
  8. 25
      catvod/src/main/java/com/github/catvod/Startup.java
  9. 13
      chaquo/src/main/AndroidManifest.xml
  10. 14
      chaquo/src/main/java/com/fongmi/chaquo/Loader.java
  11. 28
      chaquo/src/main/java/com/fongmi/chaquo/Startup.java
  12. 13
      quickjs/src/main/AndroidManifest.xml
  13. 54
      quickjs/src/main/java/com/fongmi/quickjs/Provider.java
  14. 27
      quickjs/src/main/java/com/fongmi/quickjs/Startup.java

@ -92,7 +92,7 @@ dependencies {
implementation project(':chaquo')
implementation project(':quickjs')
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.core:core-splashscreen:1.2.0'
implementation 'androidx.media:media:1.7.1'
implementation 'androidx.palette:palette:1.0.0'
implementation 'androidx.room:room-runtime:2.8.3'

@ -58,9 +58,13 @@
</provider>
<provider
android:name="com.fongmi.quickjs.Provider"
android:authorities="com.fongmi.quickjs.provider"
android:exported="false" />
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
<meta-data
android:name="com.fongmi.android.tv.Startup"
android:value="androidx.startup" />
</provider>
<activity
android:name=".ui.activity.CrashActivity"

@ -2,7 +2,6 @@ package com.fongmi.android.tv;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
@ -12,30 +11,17 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.os.HandlerCompat;
import com.fongmi.android.tv.event.EventIndex;
import com.fongmi.android.tv.ui.activity.CrashActivity;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.hook.Chromium;
import com.fongmi.hook.Hook;
import com.github.catvod.Init;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.OkHttp;
import com.google.gson.Gson;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.LogAdapter;
import com.orhanobut.logger.Logger;
import com.orhanobut.logger.PrettyFormatStrategy;
import org.greenrobot.eventbus.EventBus;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import cat.ereza.customactivityoncrash.config.CaocConfig;
public class App extends Application {
public class App extends Application implements Application.ActivityLifecycleCallbacks {
private final ExecutorService searchExecutor;
private final ExecutorService executor;
@ -56,6 +42,53 @@ public class App extends Application {
handler = HandlerCompat.createAsync(Looper.getMainLooper());
}
@Override
public void onCreate() {
super.onCreate();
Notify.createChannel();
registerActivityLifecycleCallbacks(this);
}
@Override
public PackageManager getPackageManager() {
return hook != null ? hook : getBaseContext().getPackageManager();
}
@Override
public String getPackageName() {
return hook != null ? hook.getPackageName() : sniff && Chromium.find() ? Chromium.PKG : getBaseContext().getPackageName();
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
if (activity != activity()) setActivity(activity);
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
if (activity == activity()) setActivity(null);
}
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
}
public static App get() {
return instance;
}
@ -116,70 +149,4 @@ public class App extends Application {
private void setActivity(Activity activity) {
this.activity = activity;
}
private LogAdapter getLogAdapter() {
return new AndroidLogAdapter(PrettyFormatStrategy.newBuilder().methodCount(0).showThreadInfo(false).tag("TV").build()) {
@Override
public boolean isLoggable(int priority, String tag) {
return true;
}
};
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
Init.set(base);
}
@Override
public void onCreate() {
super.onCreate();
Notify.createChannel();
Logger.addLogAdapter(getLogAdapter());
OkHttp.dns().setDoh(Doh.objectFrom(Setting.getDoh()));
EventBus.builder().addIndex(new EventIndex()).installDefaultEventBus();
CaocConfig.Builder.create().trackActivities(true).backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT).errorActivity(CrashActivity.class).apply();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityResumed(@NonNull Activity activity) {
if (activity != activity()) setActivity(activity);
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
if (activity == activity()) setActivity(null);
}
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
});
}
@Override
public PackageManager getPackageManager() {
return hook != null ? hook : getBaseContext().getPackageManager();
}
@Override
public String getPackageName() {
return hook != null ? hook.getPackageName() : sniff && Chromium.find() ? Chromium.PKG : getBaseContext().getPackageName();
}
}

@ -0,0 +1,40 @@
package com.fongmi.android.tv;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.startup.Initializer;
import com.fongmi.android.tv.event.EventIndex;
import com.fongmi.android.tv.ui.activity.CrashActivity;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.OkHttp;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import com.orhanobut.logger.PrettyFormatStrategy;
import org.greenrobot.eventbus.EventBus;
import java.util.Collections;
import java.util.List;
import cat.ereza.customactivityoncrash.config.CaocConfig;
public class Startup implements Initializer<Void> {
@NonNull
@Override
public Void create(@NonNull Context context) {
CaocConfig.Builder.create().trackActivities(true).backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT).errorActivity(CrashActivity.class).apply();
Logger.addLogAdapter(new AndroidLogAdapter(PrettyFormatStrategy.newBuilder().methodCount(0).showThreadInfo(false).tag("TV").build()));
EventBus.builder().addIndex(new EventIndex()).installDefaultEventBus();
OkHttp.dns().setDoh(Doh.objectFrom(Setting.getDoh()));
return null;
}
@NonNull
@Override
public List<Class<? extends Initializer<?>>> dependencies() {
return Collections.emptyList();
}
}

@ -31,7 +31,7 @@ public class PyLoader {
public Spider getSpider(String key, String api, String ext) {
try {
if (spiders.containsKey(key)) return spiders.get(key);
Spider spider = loader.spider(App.get(), api);
Spider spider = loader.spider(api);
spider.init(App.get(), ext);
spiders.put(key, spider);
return spider;

@ -21,6 +21,7 @@ android {
dependencies {
api 'androidx.annotation:annotation:1.9.1'
api 'androidx.preference:preference:1.2.1'
api 'androidx.startup:startup-runtime:1.2.0'
api 'com.github.thegrizzlylabs:sardine-android:0.9'
api 'com.google.code.gson:gson:' + gsonVersion
api 'com.google.zxing:core:3.5.3'

@ -1,2 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
<meta-data
android:name="com.github.catvod.Startup"
android:value="androidx.startup" />
</provider>
</application>
</manifest>

@ -0,0 +1,25 @@
package com.github.catvod;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.startup.Initializer;
import java.util.Collections;
import java.util.List;
public class Startup implements Initializer<Void> {
@NonNull
@Override
public Void create(@NonNull Context context) {
Init.set(context);
return null;
}
@NonNull
@Override
public List<Class<? extends Initializer<?>>> dependencies() {
return Collections.emptyList();
}
}

@ -1,2 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
<meta-data
android:name="com.fongmi.chaquo.Startup"
android:value="androidx.startup" />
</provider>
</application>
</manifest>

@ -1,27 +1,21 @@
package com.fongmi.chaquo;
import android.content.Context;
import androidx.annotation.Keep;
import com.chaquo.python.PyObject;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;
import com.github.catvod.utils.Path;
public class Loader {
private PyObject app;
private final PyObject app;
@Keep
private void init(Context context) {
if (!Python.isStarted()) Python.start(new AndroidPlatform(context));
app = Python.getInstance().getModule("app");
public Loader() {
this.app = Python.getInstance().getModule("app");
}
@Keep
public Spider spider(Context context, String api) {
if (app == null) init(context);
public Spider spider(String api) {
PyObject obj = app.callAttr("spider", Path.py().getAbsolutePath(), api);
return new Spider(app, obj, api);
}

@ -0,0 +1,28 @@
package com.fongmi.chaquo;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.startup.Initializer;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;
import java.util.Collections;
import java.util.List;
public class Startup implements Initializer<Void> {
@NonNull
@Override
public Void create(@NonNull Context context) {
Python.start(new AndroidPlatform(context));
return null;
}
@NonNull
@Override
public List<Class<? extends Initializer<?>>> dependencies() {
return Collections.emptyList();
}
}

@ -1,2 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
<meta-data
android:name="com.fongmi.quickjs.Startup"
android:value="androidx.startup" />
</provider>
</application>
</manifest>

@ -1,54 +0,0 @@
package com.fongmi.quickjs;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.whl.quickjs.android.QuickJSLoader;
public class Provider extends ContentProvider {
static {
try {
QuickJSLoader.init();
} catch (Throwable ignored) {
}
}
@Override
public boolean onCreate() {
return true;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
return null;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
}

@ -0,0 +1,27 @@
package com.fongmi.quickjs;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.startup.Initializer;
import com.whl.quickjs.android.QuickJSLoader;
import java.util.Collections;
import java.util.List;
public class Startup implements Initializer<Void> {
@NonNull
@Override
public Void create(@NonNull Context context) {
QuickJSLoader.init();
return null;
}
@NonNull
@Override
public List<Class<? extends Initializer<?>>> dependencies() {
return Collections.emptyList();
}
}
Loading…
Cancel
Save