diff --git a/.idea/modules.xml b/.idea/modules.xml index 4fac18b4..7e950955 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ + - diff --git a/app/build.gradle b/app/build.gradle index 81df4211..4a864549 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -101,8 +101,7 @@ dependencies { compile 'org.apache.commons:commons-lang3:3.6' compile 'com.thoughtbot:expandablerecyclerview:1.3' compile('com.github.hyb1996:FloatingCircularActionMenu:0.0.4') - compile(name: 'apkbuilder-release', ext: 'aar') - + compile 'com.github.hyb1996:Auto.js-ApkBuilder:1.0.1' // RxJava compile "io.reactivex.rxjava2:rxjava:2.1.2" compile 'io.reactivex.rxjava2:rxandroid:2.0.1' diff --git a/app/libs/apkbuilder-release.aar b/app/libs/apkbuilder-release.aar deleted file mode 100644 index d2206627..00000000 Binary files a/app/libs/apkbuilder-release.aar and /dev/null differ diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java b/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java index 567dca3d..e7093a82 100644 --- a/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java +++ b/app/src/main/java/com/stardust/scriptdroid/autojs/build/AutoJsApkBuilder.java @@ -1,11 +1,15 @@ package com.stardust.scriptdroid.autojs.build; import com.stardust.autojs.apkbuilder.ApkBuilder; +import com.stardust.autojs.apkbuilder.ManifestEditor; +import com.stardust.autojs.apkbuilder.util.StreamUtils; import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.ui.build.BuildActivity; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -32,8 +36,10 @@ public class AutoJsApkBuilder extends ApkBuilder { String versionName; int versionCode; String jsPath; + String packageName; - public AppConfig(String appName, String versionName, int versionCode, String jsPath) { + public AppConfig(String packageName, String appName, String versionName, int versionCode, String jsPath) { + this.packageName = packageName; this.appName = appName; this.versionName = versionName; this.versionCode = versionCode; @@ -42,13 +48,17 @@ public class AutoJsApkBuilder extends ApkBuilder { } private ProgressCallback mProgressCallback; + private ManifestEditor mManifestEditor; + private String mWorkspacePath; public AutoJsApkBuilder(InputStream apkInputStream, File outApkFile, String workspacePath) { super(apkInputStream, outApkFile, workspacePath); + mWorkspacePath = workspacePath; } public AutoJsApkBuilder(File inFile, File outFile, String workspacePath) throws FileNotFoundException { super(inFile, outFile, workspacePath); + mWorkspacePath = workspacePath; } public AutoJsApkBuilder setProgressCallback(ProgressCallback callback) { @@ -69,11 +79,18 @@ public class AutoJsApkBuilder extends ApkBuilder { return this; } + @Override + public ApkBuilder replaceFile(String relativePath, String newFilePath) throws IOException { + StreamUtils.write(new FileInputStream(newFilePath), new FileOutputStream(new File(this.mWorkspacePath, relativePath))); + return this; + } + public AutoJsApkBuilder withConfig(AppConfig config) throws IOException { - editManifest().setAppName(config.appName) + mManifestEditor = editManifest().setAppName(config.appName) .setVersionName(config.versionName) .setVersionCode(config.versionCode) - .commit(); + .setPackageName(config.packageName); + setArscPackageName(config.packageName); setScriptFile(config.jsPath); return this; } @@ -83,6 +100,8 @@ public class AutoJsApkBuilder extends ApkBuilder { if (mProgressCallback != null) { App.getApp().getUiHandler().post(() -> mProgressCallback.onBuild(AutoJsApkBuilder.this)); } + mManifestEditor.commit(); + mManifestEditor = null; return (AutoJsApkBuilder) super.build(); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java index ffedab0a..9c1fee5c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/build/BuildActivity.java @@ -1,17 +1,17 @@ package com.stardust.scriptdroid.ui.build; import android.content.Intent; -import android.support.annotation.NonNull; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; +import android.text.TextUtils; import android.util.Log; import android.widget.EditText; import android.widget.Toast; -import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.build.AutoJsApkBuilder; import com.stardust.scriptdroid.build.ApkBuilderPluginHelper; -import com.stardust.scriptdroid.network.download.DownloadManager; import com.stardust.scriptdroid.storage.file.StorageFileProvider; import com.stardust.scriptdroid.model.script.ScriptFile; import com.stardust.scriptdroid.ui.BaseActivity; @@ -42,22 +42,22 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog private static final String LOG_TAG = "BuildActivity"; @ViewById(R.id.source_path) - EditText mSourcePath; + TextInputEditText mSourcePath; @ViewById(R.id.output_path) - EditText mOutputPath; + TextInputEditText mOutputPath; @ViewById(R.id.app_name) - EditText mAppName; + TextInputEditText mAppName; @ViewById(R.id.package_name) - EditText mPackageName; + TextInputEditText mPackageName; @ViewById(R.id.version_name) - EditText mVersionName; + TextInputEditText mVersionName; @ViewById(R.id.version_code) - EditText mVersionCode; + TextInputEditText mVersionCode; private MaterialDialog mProgressDialog; @AfterViews @@ -68,7 +68,6 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog setupWithSourceFile(new ScriptFile(sourcePath)); } showPluginDownloadDialogIfNeeded(); - } private void showPluginDownloadDialogIfNeeded() { @@ -93,6 +92,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog mSourcePath.setText(file.getPath()); mOutputPath.setText(file.getParent()); mAppName.setText(file.getSimplifiedName()); + mPackageName.setText(getString(R.string.format_default_package_name, System.currentTimeMillis())); } @Override @@ -131,14 +131,39 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog Toast.makeText(this, R.string.text_apk_builder_plugin_unavailable, Toast.LENGTH_SHORT).show(); return; } + if (!checkInputs()) { + return; + } doBuildingApk(); } + private boolean checkInputs() { + boolean inputValid = true; + inputValid &= checkNotEmpty(mSourcePath); + inputValid &= checkNotEmpty(mOutputPath); + inputValid &= checkNotEmpty(mAppName); + inputValid &= checkNotEmpty(mSourcePath); + inputValid &= checkNotEmpty(mVersionCode); + inputValid &= checkNotEmpty(mVersionName); + inputValid &= checkNotEmpty(mPackageName); + return inputValid; + } + + private boolean checkNotEmpty(TextInputEditText editText) { + if (!TextUtils.isEmpty(editText.getText())) + return true; + // TODO: 2017/12/8 more beautiful ways? + String hint = ((TextInputLayout) editText.getParent().getParent()).getHint().toString(); + editText.setError(hint + getString(R.string.text_should_not_be_empty)); + return false; + } + private void doBuildingApk() { String jsPath = mSourcePath.getText().toString(); String versionName = mVersionName.getText().toString(); int versionCode = Integer.parseInt(mVersionCode.getText().toString()); String appName = mAppName.getText().toString(); + String packageName = mPackageName.getText().toString(); File tmpDir = new File(getCacheDir(), "build/"); File outApk = new File(mOutputPath.getText().toString(), String.format("%s_v%s.apk", appName, versionName)); @@ -148,7 +173,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog return new AutoJsApkBuilder(templateApk, outApk, tmpDir.getPath()) .setProgressCallback(BuildActivity.this) .prepare() - .withConfig(new AutoJsApkBuilder.AppConfig(appName, versionName, versionCode, jsPath)) + .withConfig(new AutoJsApkBuilder.AppConfig(packageName, appName, versionName, versionCode, jsPath)) .build() .sign() .cleanWorkspace(); diff --git a/app/src/main/res/layout/activity_build.xml b/app/src/main/res/layout/activity_build.xml index 7be994c9..f9a549d1 100644 --- a/app/src/main/res/layout/activity_build.xml +++ b/app/src/main/res/layout/activity_build.xml @@ -158,6 +158,7 @@ android:id="@+id/package_name" android:layout_width="match_parent" android:layout_height="wrap_content" + android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_." android:hint="@string/text_package_name"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4834a95f..d7de4d51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -328,4 +328,6 @@ 打开 生成结果 复制 + com.example.script%d + 不能为空