feat: build apk from project(dir) support
This commit is contained in:
@@ -1 +1 @@
|
||||
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":240},"path":"release-3.0.0 Alpha40.apk","properties":{"packageId":"com.stardust.scriptdroid","split":"","minSdkVersion":"17"}}]
|
||||
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":34},"path":"inrt-release.apk","properties":{"packageId":"com.stardust.auojs.inrt","split":"","minSdkVersion":"17"}}]
|
||||
@@ -1,15 +1,14 @@
|
||||
package com.stardust.scriptdroid.autojs.build;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
|
||||
import com.stardust.autojs.apkbuilder.ApkBuilder;
|
||||
import com.stardust.autojs.apkbuilder.ManifestEditor;
|
||||
import com.stardust.autojs.apkbuilder.util.StreamUtils;
|
||||
import com.stardust.autojs.project.ProjectConfig;
|
||||
import com.stardust.pio.PFiles;
|
||||
import com.stardust.scriptdroid.App;
|
||||
|
||||
import org.androidannotations.annotations.Click;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
@@ -105,10 +104,28 @@ public class AutoJsApkBuilder extends ApkBuilder {
|
||||
}
|
||||
|
||||
public AutoJsApkBuilder setScriptFile(String path) throws IOException {
|
||||
replaceFile("assets/script.js", path);
|
||||
if (PFiles.isDir(path)) {
|
||||
copyDir("assets/project/", path);
|
||||
} else {
|
||||
replaceFile("assets/project/main.js", path);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public void copyDir(String relativePath, String path) throws IOException {
|
||||
File fromDir = new File(path);
|
||||
File toDir = new File(this.mWorkspacePath, relativePath);
|
||||
toDir.mkdir();
|
||||
for (File child : fromDir.listFiles()) {
|
||||
if (child.isFile()) {
|
||||
StreamUtils.write(new FileInputStream(child),
|
||||
new FileOutputStream(new File(toDir, child.getName())));
|
||||
} else {
|
||||
copyDir(PFiles.join(relativePath, child.getName() + "/"), child.getPath());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApkBuilder replaceFile(String relativePath, String newFilePath) throws IOException {
|
||||
StreamUtils.write(new FileInputStream(newFilePath), new FileOutputStream(new File(this.mWorkspacePath, relativePath)));
|
||||
@@ -123,10 +140,42 @@ public class AutoJsApkBuilder extends ApkBuilder {
|
||||
.setVersionCode(config.versionCode)
|
||||
.setPackageName(config.packageName);
|
||||
setArscPackageName(config.packageName);
|
||||
updateProjectConfig(config);
|
||||
setScriptFile(config.jsPath);
|
||||
return this;
|
||||
}
|
||||
|
||||
private void updateProjectConfig(AppConfig config) {
|
||||
if (!PFiles.isDir(config.jsPath)) {
|
||||
return;
|
||||
}
|
||||
ProjectConfig projectConfig = ProjectConfig.fromProjectDir(config.jsPath);
|
||||
if (projectConfig == null)
|
||||
projectConfig = new ProjectConfig();
|
||||
projectConfig.setName(config.appName)
|
||||
.setPackageName(config.packageName)
|
||||
.setVersionCode(config.versionCode)
|
||||
.setVersionName(config.versionName)
|
||||
.setMainScriptFile("main.js");
|
||||
updateProjectConfigAssets(projectConfig, config.jsPath, config.jsPath);
|
||||
PFiles.write(ProjectConfig.configFileOfDir(config.jsPath), projectConfig.toJson());
|
||||
}
|
||||
|
||||
private void updateProjectConfigAssets(ProjectConfig config, String projectDir, String dir) {
|
||||
File main = new File(projectDir, config.getMainScriptFile());
|
||||
for (File file : new File(dir).listFiles()) {
|
||||
if (file.isDirectory()) {
|
||||
updateProjectConfigAssets(config, projectDir, file.getPath());
|
||||
continue;
|
||||
}
|
||||
if (file.equals(main)) {
|
||||
continue;
|
||||
}
|
||||
String relative = new File(projectDir).toURI().relativize(file.toURI()).getPath();
|
||||
config.getAssets().add(relative);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AutoJsApkBuilder build() throws IOException {
|
||||
if (mProgressCallback != null) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.Environment;
|
||||
import android.support.design.widget.TextInputEditText;
|
||||
import android.support.design.widget.TextInputLayout;
|
||||
import android.text.TextUtils;
|
||||
@@ -13,6 +14,7 @@ import android.widget.ImageView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.autojs.project.ProjectConfig;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.build.AutoJsApkBuilder;
|
||||
import com.stardust.scriptdroid.build.ApkBuilderPluginHelper;
|
||||
@@ -102,7 +104,6 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
}
|
||||
|
||||
private void setupWithSourceFile(ScriptFile file) {
|
||||
mSourcePath.setText(file.getPath());
|
||||
String dir = file.getParent();
|
||||
if (dir.startsWith(getFilesDir().getPath())) {
|
||||
dir = StorageFileProvider.DEFAULT_DIRECTORY_PATH;
|
||||
@@ -110,6 +111,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
mOutputPath.setText(dir);
|
||||
mAppName.setText(file.getSimplifiedName());
|
||||
mPackageName.setText(getString(R.string.format_default_package_name, System.currentTimeMillis()));
|
||||
setSource(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -123,12 +125,25 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
String initialDir = new File(mSourcePath.getText().toString()).getParent();
|
||||
new FileChooserDialogBuilder(this)
|
||||
.title(R.string.text_source_file_path)
|
||||
.dir(initialDir == null ? StorageFileProvider.DEFAULT_DIRECTORY_PATH : initialDir)
|
||||
.justScriptFile()
|
||||
.singleChoice(file -> mSourcePath.setText(file.getPath()))
|
||||
.dir(Environment.getExternalStorageDirectory().getPath(),
|
||||
initialDir == null ? StorageFileProvider.DEFAULT_DIRECTORY_PATH : initialDir)
|
||||
.singleChoice(this::setSource)
|
||||
.show();
|
||||
}
|
||||
|
||||
private void setSource(File file) {
|
||||
mSourcePath.setText(file.getPath());
|
||||
if (!file.isDirectory())
|
||||
return;
|
||||
ProjectConfig config = ProjectConfig.fromProjectDir(file.getPath());
|
||||
if (config == null)
|
||||
return;
|
||||
mAppName.setText(config.getName());
|
||||
mPackageName.setText(config.getPackageName());
|
||||
mVersionCode.setText(String.valueOf(config.getVersionCode()));
|
||||
mVersionName.setText(config.getVersionName());
|
||||
}
|
||||
|
||||
|
||||
@Click(R.id.select_output)
|
||||
void selectOutputDirPath() {
|
||||
@@ -221,6 +236,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
mProgressDialog = new MaterialDialog.Builder(this)
|
||||
.progress(true, 100)
|
||||
.content(R.string.text_on_progress)
|
||||
.cancelable(false)
|
||||
.show();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@ import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.model.script.ScriptFile;
|
||||
import com.stardust.scriptdroid.model.script.Scripts;
|
||||
import com.stardust.scriptdroid.storage.file.StorageFileProvider;
|
||||
import com.stardust.scriptdroid.ui.build.BuildActivity;
|
||||
import com.stardust.scriptdroid.ui.build.BuildActivity_;
|
||||
import com.stardust.scriptdroid.ui.common.ScriptLoopDialog;
|
||||
import com.stardust.scriptdroid.ui.common.ScriptOperations;
|
||||
import com.stardust.scriptdroid.ui.viewmodel.ScriptList;
|
||||
@@ -246,6 +248,12 @@ public class ScriptListView extends ThemeColorSwipeRefreshLayout implements Swip
|
||||
.timedTask(mSelectedScriptFile);
|
||||
notifyOperated();
|
||||
break;
|
||||
case R.id.action_build_apk:
|
||||
BuildActivity_.intent(getContext())
|
||||
.extra(BuildActivity.EXTRA_SOURCE_FILE, mSelectedScriptFile.getPath())
|
||||
.start();
|
||||
notifyOperated();
|
||||
break;
|
||||
case R.id.action_sort_by_date:
|
||||
sort(ScriptList.SORT_TYPE_DATE, mDirSortMenuShowing);
|
||||
break;
|
||||
|
||||
@@ -8,4 +8,8 @@
|
||||
android:id="@+id/delete"
|
||||
android:title="@string/text_delete"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_build_apk"
|
||||
android:title="@string/text_build_apk"/>
|
||||
|
||||
</menu>
|
||||
@@ -33,6 +33,10 @@
|
||||
<item
|
||||
android:id="@+id/open_by_other_apps"
|
||||
android:title="@string/text_open_by_other_apps"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_build_apk"
|
||||
android:title="@string/text_build_apk"/>
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
<string name="apk_builder_build">构建中</string>
|
||||
<string name="apk_builder_package">打包中</string>
|
||||
<string name="apk_builder_clean">清理临时文件</string>
|
||||
<string name="text_source_file_path">脚本文件路径</string>
|
||||
<string name="text_source_file_path">脚本文件(夹)路径</string>
|
||||
<string name="text_search">搜索</string>
|
||||
<string name="text_select_icon">选择图标</string>
|
||||
<string name="text_use_android_n_shortcut">添加到安卓7.0 Shortcut</string>
|
||||
|
||||
Reference in New Issue
Block a user