前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次APP的二开

记一次APP的二开

作者头像
花花522
发布2023-03-07 16:07:52
2930
发布2023-03-07 16:07:52
举报
文章被收录于专栏:花花爱咖啡

记一次app的二开

起因

文末会说: 这人需求很随意,说话就有点..

  • 客户需求:增加收藏

坑1

二开一定要确保app正常使用,否则就是无底洞

  • 项目结构

项目结构挺大的电脑加载会很卡,导致第一次build大概半小时,尝试运行,能build success,但是服务器连接失败

找客户要后端接口,客户应该不怎么懂技术,后面丢了服务器信息,在opt目录下找到的一些jar包,后面再根据客户提供的一个web界面找到的接口

总结:别跟客户扯太久,到这里已经花了两小时了

坑2

谈价方面 对市场价把握不清,没资本家的角度去看价格,最终要价600

开始修改代码,根据代码逻辑,因为这个app是一个mvp的架构,封装的有点过了(或者是就应该这样封装,倒是代码并不怎么好修改)

最终修改的代码

  • 定义消息发送基类
代码语言:javascript
复制
package com.tiocloud.chat.feature.session.common.action.model.base;

import com.tiocloud.chat.feature.session.common.SessionFragment;
import com.tiocloud.chat.feature.session.common.model.SessionContainer;

public abstract class BaseMessageAction extends BaseAction{

    private transient SessionContainer sessionContainer;

      public transient SessionFragment fragment;


    public SessionContainer getSessionContainer() {
        return sessionContainer;
    }

    public void setSessionContainer(SessionContainer sessionContainer) {
        this.sessionContainer = sessionContainer;
    }

    public BaseMessageAction(int iconResId, int titleId) {
        super(iconResId, titleId);
    }

}
  • 定义收藏按钮
代码语言:javascript
复制
package com.tiocloud.chat.feature.session.common.action.model;

import android.app.AlertDialog;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.blankj.utilcode.util.SPUtils;
import com.tiocloud.chat.R;
import com.tiocloud.chat.feature.session.common.action.model.base.BaseMessageAction;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class FavoriteAction extends BaseMessageAction {


    public FavoriteAction() {
        super(R.drawable.icon_im_yuyin, R.string.favorite);
    }


    @Override
    public void onClick() {

        LinearLayout linearLayoutMain = new LinearLayout(fragment.getActivity());// 自定义一个布局文件
        linearLayoutMain.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        ListView listView = new ListView(fragment.getActivity());
        listView.setFadingEdgeLength(0);
        List<Map<String, String>> nameList = new ArrayList<Map<String, String>>();

        Set<String> favorite = SPUtils.getInstance().getStringSet("favorite");
        for (String s : favorite) {
            nameList.add(new HashMap<String, String>() {{
                put("name", s);
            }});
        }

        SimpleAdapter adapter = new SimpleAdapter(fragment.getActivity(), nameList,
                R.layout.favorite_item, new String[]{"name"},
                new int[]{R.id.message});
        listView.setAdapter(adapter);
        linearLayoutMain.addView(listView);
        AlertDialog show = new AlertDialog.Builder(fragment.getActivity())
                .setTitle("发送收藏").setView(linearLayoutMain)
                // 在这里把写好的这个listview的布局加载dialog中
                .setNegativeButton("取消", (dialog1, which) -> {
                    dialog1.cancel();
                }).show();
        listView.setOnItemClickListener((adapterView, view, i, l) -> {
            getSessionContainer().proxy.sendMessage(nameList.get(i).get("name"));
            show.cancel();
        });
        listView.setOnItemLongClickListener((adapterView, view, i, l) -> {
            String name = nameList.get(i).get("name");
            Toast.makeText(fragment.getActivity(), "删除成功", Toast.LENGTH_SHORT).show();
            Set<String> favoriteSet = SPUtils.getInstance().getStringSet("favorite");
            HashSet<String> objects = new HashSet<>(favoriteSet);
            //移除
            nameList.remove(i);
            adapter.notifyDataSetChanged();
            objects.remove(name);

            return true;
        });


    }
}
  • 修改设置长按菜单的布局
代码语言:javascript
复制
BaseAction action = actions.get(i);
if (action instanceof BaseUploadAction) {
    BaseUploadAction uploadAction = (BaseUploadAction) action;
    uploadAction.fragment = fragment;
} else if (action instanceof BaseCardAction) {
    BaseCardAction cardAction = (BaseCardAction) action;
    SessionActivity sessionActivity = fragment.getSessionActivity();
    cardAction.activity = sessionActivity;
    cardAction.sessionType = sessionActivity.getSessionType();
    cardAction.chatLinkIds = chatLinkIds;
} else if (action instanceof BaseCallAction) {
    BaseCallAction baseCallAction = (BaseCallAction) action;
    if (fragment.getActivity() instanceof P2PSessionActivity) {
        baseCallAction.setP2PActivity((P2PSessionActivity) fragment.getActivity());
    }
} else if (action instanceof BaseRedPaperAction) {
    BaseRedPaperAction redPaperAction = (BaseRedPaperAction) action;
    redPaperAction.activity = fragment.getSessionActivity();
    redPaperAction.chatLinkIds = chatLinkIds;
}else if (action instanceof BaseMessageAction){
    BaseMessageAction action1 = (BaseMessageAction) action;
    SessionContainer container = fragment.getInputPanel().getContainer();
    action1.setSessionContainer(container);
    action1.fragment = fragment;
}

坑3

电脑买高配!!!必须高配,编译一次3分钟,没有任何效率可言

总之就是卡!!!

卡死了

其中其实是有一些改动的,但是都是可接受范围内,无非就是改下增加了一个取消收藏的功能,还算正常

坑4

后期改了挺多的,按理来说我上午就已经交付了,后面客户提示变更app名称和图标

  • 没注意看客户的图标
    • 安卓低版本bug吧,图标太大会被忽略,显示成安卓默认的那个很丑很丑的图标
    • 高版本没问题
    • 后面压缩图片搞定
    • 大概耗时1小时
  • app名称
    • 全局关键字替换,这里没啥问题
  • 客户主动加价100,后委婉的想要编译ios
    • xcode -> 不支持window
    • 远程客户电脑
    • 下载xcode
    • 到这里增加耗时2小时
    • 发送源码到客户机
    • xcode导入,索引
    • run -> 意外的success
    • 经过不断的尝试
    • 最终run起来了模拟器,能正常运行
    • 打包继续折腾了2小时,最终放弃

总结:不要心软!!!该说加价就说

坑5

客户有点点小奇葩

题外话: 别想那么多,别心软要价就行,那你该得的就行

结尾

其实app后端服务,app图标,背景图,到ios,早就已经超出了范畴

不知道这篇文章客户能不能看到,反正是很奇葩的,大不了去给差评

鸡汤

曾经走过每段的路程,都会是一种经历,也是一种成长的历练,就是在这样的人生,起起落落,浮浮沉沉,有悲伤,有快乐,有梦想,有目标,始终都没有放弃,心中的信念。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 花花爱咖啡 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 记一次app的二开
    • 起因
      • 坑1
        • 坑2
          • 坑3
            • 坑4
              • 坑5
                • 结尾
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档