api(runtime): runtime.requestPermissions()
This commit is contained in:
@@ -13,6 +13,11 @@
|
|||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 非Auto.js运行必需,不会主动申请,某些脚本可以自行申请-->
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||||
|
|
||||||
<!-- Ad SDK Permissions -->
|
<!-- Ad SDK Permissions -->
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,11 @@ import android.view.Menu;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
import com.stardust.app.OnActivityResultDelegate;
|
import com.stardust.app.OnActivityResultDelegate;
|
||||||
|
import com.stardust.autojs.core.permission.OnRequestPermissionsResultCallback;
|
||||||
|
import com.stardust.autojs.core.permission.PermissionRequestProxyActivity;
|
||||||
|
import com.stardust.autojs.core.permission.RequestPermissionCallbacks;
|
||||||
import com.stardust.pio.PFiles;
|
import com.stardust.pio.PFiles;
|
||||||
|
|
||||||
import org.autojs.autojs.R;
|
import org.autojs.autojs.R;
|
||||||
import org.autojs.autojs.storage.file.TmpScriptFiles;
|
import org.autojs.autojs.storage.file.TmpScriptFiles;
|
||||||
import org.autojs.autojs.ui.BaseActivity;
|
import org.autojs.autojs.ui.BaseActivity;
|
||||||
@@ -35,7 +39,7 @@ import static org.autojs.autojs.ui.edit.EditorView.EXTRA_READ_ONLY;
|
|||||||
* Created by Stardust on 2017/1/29.
|
* Created by Stardust on 2017/1/29.
|
||||||
*/
|
*/
|
||||||
@EActivity(R.layout.activity_edit)
|
@EActivity(R.layout.activity_edit)
|
||||||
public class EditActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost {
|
public class EditActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost, PermissionRequestProxyActivity {
|
||||||
|
|
||||||
private OnActivityResultDelegate.Mediator mMediator = new OnActivityResultDelegate.Mediator();
|
private OnActivityResultDelegate.Mediator mMediator = new OnActivityResultDelegate.Mediator();
|
||||||
|
|
||||||
@@ -44,6 +48,7 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
|
|
||||||
|
|
||||||
private EditorMenu mEditorMenu;
|
private EditorMenu mEditorMenu;
|
||||||
|
private RequestPermissionCallbacks mRequestPermissionCallbacks = new RequestPermissionCallbacks();
|
||||||
|
|
||||||
public static void editFile(Context context, String path) {
|
public static void editFile(Context context, String path) {
|
||||||
editFile(context, null, path);
|
editFile(context, null, path);
|
||||||
@@ -192,4 +197,19 @@ public class EditActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addRequestPermissionsCallback(OnRequestPermissionsResultCallback callback) {
|
||||||
|
mRequestPermissionCallbacks.addCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeRequestPermissionsCallback(OnRequestPermissionsResultCallback callback) {
|
||||||
|
return mRequestPermissionCallbacks.removeCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
mRequestPermissionCallbacks.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,12 @@ import android.view.View;
|
|||||||
|
|
||||||
import com.stardust.app.FragmentPagerAdapterBuilder;
|
import com.stardust.app.FragmentPagerAdapterBuilder;
|
||||||
import com.stardust.app.OnActivityResultDelegate;
|
import com.stardust.app.OnActivityResultDelegate;
|
||||||
|
import com.stardust.autojs.core.permission.OnRequestPermissionsResultCallback;
|
||||||
|
import com.stardust.autojs.core.permission.PermissionRequestProxyActivity;
|
||||||
|
import com.stardust.autojs.core.permission.RequestPermissionCallbacks;
|
||||||
import com.stardust.enhancedfloaty.FloatyService;
|
import com.stardust.enhancedfloaty.FloatyService;
|
||||||
import com.stardust.pio.PFiles;
|
import com.stardust.pio.PFiles;
|
||||||
|
|
||||||
import org.autojs.autojs.BuildConfig;
|
import org.autojs.autojs.BuildConfig;
|
||||||
import org.autojs.autojs.Pref;
|
import org.autojs.autojs.Pref;
|
||||||
import org.autojs.autojs.R;
|
import org.autojs.autojs.R;
|
||||||
@@ -42,8 +46,11 @@ import org.autojs.autojs.ui.settings.SettingsActivity_;
|
|||||||
import org.autojs.autojs.ui.update.VersionGuard;
|
import org.autojs.autojs.ui.update.VersionGuard;
|
||||||
import org.autojs.autojs.ui.widget.CommonMarkdownView;
|
import org.autojs.autojs.ui.widget.CommonMarkdownView;
|
||||||
import org.autojs.autojs.ui.widget.SearchViewItem;
|
import org.autojs.autojs.ui.widget.SearchViewItem;
|
||||||
|
|
||||||
import com.stardust.theme.ThemeColorManager;
|
import com.stardust.theme.ThemeColorManager;
|
||||||
|
|
||||||
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
|
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||||
|
|
||||||
import com.stardust.util.BackPressedHandler;
|
import com.stardust.util.BackPressedHandler;
|
||||||
import com.stardust.util.DeveloperUtils;
|
import com.stardust.util.DeveloperUtils;
|
||||||
import com.stardust.util.DrawerAutoClose;
|
import com.stardust.util.DrawerAutoClose;
|
||||||
@@ -58,7 +65,8 @@ import org.greenrobot.eventbus.Subscribe;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
@EActivity(R.layout.activity_main)
|
@EActivity(R.layout.activity_main)
|
||||||
public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost, BackPressedHandler.HostActivity {
|
public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost, BackPressedHandler.HostActivity, PermissionRequestProxyActivity {
|
||||||
|
|
||||||
|
|
||||||
public static class DrawerOpenEvent {
|
public static class DrawerOpenEvent {
|
||||||
static DrawerOpenEvent SINGLETON = new DrawerOpenEvent();
|
static DrawerOpenEvent SINGLETON = new DrawerOpenEvent();
|
||||||
@@ -77,6 +85,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
|
|
||||||
private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter;
|
private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter;
|
||||||
private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator();
|
private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator();
|
||||||
|
private RequestPermissionCallbacks mRequestPermissionCallbacks = new RequestPermissionCallbacks();
|
||||||
private VersionGuard mVersionGuard;
|
private VersionGuard mVersionGuard;
|
||||||
private BackPressedHandler.Observer mBackPressObserver = new BackPressedHandler.Observer();
|
private BackPressedHandler.Observer mBackPressObserver = new BackPressedHandler.Observer();
|
||||||
private SearchViewItem mSearchViewItem;
|
private SearchViewItem mSearchViewItem;
|
||||||
@@ -228,6 +237,9 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
if (mRequestPermissionCallbacks.onRequestPermissionsResult(requestCode, permissions, grantResults)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (getGrantResult(Manifest.permission.READ_EXTERNAL_STORAGE, permissions, grantResults) == PackageManager.PERMISSION_GRANTED) {
|
if (getGrantResult(Manifest.permission.READ_EXTERNAL_STORAGE, permissions, grantResults) == PackageManager.PERMISSION_GRANTED) {
|
||||||
StorageFileProvider.getDefault().notifyStoragePermissionGranted();
|
StorageFileProvider.getDefault().notifyStoragePermissionGranted();
|
||||||
}
|
}
|
||||||
@@ -275,6 +287,17 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addRequestPermissionsCallback(OnRequestPermissionsResultCallback callback) {
|
||||||
|
mRequestPermissionCallbacks.addCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeRequestPermissionsCallback(OnRequestPermissionsResultCallback callback) {
|
||||||
|
return mRequestPermissionCallbacks.removeCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BackPressedHandler.Observer getBackPressedObserver() {
|
public BackPressedHandler.Observer getBackPressedObserver() {
|
||||||
return mBackPressObserver;
|
return mBackPressObserver;
|
||||||
@@ -289,6 +312,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
if (item.getItemId() == R.id.action_log) {
|
if (item.getItemId() == R.id.action_log) {
|
||||||
|
|||||||
@@ -17,6 +17,12 @@
|
|||||||
android:theme="@style/AppTheme"/>
|
android:theme="@style/AppTheme"/>
|
||||||
|
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name="com.stardust.autojs.core.permission.PermissionRequestActivity"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:taskAffinity="com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity"
|
||||||
|
android:theme="@style/AppTheme.Transparent"/>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="com.stardust.autojs.core.image.capture.ScreenCaptureRequestActivity"
|
android:name="com.stardust.autojs.core.image.capture.ScreenCaptureRequestActivity"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.stardust.autojs.core.permission;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
public interface OnRequestPermissionsResultCallback {
|
||||||
|
|
||||||
|
void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults);
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.stardust.autojs.core.permission;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.annotation.RequiresApi;
|
||||||
|
|
||||||
|
public class PermissionRequestActivity extends Activity {
|
||||||
|
|
||||||
|
public static final String EXTRA_PERMISSIONS = "permissions";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
String[] permissions = getIntent().getStringArrayExtra(EXTRA_PERMISSIONS);
|
||||||
|
if (permissions == null || permissions.length == 0) {
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
requestPermissions(permissions, Permissions.REQUEST_CODE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.stardust.autojs.core.permission;
|
||||||
|
|
||||||
|
import android.os.Build;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.RequiresApi;
|
||||||
|
|
||||||
|
public interface PermissionRequestProxyActivity {
|
||||||
|
|
||||||
|
void addRequestPermissionsCallback(OnRequestPermissionsResultCallback callback);
|
||||||
|
|
||||||
|
boolean removeRequestPermissionsCallback(OnRequestPermissionsResultCallback callback);
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
|
void requestPermissions(@NonNull String[] permissions, int requestCode);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package com.stardust.autojs.core.permission;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.support.annotation.RequiresApi;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||||
|
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||||
|
|
||||||
|
public class Permissions {
|
||||||
|
|
||||||
|
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
||||||
|
|
||||||
|
static final int REQUEST_CODE = 18777;
|
||||||
|
|
||||||
|
public static String[] getPermissionsNeedToRequest(Context context, String[] permissions) {
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||||
|
return EMPTY_STRING_ARRAY;
|
||||||
|
}
|
||||||
|
ArrayList<String> list = new ArrayList<>();
|
||||||
|
for (String permission : permissions) {
|
||||||
|
if (!permission.startsWith("android.permission.")) {
|
||||||
|
permission = "android.permission." + permission.toUpperCase();
|
||||||
|
}
|
||||||
|
if (context.checkSelfPermission(permission) == PERMISSION_DENIED) {
|
||||||
|
list.add(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list.toArray(EMPTY_STRING_ARRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
|
public static void requestPermissions(PermissionRequestProxyActivity activity, String[] permissions, OnRequestPermissionsResultCallback callback) {
|
||||||
|
if (callback != null) {
|
||||||
|
activity.addRequestPermissionsCallback((code, p, grantResults) -> {
|
||||||
|
activity.removeRequestPermissionsCallback(callback);
|
||||||
|
callback.onRequestPermissionsResult(code, p, grantResults);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
activity.requestPermissions(permissions, REQUEST_CODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
|
public static void requestPermissions(Context context, String[] permissions) {
|
||||||
|
context.startActivity(new Intent(context, PermissionRequestActivity.class)
|
||||||
|
.putExtra(PermissionRequestActivity.EXTRA_PERMISSIONS, permissions)
|
||||||
|
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.stardust.autojs.core.permission;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class RequestPermissionCallbacks {
|
||||||
|
|
||||||
|
private List<OnRequestPermissionsResultCallback> mCallbacks = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
public void addCallback(OnRequestPermissionsResultCallback callback) {
|
||||||
|
mCallbacks.add(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean removeCallback(OnRequestPermissionsResultCallback callback) {
|
||||||
|
return mCallbacks.remove(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
|
if (mCallbacks.size() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (OnRequestPermissionsResultCallback callback : mCallbacks) {
|
||||||
|
callback.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.stardust.autojs.runtime;
|
package com.stardust.autojs.runtime;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
@@ -10,6 +12,8 @@ import com.stardust.autojs.ScriptEngineService;
|
|||||||
import com.stardust.autojs.annotation.ScriptVariable;
|
import com.stardust.autojs.annotation.ScriptVariable;
|
||||||
import com.stardust.autojs.core.accessibility.AccessibilityBridge;
|
import com.stardust.autojs.core.accessibility.AccessibilityBridge;
|
||||||
import com.stardust.autojs.core.image.Colors;
|
import com.stardust.autojs.core.image.Colors;
|
||||||
|
import com.stardust.autojs.core.permission.PermissionRequestProxyActivity;
|
||||||
|
import com.stardust.autojs.core.permission.Permissions;
|
||||||
import com.stardust.autojs.rhino.AndroidClassLoader;
|
import com.stardust.autojs.rhino.AndroidClassLoader;
|
||||||
import com.stardust.autojs.runtime.api.AbstractShell;
|
import com.stardust.autojs.runtime.api.AbstractShell;
|
||||||
import com.stardust.autojs.runtime.api.AppUtils;
|
import com.stardust.autojs.runtime.api.AppUtils;
|
||||||
@@ -49,9 +53,13 @@ import org.mozilla.javascript.ContextFactory;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Stardust on 2017/1/27.
|
* Created by Stardust on 2017/1/27.
|
||||||
@@ -305,6 +313,17 @@ public class ScriptRuntime {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void requestPermissions(String[] permissions) {
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Context context = uiHandler.getContext();
|
||||||
|
permissions = Permissions.getPermissionsNeedToRequest(context, permissions);
|
||||||
|
if (permissions.length == 0)
|
||||||
|
return;
|
||||||
|
Permissions.requestPermissions(context, permissions);
|
||||||
|
}
|
||||||
|
|
||||||
public void loadJar(String path) {
|
public void loadJar(String path) {
|
||||||
try {
|
try {
|
||||||
((AndroidClassLoader) ContextFactory.getGlobal().getApplicationClassLoader()).loadJar(new File(path));
|
((AndroidClassLoader) ContextFactory.getGlobal().getApplicationClassLoader()).loadJar(new File(path));
|
||||||
|
|||||||
@@ -3,13 +3,22 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
package="com.stardust.auojs.inrt">
|
package="com.stardust.auojs.inrt">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
|
||||||
|
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 非Auto.js运行必需,不会主动申请,某些脚本可以自行申请-->
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||||
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".App"
|
android:name=".App"
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
|
|||||||
Reference in New Issue
Block a user