feat: can set app icon of apk building
@@ -1 +1 @@
|
||||
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":231},"path":"release-3.0.0 Alpha31.apk","properties":{"packageId":"com.stardust.scriptdroid","split":"","minSdkVersion":"17"}}]
|
||||
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1},"path":"inrt-release.apk","properties":{"packageId":"com.stardust.auojs.inrt","split":"","minSdkVersion":"17"}}]
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,32 +162,74 @@
|
||||
android:hint="@string/text_package_name"/>
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/version_name"
|
||||
android:layout_width="match_parent"
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/text_version_name"
|
||||
android:text="1.0.0"/>
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/version_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/text_version_name"
|
||||
android:text="1.0.0"/>
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/version_code"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/text_version_code"
|
||||
android:inputType="number"
|
||||
android:text="1"/>
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:text="@string/text_icon"
|
||||
android:textColor="#9e9e9e"
|
||||
android:textSize="12sp"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="64dp"
|
||||
android:layout_height="64dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:background="@drawable/shortcut_create_dialog_icon_bg"
|
||||
android:padding="12dp"
|
||||
android:src="@drawable/ic_add_white_48dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/version_code"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/text_version_code"
|
||||
android:inputType="number"
|
||||
android:text="1"/>
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</android.support.v7.widget.CardView>
|
||||
|
||||
@@ -261,7 +261,7 @@
|
||||
<string name="text_search">搜索</string>
|
||||
<string name="text_floating_edit">悬浮编辑</string>
|
||||
<string name="text_select_icon">选择图标</string>
|
||||
<string name="text_use_android_n_shortcut">添加到图标快捷方式</string>
|
||||
<string name="text_use_android_n_shortcut">添加到安卓7.0 Shortcut</string>
|
||||
<string name="text_login_succeed">登录成功</string>
|
||||
<string name="text_login_fail">登录失败</string>
|
||||
<string name="text_reset_password">重置密码</string>
|
||||
@@ -330,4 +330,5 @@
|
||||
<string name="text_copy">复制</string>
|
||||
<string name="format_default_package_name" formatted="true">com.example.script%d</string>
|
||||
<string name="text_should_not_be_empty">不能为空</string>
|
||||
<string name="text_icon">图标</string>
|
||||
</resources>
|
||||
|
||||
@@ -10,13 +10,12 @@
|
||||
|
||||
<application
|
||||
android:name=".App"
|
||||
android:allowBackup="true"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="inrt"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:replace="android:label">
|
||||
tools:replace="android:label, android:allowBackup">
|
||||
<activity android:name=".MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |