안 드 로 이 드 모방 위 챗 공중 번호 인터페이스
위 챗 공식 플랫폼 은 현재 구독 번호,서비스 번호 와 기업 번호 로 세 가지 로 나 뉜 다.이 가운데 서비스 번호 와 기업 번 호 는 개방 권한 이 높 아 사용자 정의 메뉴 기능,카메라 및 LBS 등 API 호출 이 가능 하 다.
기본 통신 구 조 는 그림 과 같다.
프로젝트 의 기능 설계 단계 에서 서비스 번호 Demo 를 만들어 서 보 여 주 려 고 했 지만 위 챗 서비스 번호 의 인증 절차 가 너무 번 거 로 웠 고 나 도 서비스 번 호 를 개통 할 자격 이 없 었 다.그래서 자신 이 위 챗 공식 번 호 를 모방 하 는 기본 화면 을 만 들 려 고 합 니 다.먼저 메뉴 기능 을 실현 하고 개발 초기의 대중 번호 등록 을 피 하 는 동시에 전시 하기 도 편리 합 니 다.
선행 효과 도:
1.인터페이스 레이아웃
메 인 인터페이스 레이아웃 네 부분 은 위 에서 아래로 제목 표시 줄,메시지 목록,밑 에 있 는 메뉴 팝 업 의 하위 메뉴,밑 에 있 는 메뉴 나 입력 표시 줄 입 니 다.
메 인 인터페이스 기본 프레임 워 크 main.xml 코드 는 다음 과 같 습 니 다.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E4E4E4" >
<!-- -->
<ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="50dp"
android:layout_marginTop="10dp"
android:cacheColorHint="#00000000"
android:divider="#00000000"
android:dividerHeight="20dp"
android:scrollbars="none" >
</ListView>
<!-- -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="50dp"
android:orientation="horizontal" >
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<LinearLayout
android:id="@+id/pop_layout1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:id="@+id/pop_layout2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:id="@+id/pop_layout3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
<!-- -->
<LinearLayout
android:id="@+id/bottom_layout"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_gravity="bottom"
android:background="#00ffffff"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/bottom_menu_layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<View
android:layout_width="fill_parent"
android:layout_height="1px"
android:background="#A6A6A6" />
<LinearLayout
android:id="@+id/menu_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="horizontal" >
<ImageView
android:id="@+id/keyboard"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_marginTop="5dp"
android:layout_weight="0.5"
android:background="@drawable/keyboard" />
<View
android:layout_width="1px"
android:layout_height="fill_parent"
android:background="#A6A6A6" />
<RelativeLayout
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/btn_selector" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="5dp" >
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text=" "
android:textColor="#000000"
android:textSize="16sp" />
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@drawable/more_icon"
android:visibility="invisible" />
</RelativeLayout>
</RelativeLayout>
<View
android:layout_width="1px"
android:layout_height="fill_parent"
android:background="#A6A6A6" />
<RelativeLayout
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/btn_selector" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="5dp" >
<TextView
android:id="@+id/text2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text=" "
android:textColor="#000000"
android:textSize="16sp" />
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@drawable/more_icon"
android:visibility="invisible" />
</RelativeLayout>
</RelativeLayout>
<View
android:layout_width="1px"
android:layout_height="fill_parent"
android:background="#A6A6A6" />
<RelativeLayout
android:id="@+id/btn3"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/btn_selector" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="5dp" >
<TextView
android:id="@+id/text3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text=" "
android:textColor="#000000"
android:textSize="16sp" />
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@drawable/more_icon"
android:visibility="visible" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>
제목 표시 줄 titlebar.xml 레이아웃 은 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<!-- -->
<ImageView
android:id="@+id/title_bar_back_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dip"
android:src="@drawable/back" />
<!-- -->
<TextView
android:id="@+id/my_setting_title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text=" "
android:textColor="#ffffff"
android:textSize="20sp" />
<!-- -->
<ImageView
android:id="@+id/title_bar_my"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dip"
android:src="@drawable/my" />
</RelativeLayout>
타이틀 완성bar 레이아웃 후 values\styles.xml 에 사용자 정의 제목 표시 줄 테 마 를 추가 합 니 다.
<!-- -->
<style name="CustomWindowTitleBackground">
<item name="android:background">#32394A</item>
</style>
<!-- -->
<style name="myTheme" parent="android:Theme">
<item name="android:windowTitleSize">45dp</item>
<item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
</style>
메시지 목록 의 서버 메시지 item 레이아웃 itemleft.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<RelativeLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="4" >
<ImageView
android:id="@+id/server_image"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginLeft="2dp"
android:background="@drawable/qq"/>
<TextView
android:id="@+id/server_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_toRightOf="@id/server_image"
android:background="@drawable/text_bg_left1"
android:gravity="center_vertical|left"
android:textSize="16sp"
android:textColor="#000000"/>
</RelativeLayout>
<View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
메시지 목록 의 사용자 메시지 item 레이아웃 itemright.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1" />
<RelativeLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="4" >
<ImageView
android:id="@+id/user_image"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_marginRight="2dp"
android:background="@drawable/qq" />
<TextView
android:id="@+id/user_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="1dp"
android:layout_toLeftOf="@id/user_image"
android:background="@drawable/text_bg_right1"
android:gravity="center_vertical|right"
android:textColor="#000000"
android:textSize="16sp" />
</RelativeLayout>
</LinearLayout>
팝 업 하위 메뉴 레이아웃 childmenu.xml 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/child_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:gravity="bottom"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/test1"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:background="@drawable/btn_selector"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text=" "
android:textColor="#000000"
android:textSize="16sp" />
<View
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_alignLeft="@id/test1"
android:layout_alignRight="@id/test1"
android:layout_below="@id/test1"
android:background="#E4E4E4" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/test1"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:background="@drawable/btn_selector"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text=" "
android:textColor="#000000"
android:textSize="16sp" />
<View
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_alignLeft="@id/test1"
android:layout_alignRight="@id/test1"
android:layout_below="@id/test1"
android:background="#E4E4E4" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/test1"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:background="@drawable/btn_selector"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text=" "
android:textColor="#000000"
android:textSize="16sp" />
<View
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_alignLeft="@id/test1"
android:layout_alignRight="@id/test1"
android:layout_below="@id/test1"
android:background="#E4E4E4" />
</RelativeLayout>
</LinearLayout>
아래쪽 메뉴 에서 입력 상자 로 전환,입력 상자 bottommenu_layout 2.xml 레이아웃 은 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/bottom_menu_layout2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<View
android:layout_width="fill_parent"
android:layout_height="1px"
android:background="#A6A6A6" />
<LinearLayout
android:id="@+id/menu_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="horizontal" >
<!-- -->
<ImageView
android:id="@+id/menu"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_marginTop="5dp"
android:layout_weight="0.5"
android:background="@drawable/menu" />
<View
android:layout_width="1px"
android:layout_height="fill_parent"
android:background="#A6A6A6" />
<RelativeLayout
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_margin="5dp"
android:layout_weight="3"
android:background="#ffffff" >
<ImageView
android:id="@+id/voice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_marginLeft="5dp"
android:src="@drawable/voice" />
<!-- “+” -->
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:layout_marginRight="1dp"
android:background="@drawable/add"
android:paddingBottom="5dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="5dp"
android:text=""
android:textColor="#ffffff"
android:textSize="14sp" />
<!-- -->
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_toLeftOf="@id/add"
android:layout_toRightOf="@id/voice" >
<EditText
android:id="@+id/input_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:background="#00000000"
android:gravity="bottom"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:text=""
android:textColor="#000000"
android:textSize="16sp" />
<View
android:layout_width="fill_parent"
android:layout_height="1px"
android:layout_below="@id/input_text"
android:layout_marginTop="10dp"
android:background="#A6A6A6" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
2.코드 구현MainActivity.java
package com.example.wxdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
private LinearLayout bottomLayout;//
private LinearLayout bottomMenuLayout1;//
private LinearLayout bottomMenuLayout2;//
private RelativeLayout btn1;// “ ”
private RelativeLayout btn2;// “ ”
private RelativeLayout btn3;// “ ”
private LinearLayout popLayout1;
private LinearLayout popLayout2;
private LinearLayout popLayout3;//
private LinearLayout childLayout;// “ ”
private ListView lv;
private MyAdapter adapter;
private List<Map<String, String>> listData = new ArrayList<Map<String, String>>();
private ImageView keyboard;//
private ImageView menu;//
private Button send;//
private EditText inputText;//
private boolean open = true;//
private boolean flag = false;//
private boolean bind = false;//
private Animation animEnter;//
private Animation animExit;//
private View view;
private View view2;
private LayoutInflater inflater;
private int myID = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
R.layout.title_bar);//
inflater = MainActivity.this.getLayoutInflater();
popLayout1 = (LinearLayout) findViewById(R.id.pop_layout1);
popLayout2 = (LinearLayout) findViewById(R.id.pop_layout2);
popLayout3 = (LinearLayout) findViewById(R.id.pop_layout3);
bottomLayout = (LinearLayout) findViewById(R.id.bottom_layout);
bottomMenuLayout1 = (LinearLayout) findViewById(R.id.bottom_menu_layout1);
keyboard = (ImageView) findViewById(R.id.keyboard);
btn1 = (RelativeLayout) findViewById(R.id.btn1);
btn2 = (RelativeLayout) findViewById(R.id.btn2);
btn3 = (RelativeLayout) findViewById(R.id.btn3);
lv = (ListView) findViewById(R.id.lv);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
keyboard.setOnClickListener(this);
adapter = new MyAdapter(this, listData);
lv.setAdapter(adapter);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int id = v.getId();
switch (id) {
case R.id.btn1:
btn1Click();
break;
case R.id.btn2:
break;
case R.id.btn3:
btn3Click();
break;
case R.id.keyboard:
keyboardClick();
break;
case R.id.menu:
menuClick();
break;
case R.id.add:
sendClick();
break;
default:
break;
}
}
public void btn1Click() {//
Map<String, String> map = new HashMap<String, String>();
map.put("type", "0");
if (!bind) {
map.put("text", " ID , 。");
} else {
map.put("text", " , 。");
}
listData.add(map);
adapter.notifyDataSetChanged();
}
public void btn2Click() {//
// TODO
}
public void btn3Click() {//
if (open == true) {
view = inflater.inflate(R.layout.child_menu, popLayout3, true);
childLayout = (LinearLayout) view.findViewById(R.id.child_layout);
open = false;
}
if (flag == false) {
flag = true;
childLayout.setVisibility(View.VISIBLE);
} else {
flag = false;
childLayout.setVisibility(View.GONE);
}
}
public void keyboardClick() {// ,
view2 = inflater.inflate(R.layout.bottom_menu_layout2, bottomLayout,
true);
bottomMenuLayout2 = (LinearLayout) view2
.findViewById(R.id.bottom_menu_layout2);
animEnter = AnimationUtils.loadAnimation(MainActivity.this,
R.anim.my_pop_enter_anim);
animExit = AnimationUtils.loadAnimation(MainActivity.this,
R.anim.my_pop_exit_anim);
animEnter.setStartOffset(200);
bottomMenuLayout1.startAnimation(animExit);
bottomMenuLayout1.setVisibility(View.GONE);
bottomMenuLayout2.startAnimation(animEnter);
bottomMenuLayout2.setVisibility(View.VISIBLE);
menu = (ImageView) view2.findViewById(R.id.menu);
inputText = (EditText) view2.findViewById(R.id.input_text);
send = (Button) view2.findViewById(R.id.add);
menu.setOnClickListener(this);
send.setOnClickListener(this);
inputClick();
}
public void menuClick() {// ,
bottomMenuLayout2.startAnimation(animExit);
bottomMenuLayout2.setVisibility(View.GONE);
bottomMenuLayout1.startAnimation(animEnter);
bottomMenuLayout1.setVisibility(View.VISIBLE);
}
public void inputClick() {
inputText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus) {
send.setBackgroundResource(R.drawable.send_btn_bg);
send.setText(" ");
} else {
send.setBackgroundResource(R.drawable.add);
send.setText(" ");
}
}
});
}
public void sendClick() {
String text = inputText.getEditableText().toString();
inputText.setText("");
if (text != null && (!text.equals(""))) {
Map<String, String> map;
map = new HashMap<String, String>();
map.put("type", "1");// , 0, 1
map.put("text", text);
listData.add(map);
map = new HashMap<String, String>();
map.put("type", "0");
map.put("text", " , 。");
listData.add(map);
adapter.notifyDataSetChanged();
bind = true;
}
}
private class MyAdapter extends BaseAdapter {
public List<Map<String, String>> list;
private Context context;
private int type;
private ListView listView;
public MyAdapter(Context context, List<Map<String, String>> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder = null;
Map<String, String> map = (Map<String, String>) list.get(position);
if (map.get("type").equals("0")) {//
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_left, parent,
false);
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) convertView
.findViewById(R.id.server_text);
viewHolder.mImageView = (ImageView) convertView
.findViewById(R.id.server_image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mTextView.setText(map.get("text"));
} else {//
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_right, parent,
false);
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) convertView
.findViewById(R.id.user_text);
viewHolder.mImageView = (ImageView) convertView
.findViewById(R.id.user_image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mTextView.setText(map.get("text"));
}
return convertView;
}
}
private final class ViewHolder {
TextView mTextView;
ImageView mImageView;
}
}
이상 은 위 챗 서비스 번 호 를 모방 하 는 주요 코드 로 메뉴 기능 이 완전히 실현 되 지 않 아 실제 상황 과 수요 에 따라 추가 할 수 있 습 니 다.또한 아래쪽 메뉴 는 최대 3 개,이름 당 7 글자 로 제한 되 며,포 함 된 하위 메뉴 는 최대 5 개 까지 만 가능 하 다 는 점도 주의해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.