feat: can set app icon of apk building

This commit is contained in:
hyb1996
2017-12-08 20:08:28 +08:00
parent fbc567355e
commit e8179cae94
17 changed files with 173 additions and 31 deletions

View File

@@ -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"}}]

View File

@@ -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();
}

View File

@@ -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) {

View File

@@ -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);
});
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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"/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB