feat: can set app icon of apk building
This commit is contained in:
@@ -1,10 +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.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.ui.build.BuildActivity;
|
||||
|
||||
import org.androidannotations.annotations.Click;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@@ -12,6 +16,7 @@ import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/10/24.
|
||||
@@ -37,19 +42,44 @@ public class AutoJsApkBuilder extends ApkBuilder {
|
||||
int versionCode;
|
||||
String jsPath;
|
||||
String packageName;
|
||||
Callable<Bitmap> icon;
|
||||
|
||||
public AppConfig(String packageName, String appName, String versionName, int versionCode, String jsPath) {
|
||||
this.packageName = packageName;
|
||||
public AppConfig setAppName(String appName) {
|
||||
this.appName = appName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AppConfig setVersionName(String versionName) {
|
||||
this.versionName = versionName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AppConfig setVersionCode(int versionCode) {
|
||||
this.versionCode = versionCode;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AppConfig setJsPath(String jsPath) {
|
||||
this.jsPath = jsPath;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AppConfig setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public AppConfig setIcon(Callable<Bitmap> icon) {
|
||||
this.icon = icon;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
private ProgressCallback mProgressCallback;
|
||||
private ManifestEditor mManifestEditor;
|
||||
private String mWorkspacePath;
|
||||
private AppConfig mAppConfig;
|
||||
|
||||
public AutoJsApkBuilder(InputStream apkInputStream, File outApkFile, String workspacePath) {
|
||||
super(apkInputStream, outApkFile, workspacePath);
|
||||
@@ -86,7 +116,9 @@ public class AutoJsApkBuilder extends ApkBuilder {
|
||||
}
|
||||
|
||||
public AutoJsApkBuilder withConfig(AppConfig config) throws IOException {
|
||||
mManifestEditor = editManifest().setAppName(config.appName)
|
||||
mAppConfig = config;
|
||||
mManifestEditor = editManifest()
|
||||
.setAppName(config.appName)
|
||||
.setVersionName(config.versionName)
|
||||
.setVersionCode(config.versionCode)
|
||||
.setPackageName(config.packageName);
|
||||
@@ -101,7 +133,14 @@ public class AutoJsApkBuilder extends ApkBuilder {
|
||||
App.getApp().getUiHandler().post(() -> mProgressCallback.onBuild(AutoJsApkBuilder.this));
|
||||
}
|
||||
mManifestEditor.commit();
|
||||
mManifestEditor = null;
|
||||
if (mAppConfig.icon != null) {
|
||||
try {
|
||||
mAppConfig.icon.call().compress(Bitmap.CompressFormat.PNG, 100,
|
||||
new FileOutputStream(new File(mWorkspacePath, "res/mipmap/ic_launcher.png")));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return (AutoJsApkBuilder) super.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
|
||||
import com.stardust.BuildConfig;
|
||||
import com.stardust.pio.UncheckedIOException;
|
||||
import com.stardust.util.DeveloperUtils;
|
||||
|
||||
@@ -25,6 +26,9 @@ public class ApkBuilderPluginHelper {
|
||||
|
||||
public static InputStream openTemplateApk(Context context) {
|
||||
try {
|
||||
if (BuildConfig.DEBUG) {
|
||||
return context.getAssets().open(TEMPLATE_APK_PATH);
|
||||
}
|
||||
return context.getPackageManager().getResourcesForApplication(PLUGIN_PACKAGE_NAME)
|
||||
.getAssets().open(TEMPLATE_APK_PATH);
|
||||
} catch (IOException e) {
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package com.stardust.scriptdroid.ui.build;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
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.ImageView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
@@ -14,8 +18,11 @@ import com.stardust.scriptdroid.autojs.build.AutoJsApkBuilder;
|
||||
import com.stardust.scriptdroid.build.ApkBuilderPluginHelper;
|
||||
import com.stardust.scriptdroid.storage.file.StorageFileProvider;
|
||||
import com.stardust.scriptdroid.model.script.ScriptFile;
|
||||
import com.stardust.scriptdroid.tool.BitmapTool;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
import com.stardust.scriptdroid.ui.filechooser.FileChooserDialogBuilder;
|
||||
import com.stardust.scriptdroid.ui.shortcut.ShortcutIconSelectActivity;
|
||||
import com.stardust.scriptdroid.ui.shortcut.ShortcutIconSelectActivity_;
|
||||
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
import com.stardust.util.IntentUtil;
|
||||
|
||||
@@ -26,6 +33,7 @@ import org.androidannotations.annotations.ViewById;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
@@ -58,7 +66,12 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
|
||||
@ViewById(R.id.version_code)
|
||||
TextInputEditText mVersionCode;
|
||||
|
||||
@ViewById(R.id.icon)
|
||||
ImageView mIcon;
|
||||
|
||||
private MaterialDialog mProgressDialog;
|
||||
private boolean mIsDefaultIcon = true;
|
||||
|
||||
@AfterViews
|
||||
void setupViews() {
|
||||
@@ -125,6 +138,12 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
.show();
|
||||
}
|
||||
|
||||
@Click(R.id.icon)
|
||||
void selectIcon() {
|
||||
ShortcutIconSelectActivity_.intent(this)
|
||||
.startForResult(31209);
|
||||
}
|
||||
|
||||
@Click(R.id.fab)
|
||||
void buildApk() {
|
||||
if (!ApkBuilderPluginHelper.checkPlugin(this)) {
|
||||
@@ -173,7 +192,16 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
return new AutoJsApkBuilder(templateApk, outApk, tmpDir.getPath())
|
||||
.setProgressCallback(BuildActivity.this)
|
||||
.prepare()
|
||||
.withConfig(new AutoJsApkBuilder.AppConfig(packageName, appName, versionName, versionCode, jsPath))
|
||||
.withConfig(new AutoJsApkBuilder.AppConfig()
|
||||
.setAppName(appName)
|
||||
.setJsPath(jsPath)
|
||||
.setPackageName(packageName)
|
||||
.setVersionCode(versionCode)
|
||||
.setVersionName(versionName)
|
||||
.setIcon(mIsDefaultIcon ? null : (Callable<Bitmap>) () ->
|
||||
BitmapTool.drawableToBitmap(mIcon.getDrawable())
|
||||
)
|
||||
)
|
||||
.build()
|
||||
.sign()
|
||||
.cleanWorkspace();
|
||||
@@ -235,4 +263,33 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
public void onClean(AutoJsApkBuilder builder) {
|
||||
mProgressDialog.setContent(R.string.apk_builder_clean);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode != RESULT_OK) {
|
||||
return;
|
||||
}
|
||||
String packageName = data.getStringExtra(ShortcutIconSelectActivity.EXTRA_PACKAGE_NAME);
|
||||
if (packageName != null) {
|
||||
try {
|
||||
mIcon.setImageDrawable(getPackageManager().getApplicationIcon(packageName));
|
||||
mIsDefaultIcon = false;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (data.getData() == null)
|
||||
return;
|
||||
Observable.fromCallable(() -> BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData())))
|
||||
.subscribeOn(Schedulers.computation())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe((bitmap -> {
|
||||
mIcon.setImageBitmap(bitmap);
|
||||
mIsDefaultIcon = false;
|
||||
}), error -> {
|
||||
Log.e(LOG_TAG, "decode stream", error);
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user