fix: exposed uri error

This commit is contained in:
hyb1996
2018-10-10 14:49:59 +08:00
parent 6cebca179c
commit cce09209a3
17 changed files with 125 additions and 47 deletions

Binary file not shown.

View File

@@ -70,6 +70,7 @@ android {
repositories { repositories {
flatDir { flatDir {
dirs 'libs' dirs 'libs'

View File

@@ -69,7 +69,7 @@
</activity> </activity>
<provider <provider
android:name="android.support.v4.content.FileProvider" android:name=".external.fileprovider.AppFileProvider"
android:authorities="org.autojs.autojs.fileprovider" android:authorities="org.autojs.autojs.fileprovider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true"> android:grantUriPermissions="true">

View File

@@ -0,0 +1,16 @@
package org.autojs.autojs.external.fileprovider;
import android.content.Context;
import android.net.Uri;
import android.support.v4.content.FileProvider;
import java.io.File;
public class AppFileProvider extends FileProvider {
public static final String AUTHORITY = "org.autojs.autojs.fileprovider";
public static Uri getUriForFile(Context context, File file){
return FileProvider.getUriForFile(context, AUTHORITY, file);
}
}

View File

@@ -12,11 +12,13 @@ import com.stardust.autojs.execution.ScriptExecutionListener;
import com.stardust.autojs.execution.SimpleScriptExecutionListener; import com.stardust.autojs.execution.SimpleScriptExecutionListener;
import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.script.ScriptSource; import com.stardust.autojs.script.ScriptSource;
import com.stardust.util.IntentUtil;
import org.autojs.autojs.Pref; import org.autojs.autojs.Pref;
import org.autojs.autojs.R; import org.autojs.autojs.R;
import org.autojs.autojs.autojs.AutoJs; import org.autojs.autojs.autojs.AutoJs;
import org.autojs.autojs.external.ScriptIntents; import org.autojs.autojs.external.ScriptIntents;
import org.autojs.autojs.external.fileprovider.AppFileProvider;
import org.autojs.autojs.external.shortcut.Shortcut; import org.autojs.autojs.external.shortcut.Shortcut;
import org.autojs.autojs.external.shortcut.ShortcutActivity; import org.autojs.autojs.external.shortcut.ShortcutActivity;
import org.autojs.autojs.ui.edit.EditActivity; import org.autojs.autojs.ui.edit.EditActivity;
@@ -71,8 +73,7 @@ public class Scripts {
public static void openByOtherApps(String path) { public static void openByOtherApps(String path) {
Uri uri = Uri.parse("file://" + path); IntentUtil.viewFile(GlobalAppContext.get(), path, "text/plain", AppFileProvider.AUTHORITY);
GlobalAppContext.get().startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(uri, "text/plain").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} }
public static void openByOtherApps(File file) { public static void openByOtherApps(File file) {
@@ -111,8 +112,8 @@ public class Scripts {
public static ScriptExecution run(ScriptSource source) { public static ScriptExecution run(ScriptSource source) {
try { try {
return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig()
.executePath(Pref.getScriptDirPath()) .executePath(Pref.getScriptDirPath())
.requirePath(Pref.getScriptDirPath())); .requirePath(Pref.getScriptDirPath()));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
Toast.makeText(GlobalAppContext.get(), e.getMessage(), Toast.LENGTH_LONG).show(); Toast.makeText(GlobalAppContext.get(), e.getMessage(), Toast.LENGTH_LONG).show();

View File

@@ -5,10 +5,8 @@ import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v7.widget.RecyclerView;
import com.stardust.app.GlobalAppContext; import com.stardust.app.GlobalAppContext;
import com.stardust.util.BackPressedHandler;
import com.stardust.util.IntentUtil; import com.stardust.util.IntentUtil;
import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.AfterViews;
@@ -16,6 +14,7 @@ import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.ViewById;
import org.autojs.autojs.Pref; import org.autojs.autojs.Pref;
import org.autojs.autojs.R; import org.autojs.autojs.R;
import org.autojs.autojs.external.fileprovider.AppFileProvider;
import org.autojs.autojs.model.explorer.ExplorerDirPage; import org.autojs.autojs.model.explorer.ExplorerDirPage;
import org.autojs.autojs.model.explorer.Explorers; import org.autojs.autojs.model.explorer.Explorers;
import org.autojs.autojs.model.script.Scripts; import org.autojs.autojs.model.script.Scripts;
@@ -28,7 +27,6 @@ import org.autojs.autojs.ui.main.ViewPagerFragment;
import org.autojs.autojs.ui.project.ProjectConfigActivity; import org.autojs.autojs.ui.project.ProjectConfigActivity;
import org.autojs.autojs.ui.project.ProjectConfigActivity_; import org.autojs.autojs.ui.project.ProjectConfigActivity_;
import org.autojs.autojs.ui.viewmodel.ExplorerItemList; import org.autojs.autojs.ui.viewmodel.ExplorerItemList;
import org.autojs.autojs.ui.widget.ExpandableRecyclerView;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
@@ -66,7 +64,7 @@ public class MyScriptListFragment extends ViewPagerFragment implements FloatingA
if (item.isEditable()) { if (item.isEditable()) {
Scripts.edit(item.toScriptFile()); Scripts.edit(item.toScriptFile());
} else { } else {
IntentUtil.viewFile(GlobalAppContext.get(), item.getPath()); IntentUtil.viewFile(GlobalAppContext.get(), item.getPath(), AppFileProvider.AUTHORITY);
} }
}); });
} }

View File

@@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/> <external-path name="external_files" path="."/>
<files-path name="sample" path="sample"/>
<root-path name="root_files" path="." />
</paths> </paths>

View File

@@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<application <application

View File

@@ -31,7 +31,7 @@ public class OpenCVHelper {
} }
public static void initIfNeeded(Activity activity, InitializeCallback callback) { public static void initIfNeeded(Activity activity, InitializeCallback callback) {
if(mInitialized){ if (mInitialized) {
callback.onInitFinish(); callback.onInitFinish();
return; return;
} }
@@ -55,17 +55,18 @@ public class OpenCVHelper {
public void onManagerConnected(int status) { public void onManagerConnected(int status) {
switch (status) { switch (status) {
case 0: case 0:
finish();
break; break;
case 1: case 1:
default: default:
Log.e(LOG_TAG, "OpenCV loading failed!"); Log.e(LOG_TAG, "OpenCV loading failed!");
new MaterialDialog.Builder(mActivity) new MaterialDialog.Builder(mActivity)
.title("OpenCV error") .title("OpenCV error")
.content("OpenCV was not initialised correctly. Application will be shut down") .content("OpenCV was not initialised correctly. Application will be shut down")
.cancelable(false) .cancelable(false)
.positiveText("OK") .positiveText("OK")
.onPositive((dialog, which) -> finish()) .onPositive((dialog, which) -> finish())
.show(); .show();
break; break;
case 2: case 2:
Log.e(LOG_TAG, "Package installation failed!"); Log.e(LOG_TAG, "Package installation failed!");
@@ -117,6 +118,8 @@ public class OpenCVHelper {
.negativeText("Exit") .negativeText("Exit")
.onNegative(((dialog, which) -> callback.cancel())) .onNegative(((dialog, which) -> callback.cancel()))
.show(); .show();
default:
finish();
} }
} }

View File

@@ -7,9 +7,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.webkit.MimeTypeMap;
import com.stardust.autojs.annotation.ScriptInterface; import com.stardust.autojs.annotation.ScriptInterface;
import com.stardust.util.IntentUtil; import com.stardust.util.IntentUtil;
@@ -18,8 +16,6 @@ import com.stardust.util.MimeTypes;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.List; import java.util.List;
import static com.stardust.pio.PFiles.getExtension;
/** /**
* Created by Stardust on 2017/4/2. * Created by Stardust on 2017/4/2.
*/ */
@@ -28,9 +24,16 @@ public class AppUtils {
private Context mContext; private Context mContext;
private volatile WeakReference<Activity> mCurrentActivity = new WeakReference<>(null); private volatile WeakReference<Activity> mCurrentActivity = new WeakReference<>(null);
private final String mFileProviderAuthority;
public AppUtils(Context context) { public AppUtils(Context context) {
mContext = context; mContext = context;
mFileProviderAuthority = null;
}
public AppUtils(Context context, String fileProviderAuthority) {
mContext = context;
mFileProviderAuthority = fileProviderAuthority;
} }
@ScriptInterface @ScriptInterface
@@ -99,22 +102,14 @@ public class AppUtils {
public void viewFile(String path) { public void viewFile(String path) {
if (path == null) if (path == null)
throw new NullPointerException("path == null"); throw new NullPointerException("path == null");
path = "file://" + path; IntentUtil.viewFile(mContext, path, mFileProviderAuthority);
String mimeType = MimeTypes.fromFileOr(path, "*/*");
mContext.startActivity(new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse(path), mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} }
@ScriptInterface @ScriptInterface
public void editFile(String path) { public void editFile(String path) {
if (path == null) if (path == null)
throw new NullPointerException("path == null"); throw new NullPointerException("path == null");
path = "file://" + path; IntentUtil.editFile(mContext, path, mFileProviderAuthority);
String mimeType = MimeTypes.fromFileOr(path, "*/*");
mContext.startActivity(new Intent(Intent.ACTION_EDIT)
.setDataAndType(Uri.parse(path), mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} }
@ScriptInterface @ScriptInterface

View File

@@ -1,3 +1,5 @@
import groovy.json.JsonSlurper
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
@@ -27,12 +29,5 @@ task clean(type: Delete) {
} }
ext { ext {
versions = [ versions = new JsonSlurper().parse(file('./project-versions.json'))
appVersionCode: 423,
appVersionName: '4.0.3 Alpha4',
target : 28,
mini : 17,
compile : 28,
buildTool : '28.0.3'
]
} }

View File

@@ -1 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":423},"path":"commonRelease-4.0.3 Alpha4.apk","properties":{"packageId":"org.autojs.autojs","split":"","minSdkVersion":"17"}}] [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":424,"versionName":"4.0.3 Alpha5","enabled":true,"outputFile":"commonRelease-4.0.3 Alpha5.apk","fullName":"commonRelease","baseName":"common-release"},"path":"commonRelease-4.0.3 Alpha5.apk","properties":{}}]

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.FileProvider;
import java.io.File; import java.io.File;
@@ -93,11 +94,37 @@ public class IntentUtil {
context.startActivity(intent); context.startActivity(intent);
} }
public static void viewFile(Context context, String path) { public static void viewFile(Context context, String path, String fileProviderAuthority) {
path = "file://" + path;
String mimeType = MimeTypes.fromFileOr(path, "*/*"); String mimeType = MimeTypes.fromFileOr(path, "*/*");
viewFile(context, path, mimeType, fileProviderAuthority);
}
public static void viewFile(Context context, String path, String mimeType, String fileProviderAuthority) {
Uri uri;
if (fileProviderAuthority == null) {
uri = Uri.parse("file://" + path);
} else {
uri = FileProvider.getUriForFile(context, fileProviderAuthority, new File(path));
}
context.startActivity(new Intent(Intent.ACTION_VIEW) context.startActivity(new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse(path), mimeType) .setDataAndType(uri, mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
}
public static void editFile(Context context, String path, String fileProviderAuthority) {
String mimeType = MimeTypes.fromFileOr(path, "*/*");
Uri uri;
if (fileProviderAuthority == null) {
uri = Uri.parse("file://" + path);
} else {
uri = FileProvider.getUriForFile(context, fileProviderAuthority, new File(path));
}
context.startActivity(new Intent(Intent.ACTION_EDIT)
.setDataAndType(uri, mimeType)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
} }
} }

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip

View File

@@ -36,6 +36,39 @@ android {
} }
} }
task buildApkPlugin {
doLast {
def pluginProjectDirPath = '..\\..\\AutoJsApkBuilderPlugin'
def pluginProjectDir = file(pluginProjectDirPath)
if(!pluginProjectDir.exists() || !pluginProjectDir.isDirectory()){
println 'pluginProjectDir not exists'
return
}
copy {
from file('build\\outputs\\apk\\release\\')
into new File(pluginProjectDir, 'app\\src\\main\\assets')
include "inrt-release-unsigned.apk"
rename "inrt-release-unsigned.apk", 'template.apk'
}
exec {
workingDir pluginProjectDir
commandLine 'gradlew.bat', 'assembleRelease'
}
copy {
from new File(pluginProjectDir, 'app\\build\\outputs\\apk\\release')
into file('..\\common\\release')
include '*-release.apk'
}
}
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleRelease') {
task.finalizedBy 'buildApkPlugin'
}
}
repositories { repositories {
flatDir { flatDir {
dirs 'libs' dirs 'libs'

View File

@@ -75,9 +75,7 @@ public class SplashActivity extends AppCompatActivity {
runScript(); runScript();
} }
} else { } else {
int[] grantResults = new int[permissions.length]; runScript();
Arrays.fill(grantResults, PERMISSION_GRANTED);
onRequestPermissionsResult(PERMISSION_REQUEST_CODE, permissions, grantResults);
} }
} }

8
project-versions.json Normal file
View File

@@ -0,0 +1,8 @@
{
"appVersionCode": 424,
"appVersionName": "4.0.3 Alpha5",
"target": 28,
"mini": 17,
"compile": 28,
"buildTool": "28.0.3"
}