Compare commits

..

14 Commits

Author SHA1 Message Date
ZhanGSKen 2989061354 <aes>APK 15.21.1 release Publish. 2026-07-27 05:47:39 +08:00
MiMo c6a6d20a1c <aes>切换libappbase依赖地址到jitpack.io
- libaes/build.gradle: 依赖库地址从 nexus.winboll.cc 切换到 jitpack.io
- aes/build.gradle: 格式化缩进
- build.properties: 更新构建计数
2026-07-27 05:28:12 +08:00
ZhanGSKen f998c844da <libaes>Library Release 15.21.0 2026-07-21 09:22:20 +08:00
ZhanGSKen 5c1b732e28 <aes>APK 15.21.0 release Publish. 2026-07-21 09:22:00 +08:00
ZhanGSKen f138ad766a 编译调试 2026-07-21 09:19:35 +08:00
ZhanGSKen 8aaafc9918 设置自动使用APPBase类库15.21.*版最新版本 2026-07-21 09:18:55 +08:00
ZhanGSKen f3f27bf089 应用基准线与APPBase分支对齐 2026-07-21 09:17:51 +08:00
ZhanGSKen 05ccc1f628 <libaes>Library Release 15.20.21 2026-07-18 03:57:01 +08:00
ZhanGSKen 22bc32feed <aes>APK 15.20.21 release Publish. 2026-07-18 03:56:46 +08:00
BigPickle 063cb9ae2f <libaes><aes>fix: 修复Release编译R8混淆导致SMTP发送失败,添加邮件发送调试日志 2026-07-18 03:52:41 +08:00
ZhanGSKen 71732bd8ee <libaes>Library Release 15.20.20 2026-07-17 19:19:42 +08:00
ZhanGSKen 627fa5359e <aes>APK 15.20.20 release Publish. 2026-07-17 19:18:48 +08:00
BigPickle 6e01f45174 <libaes>feat: 新增SMTP邮件发送启用开关,禁用时sendMail跳过操作 2026-07-17 19:15:50 +08:00
ZhanGSKen 07f74c9f8f <libaes>Library Release 15.20.19 2026-07-17 15:03:22 +08:00
9 changed files with 114 additions and 20 deletions
+2 -2
View File
@@ -33,7 +33,7 @@ android {
// versionName 更新后需要手动设置
// 项目模块目录的 build.gradle 文件的 stageCount=0
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
versionName "15.20"
versionName "15.21"
if(true) {
versionName = genVersionName("${versionName}")
}
@@ -47,6 +47,6 @@ android {
}
dependencies {
api project(':libaes')
api project(':libaes')
api fileTree(dir: 'libs', include: ['*.jar'])
}
+5 -5
View File
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Fri Jul 17 15:03:05 HKT 2026
stageCount=20
#Mon Jul 27 05:47:39 HKT 2026
stageCount=2
libraryProject=libaes
baseVersion=15.20
publishVersion=15.20.19
baseVersion=15.21
publishVersion=15.21.1
buildCount=0
baseBetaVersion=15.20.20
baseBetaVersion=15.21.2
+10
View File
@@ -120,6 +120,16 @@
# JSch SSH组件
-keep class com.jcraft.jsch.** { *; }
# JavaMail SMTP(邮件发送核心库,Release编译必须保留)
-dontwarn javax.mail.**
-keep class javax.mail.** { *; }
-keep class javax.mail.internet.** { *; }
-dontwarn javax.activation.**
-keep class javax.activation.** { *; }
-dontwarn com.sun.mail.**
-keep class com.sun.mail.** { *; }
-keepclassmembers class * extends javax.mail.Authenticator { *; }
# AndroidX 基础组件
-keep class androidx.appcompat.** { *; }
-keep interface androidx.appcompat.** { *; }
+3 -1
View File
@@ -62,7 +62,9 @@ dependencies {
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
// WinBoLL库 nexus.winboll.cc 地址
api 'cc.winboll.studio:libappbase:15.20.34'
//api 'cc.winboll.studio:libappbase:15.21.+'
api 'com.github.ZhanGSKen:libappbase:appbase-v15.21.+'
// 备用库 jitpack.io 地址
//api 'com.github.ZhanGSKen:libappbase:appbase-v15.20.33'
+5 -5
View File
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Fri Jul 17 15:03:05 HKT 2026
stageCount=20
#Mon Jul 27 05:47:39 HKT 2026
stageCount=2
libraryProject=libaes
baseVersion=15.20
publishVersion=15.20.19
baseVersion=15.21
publishVersion=15.21.1
buildCount=0
baseBetaVersion=15.20.20
baseBetaVersion=15.21.2
+7
View File
@@ -9,6 +9,13 @@
# Add any project specific keep options here:
# JavaMail SMTP(邮件发送核心库,Release编译必须保留)
-dontwarn javax.mail.**
-keep class javax.mail.** { *; }
-keep class javax.mail.internet.** { *; }
-dontwarn com.sun.mail.**
-keep class com.sun.mail.** { *; }
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
@@ -33,6 +33,7 @@ public class APPMSGMailUtils {
private static final String KEY_SMTP_SENDER = "smtp_sender";
private static final String KEY_SMTP_AUTH_CODE = "smtp_auth_code";
private static final String KEY_SMTP_RECIPIENT = "smtp_recipient";
private static final String KEY_SMTP_ENABLED = "smtp_enabled";
private static final String DEFAULT_SMTP_SERVER = "smtp.qq.com";
private static final String DEFAULT_SMTP_PORT = "465";
@@ -42,6 +43,10 @@ public class APPMSGMailUtils {
//
public static void saveConfig(Context context, String server, String port,
String sender, String authCode, String recipient) {
LogUtils.d(TAG, "saveConfig: 开始保存SMTP配置");
LogUtils.d(TAG, "saveConfig: server=" + server + ", port=" + port);
LogUtils.d(TAG, "saveConfig: sender=" + sender + ", authCode长度=" + (authCode != null ? authCode.length() : 0));
LogUtils.d(TAG, "saveConfig: recipient=" + recipient);
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(KEY_SMTP_SERVER, server);
@@ -50,7 +55,7 @@ public class APPMSGMailUtils {
editor.putString(KEY_SMTP_AUTH_CODE, authCode);
editor.putString(KEY_SMTP_RECIPIENT, recipient);
editor.apply();
LogUtils.d(TAG, "saveConfig: SMTP配置已保存");
LogUtils.d(TAG, "saveConfig: SMTP配置已保存完成");
}
//
@@ -58,27 +63,53 @@ public class APPMSGMailUtils {
//
public static String getServer(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getString(KEY_SMTP_SERVER, DEFAULT_SMTP_SERVER);
String value = sp.getString(KEY_SMTP_SERVER, DEFAULT_SMTP_SERVER);
LogUtils.d(TAG, "getServer: " + value);
return value;
}
public static String getPort(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getString(KEY_SMTP_PORT, DEFAULT_SMTP_PORT);
String value = sp.getString(KEY_SMTP_PORT, DEFAULT_SMTP_PORT);
LogUtils.d(TAG, "getPort: " + value);
return value;
}
public static String getSender(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getString(KEY_SMTP_SENDER, "");
String value = sp.getString(KEY_SMTP_SENDER, "");
LogUtils.d(TAG, "getSender: " + value);
return value;
}
public static String getAuthCode(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getString(KEY_SMTP_AUTH_CODE, "");
String value = sp.getString(KEY_SMTP_AUTH_CODE, "");
LogUtils.d(TAG, "getAuthCode: 长度=" + (value != null ? value.length() : 0));
return value;
}
public static String getRecipient(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getString(KEY_SMTP_RECIPIENT, "");
String value = sp.getString(KEY_SMTP_RECIPIENT, "");
LogUtils.d(TAG, "getRecipient: " + value);
return value;
}
//
// SMTP邮件发送开关
//
public static void setEnabled(Context context, boolean enabled) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(KEY_SMTP_ENABLED, enabled);
editor.apply();
LogUtils.d(TAG, "setEnabled: " + enabled);
}
public static boolean isEnabled(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getBoolean(KEY_SMTP_ENABLED, false);
}
//
@@ -86,30 +117,49 @@ public class APPMSGMailUtils {
//
public static void sendMail(final Context context, final String subject,
final String content, final String recipients) {
LogUtils.d(TAG, "sendMail: ====== 开始调用sendMail ======");
LogUtils.d(TAG, "sendMail: subject=" + subject);
LogUtils.d(TAG, "sendMail: content长度=" + (content != null ? content.length() : 0));
LogUtils.d(TAG, "sendMail: recipients=" + recipients);
boolean enabled = isEnabled(context);
LogUtils.d(TAG, "sendMail: isEnabled=" + enabled);
if (!enabled) {
LogUtils.d(TAG, "sendMail: SMTP邮件发送已禁用,跳过操作");
return;
}
final String server = getServer(context);
final String port = getPort(context);
final String sender = getSender(context);
final String authCode = getAuthCode(context);
LogUtils.d(TAG, "sendMail: server=" + server + ", port=" + port);
LogUtils.d(TAG, "sendMail: sender=" + sender + ", authCode长度=" + (authCode != null ? authCode.length() : 0));
LogUtils.d(TAG, "sendMail: recipients=" + recipients);
if (sender == null || sender.length() == 0) {
LogUtils.w(TAG, "sendMail: 请先配置发件人邮箱");
showToast(context, "请先配置发件人邮箱");
return;
}
if (authCode == null || authCode.length() == 0) {
LogUtils.w(TAG, "sendMail: 请先配置邮箱授权码");
showToast(context, "请先配置邮箱授权码");
return;
}
if (recipients == null || recipients.length() == 0) {
LogUtils.w(TAG, "sendMail: 收件人不能为空");
showToast(context, "收件人不能为空");
return;
}
LogUtils.d(TAG, "sendMail: 参数校验通过,准备启动发送线程");
showToast(context, "正在发送邮件...");
new Thread(new Runnable() {
@Override
public void run() {
LogUtils.d(TAG, "sendMail: 发送线程已启动");
try {
LogUtils.d(TAG, "sendMail: 创建邮件属性配置");
Properties props = new Properties();
props.put("mail.smtp.host", server);
props.put("mail.smtp.port", port);
@@ -117,13 +167,16 @@ public class APPMSGMailUtils {
props.put("mail.smtp.socketFactory.port", port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
LogUtils.d(TAG, "sendMail: 创建邮件会话");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
LogUtils.d(TAG, "sendMail: 身份验证回调触发");
return new PasswordAuthentication(sender, authCode);
}
});
LogUtils.d(TAG, "sendMail: 创建MimeMessage");
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(sender));
message.setRecipients(Message.RecipientType.TO,
@@ -131,16 +184,18 @@ public class APPMSGMailUtils {
message.setSubject(subject);
message.setText(content);
LogUtils.d(TAG, "sendMail: 调用Transport.send开始发送");
Transport.send(message);
LogUtils.d(TAG, "sendMail: 邮件发送成功");
showToast(context, "邮件发送成功");
} catch (Exception e) {
LogUtils.e(TAG, "sendMail: 邮件发送失败", e);
LogUtils.e(TAG, "sendMail: 邮件发送异常", e);
showToast(context, "邮件发送失败: " + e.getMessage());
}
}
}).start();
LogUtils.d(TAG, "sendMail: ====== sendMail调用结束 ======");
}
//
@@ -3,6 +3,8 @@ package cc.winboll.studio.libaes.views;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
@@ -24,6 +26,7 @@ public class SMTPConfigView extends LinearLayout {
private EditText mEtSender;
private EditText mEtAuthCode;
private EditText mEtRecipient;
private CheckBox mCbEnabled;
public SMTPConfigView(Context context) {
super(context);
@@ -44,6 +47,14 @@ public class SMTPConfigView extends LinearLayout {
mEtSender = (EditText) findViewById(R.id.et_smtp_sender);
mEtAuthCode = (EditText) findViewById(R.id.et_smtp_auth_code);
mEtRecipient = (EditText) findViewById(R.id.et_smtp_recipient);
mCbEnabled = (CheckBox) findViewById(R.id.cb_smtp_enabled);
mCbEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
APPMSGMailUtils.setEnabled(getContext(), isChecked);
}
});
// 加载已保存的配置
loadConfig();
@@ -80,6 +91,7 @@ public class SMTPConfigView extends LinearLayout {
mEtSender.setText(APPMSGMailUtils.getSender(context));
mEtAuthCode.setText(APPMSGMailUtils.getAuthCode(context));
mEtRecipient.setText(APPMSGMailUtils.getRecipient(context));
mCbEnabled.setChecked(APPMSGMailUtils.isEnabled(context));
LogUtils.d(TAG, "loadConfig: SMTP配置已加载");
}
@@ -85,6 +85,14 @@
android:hint="recipient@example.com"
android:inputType="textEmailAddress"/>
<CheckBox
android:id="@+id/cb_smtp_enabled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="启用SMTP邮件发送"
android:textSize="14sp"
android:layout_marginTop="12dp"/>
<Button
android:id="@+id/btn_smtp_save"
android:layout_width="match_parent"