2020-04-30

MacBook下载和编译Android AOSP源码

MacBook下载和编译Android AOSP源码


一、安装

0.国内镜像

首先,推荐两个地方,也就是国内镜像来下载源码,强烈建议你看完,因为都一样的
科大源、清华源
注意事项:如果你不编译源代码,装源代码的磁盘格式,是任何格式都可以,但是你如果要在MacBook上编译源代码,那必须把磁盘格式变成Mac的日志格式,区分大小写的,也就是这个格式:
图片.png

1.安装repo和Git

Git的话,就自行搜素怎么安装了,这里介绍怎样安装repo。

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

运行 repo help可能会报错,或者有提示没有获得完整版
问题1.提示没有获得完整版
图片.png
问题2.提示没有这个命令
图片.png
解决第一个问题:
所以,要下载两个文件
第一个就是clone.bundle https://gerrit.googlesource.com/git-repo/clone.bundle
第二个就是git-repo https://gerrit.googlesource.com/git-repo
将clone.bundle复制到git-repo文件夹中
然后把git-repo这个文件夹中的所有文件都复制到上面创建的~/bin/目录下
然后执行下面的代码(其实这个已经解决了第二个问题,每次更换操作目录的时候,要得到repo的命令,都要执行这两个方法)

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc export PATH=$PATH:$HOME/bin 

再执行:repo init
得到这个界面
图片.png

然后查看repo的版本,执行:repo version
图片.png
到这里,repo就已经完整地安装完毕啦。

2.下载源码

然后就是开始下载源代码了
然后创建一个存放源代码的目录

mkdir AndroidSourcecd AndroidSource

然后呢老规矩,还是要每次用repo之前都要执行(这个暂时还没办法解决)

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc export PATH=$PATH:$HOME/bin 

然后执行

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

用来初始化代码目录。
得到这个界面
图片.png
成功了就是这样。到这里,已经得到AOSP源码的主分支,然后你想下载其他分支,就是其它版本的代码,你可以切换到其它版本。

cd .repo/manifestsgit branch -a | cut -d / -f 3 

这样就可以得到所有的版本,我这里选择了,android-10.0.0_r33这个版本,回到AOSP目录下,执行代码
repo init -b android-10.0.0_r33这样就切换到这个分支了,下载的也是Android10.0的代码,你也可以不切换,默认下载主分支,最新的代码,但我不建议这样做,因为后续可能会发生一些不可知的错误。
当然,在上一步初始化代码的时候,你已经知道你要下载哪个分支了,就可以直接以下代码:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r33

图片.png
然后开始同步代码:

repo sync

然后就开始同步代码,看到网速了吧,已经在开始同步了,看网速,我这里下载了五六个小时,网速还是不给力的。

图片.png

二、编译

1.机器

MacBook Pro

图片.png

2.JDK环境

查看JDK的安装位置
/usr/libexec/java_home
图片.png

在~/.bash_profile文件中配置JDK环境,
vim ~/.bash_profile 打开,加入你的JDK地址,配置JDK

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Homeexport JAVA_HOME=$JAVA_HOME

图片.png
source ~/.bash_profile 使得文件生效
echo $JAVA_HOME 输出JDK配置,看看是否生效
整个过程
图片.png

3.GCC环境

下载一个在终端下载一个gcc,就是命令:brew install gcc
或者下载软件Xcode就可以了。如果你没有brew命令,那就靠你自己解决搜索安装brew咯,这也是一个坑。

4.可提前解决的报错

报错1

图片.png
这个是因为我的分区不是Mac OS拓展(区分大小写)的分区,所以就报错了,因为的只有一块移动硬盘,又是exFat格式的,压缩卷不行,然后我格式化了移动硬盘,重新下载了一份代码,够刺激吧。

报错2

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

这个问题一直困扰着我,但是不知道怎么稀里糊涂地解决了,你可以尝试着执行以下代码:
就是增加java的堆内存,使得不会内存溢出

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

报错3

图片.png
这里官方都有提示可以这样修改:
图片.png
就是修改目录下这个文件system/sepolicy/tests/Android.bp,去掉stl: "libc++_static"

报错4:
图片.png
这是因为没有对应版本的SDK,查看Mac版本,我这里是没有10.15
在这个文件里build/soong/cc/config/x86_darwin_host.go ,添加你对应的版本
图片.png

报错4

Permission denied
权限问题,把整个源码都获得权限就可以了chmod -R 777 AOSP

报错5

也不管啥报错了,要先安装port,然后再安装以下的内容:

sudo port install gmake git gnupgsudo port install bison

5.编译

一切操作都在你的根目录下面执行
切换到Android源码的目录下,执行这个文件envsetup.sh
source /Volumes/lanjiabin/AndroidSource/build/envsetup.sh
或者切换到build目录下,直接source envsetup.sh

执行lunch
会让选择启动器,我选了24 ,输入24,回车,就是这个效果
也可以直接:lunch 24
图片.png

然后开始编译代码make -j4
其中-j后面的表示开始4个线程进行进行编译.
根据你的CPU数量来算,我就两个,乘以2就可以了,所以我的是4
经过漫长的等待,和多次错误,我终于编译成功了,我这破电脑用了11个小时,太恐怖了,我看别人就一个小时就完事,我这差点崩溃
图片.png

然后再执行

.envsetup.shlunch 24emulator

再等一会,就可以看到自己的虚拟机在启动了
图片.png

好的,先告一段落。

编程中我们会遇到多少挫折?表放弃,沙漠尽头必是绿洲。


非常简单的string驻留池,你对它真的了解吗

非常简单的string驻留池,你对它真的了解吗


昨天看群里在讨论C#中的string驻留池,炒的火热,几轮下来理论一堆堆,但是在证据提供上都比较尴尬。虽然这东西很基础,但比较好的回答也不是那么容易,这篇我就以我能力范围之内跟大家分享一下

一:无处不在的池

开发这么多年,相信大家对'池' 这个概念都耳熟能详了,连接池,线程池,对象池,还有这里的驻留池,池的存在就是为了复用为了共享,独乐乐不如众乐乐,毕竟一个字符串的生成和销毁既浪费空间又浪费时间,还不如先养着。

1. 说说现象

通常我们臆想中是这么认为的,定义几个字符串变量,堆上就会分配几个string对象,其实这底层有一种叫驻留池技术可以做到如果两个字符串内容相同,那就在堆上只分配一个string对象,然后将引用地址分配给两个字符串变量,这样就可以大大降低了内存使用,如果用代码表示就是下面这样。

  public static void Main(string[] args)  {   var str1 = "nihao";   var str2 = "nihao";   var b = string.ReferenceEquals(str1, str2);   Console.WriteLine(b);  }----------- output -----------True

2. 实现原理

那怎么做到的呢? 其实CLR在运行时调用JIT把你的MSIL代码转成机器代码的时候会发现你的元数据中定义了相同内容的字符串对象,CLR就会把你的字符串放入它私有的的内部字典中,其中key就是字符串内容,value就是分配在堆上的字符串引用地址,这个字典就是所谓的驻留池,如果不是很明白,我来画一张图。

3. windbg验证

可以用windbg看一下栈中的str1和str2是否都指向了堆上对象的地址。

~0s -> !clrstack -l 在主线程的线程栈上找到变量str1和str2

0:000> ~0sntdll!ZwReadFile+0x14:00007ff8`fea4aa64 c3    ret0:000> !clrstack -lOS Thread Id: 0x1c1c (0)  Child SP    IP Call Site000000ac0b7fed00 00007ff889e608e9 *** WARNING: Unable to verify checksum for ConsoleApp2.exeConsoleApp2.Program.Main(System.String[]) [C:\dream\Csharp\ConsoleApp1\ConsoleApp2\Program.cs @ 30] LOCALS:  0x000000ac0b7fed38 = 0x0000024a21f22d48  0x000000ac0b7fed30 = 0x0000024a21f22d48000000ac0b7fef48 00007ff8e9396c93 [GCFrame: 000000ac0b7fef48] 

从上面代码的 LOCALS 的 0x000000ac0b7fed38 = 0x0000024a21f22d480x000000ac0b7fed30 = 0x0000024a21f22d48可以看到两个局部变量的引用地址都是 0x0000024a21f22d48,说明指向的都是一个堆对象,接下来再把堆上的内容打出来。

0:000> !do 0x0000024a21f22d48Name:  System.StringMethodTable: 00007ff8e7a959c0EEClass:  00007ff8e7a72ec0Size:  36(0x24) bytesFile:  C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dllString:  nihaoFields:    MT Field Offset     Type VT  Attr   Value Name00007ff8e7a985a0 4000281  8   System.Int32 1 instance    5 m_stringLength00007ff8e7a96838 4000282  c   System.Char 1 instance    6e m_firstChar00007ff8e7a959c0 4000286  d8  System.String 0 shared   static Empty         >> Domain:Value 0000024a203d41c0:NotInit <<

可以看到,果然是System.String对象,这就和我的图是相符的。

二 驻留池的验证

1. String下的驻留池验证方法

很遗憾的是水平有限,由于驻留池既不在堆中也不在栈上,目前还不知道怎么用windbg去打印CLR中驻留池字典内容,不过也可以通过 string.Intern 去验证。

  //  // Summary:  //  Retrieves the system's reference to the specified System.String.  //  // Parameters:  // str:  //  A string to search for in the intern pool.  //  // Returns:  //  The system's reference to str, if it is interned; otherwise, a new reference  //  to a string with the value of str.  //  // Exceptions:  // T:System.ArgumentNullException:  //  str is null.  [SecuritySafeCritical]  public static String Intern(String str);

从注释中可以看到,这个方法的意思就是:如果你定义的str在驻留池中存在,那么就返回驻留池中命中内容的堆上引用地址,如果不存在,将新字符串插入驻留池中再返回堆上引用,先上一下代码:

  public static void Main(string[] args)  {   var str1 = "nihao";   var str2 = "nihao";   //验证nihao是否在驻留池中,如果存在那么str3 和 str1,str2一样的引用   var str3 = string.Intern("nihao");   //验证新的字符串内容是否进入驻留池中   var str4 = string.Intern("cnblogs");   var str5 = string.Intern("cnblogs");   Console.ReadLine();  }

接下来分别验证一下str3是否也是和str1和str2一样的引用,以及str5是否存在驻留池中。

ConsoleApp2.Program.Main(System.String[]) [C:\dream\Csharp\ConsoleApp1\ConsoleApp2\Program.cs @ 37] LOCALS:  0x00000047105fea58 = 0x0000018537312d48  0x00000047105fea50 = 0x0000018537312d48  0x00000047105fea48 = 0x0000018537312d48  0x00000047105fea40 = 0x0000018537312d70  0x00000047105fea38 = 0x0000018537312d70

从五个变量地址中可以看到,nihao已经被str1,str2,str3共享,cnblogs也进入了驻留池中实现了共享。

2. 运行期相同string是否进入驻留池

这里面有一个坑,前面讨论的相同字符串都是在编译期就知道的,但运行时中的相同字符串是否也会进入驻留池呢? 这是一个让人充满好奇的话题,可以试一下,在程序运行时接受IO输入内容hello,看看是否和str1,str2共享引用地址。

  public static void Main(string[] args)  {   var str1 = "nihao";   var str2 = "nihao";   var str3 = Console.ReadLine();   Console.WriteLine("输入完成!");   Console.ReadLine();  }0:000> !clrstack -l000000f6d35fee50 00007ff889e7090d *** WARNING: Unable to verify checksum for ConsoleApp2.exeConsoleApp2.Program.Main(System.String[]) [C:\dream\Csharp\ConsoleApp1\ConsoleApp2\Program.cs @ 33] LOCALS:  0x000000f6d35fee98 = 0x000002cb1a552d48  0x000000f6d35fee90 = 0x000002cb1a552d48  0x000000f6d35fee88 = 0x000002cb1a555f280:000> !do 0x000002cb1a555f28Name:  System.StringMethodTable: 00007ff8e7a959c0EEClass:  00007ff8e7a72ec0Size:  36(0x24) bytesFile:  C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dllString:  nihaoFields:    MT Field Offset     Type VT  Attr   Value Name00007ff8e7a985a0 4000281  8   System.Int32 1 instance    5 m_stringLength00007ff8e7a96838 4000282  c   System.Char 1 instance    6e m_firstChar00007ff8e7a959c0 4000286  d8  System.String 0 shared   static Empty        >> Domain:Value 000002cb18ad39f0:NotInit <<

从上面内容可以看到,从Console.ReadLine接收到的引用地址是 0x000002cb1a555f28 ,虽然是相同内容,但却没有使用驻留池,这是因为驻留池在JIT静态解析期就已经解析完成了,也就无法享受复用之优,如果还想复用的话,在 Console.ReadLine() 包一层 string.Intern即可,如下所示:

  public static void Main(string[] args)  {   var str1 = "nihao";   var str2 = "nihao";   var str3 = string.Intern(Console.ReadLine());   Console.WriteLine("输入完成!");   Console.ReadLine();  }ConsoleApp2.Program.Main(System.String[]) [C:\dream\Csharp\ConsoleApp1\ConsoleApp2\Program.cs @ 33] LOCALS:  0x0000008fac1fe9c8 = 0x000001ff46582d48  0x0000008fac1fe9c0 = 0x000001ff46582d48  0x0000008fac1fe9b8 = 0x000001ff46582d48

可以看到这个时候str1,str2,str3共享一个内存地址 0x000001ff46582d48

四: 总结

驻留池技术是个很🐮👃的东西,很好的解决字符串在堆上的重复分配问题,大大减小了堆的内存占用,但也要明白运行期的IO输入无法共享驻留池的解决方案。

好了,本篇就说到这里,希望对你有帮助!


如您有更多问题与我互动,扫描下方进来吧~



Web API 约定

Web API 约定


Web API 约定

默认的约定

集将应用于 ContactsConventionController 中的所有操作:

[ApiController][ApiConventionType(typeof(DefaultApiConventions))][Route("api/[controller]")]public class ContactsConventionController : ControllerBase{

默认的约定集将应用于程序集中的所有操作:

[assembly: ApiConventionType(typeof(DefaultApiConventions))]namespace ApiConventions{ public class Startup {

创建 Web API 约定

如果默认 API 约定不能满足需要,请创建自己的约定。 约定是:

  • 带有方法的静态类型。
  • 能够对操作定义响应类型和命名要求。

响应类型

这些方法使用 [ProducesResponseType][ProducesDefaultResponseType] 属性进行批注。 例如:

C#复制

public static class MyAppConventions{ [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public static void Find(int id) { }}

如果没有更具体的元数据属性,则将此约定应用于程序集可强制实现以下内容:

  • 该约定方法应用于所有名为 Find 的操作。
  • id 操作上存在名为 Find 的参数。

命名要求

[ApiConventionNameMatch][ApiConventionTypeMatch] 属性可应用于约定方法,确定它们所要应用的操作。 例如:

C#复制

[ProducesResponseType(StatusCodes.Status200OK)][ProducesResponseType(StatusCodes.Status404NotFound)][ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]public static void Find( [ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)] int id){ }

在上面的示例中:

  • 应用于该方法的 Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefix 选项表示该约定可匹配前缀是"Find"的任何操作。 匹配的操作可以是 FindFindPetFindById
  • 应用于该参数的 Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffix 表示该约定可匹配带有唯一以标识符作为后缀结尾的参数的方法。 示例包括 idpetId 等参数。 与此类似,可将 ApiConventionTypeMatch 应用于类型,以约束参数类型。 params[] 参数指示无需显式匹配的剩余参数。

如何做好网络推广的营销策划

如何做好网络推广的营销策划


 短视频,自媒体,达人种草一站服务

首先我想说,做线上推广是一件很重要的事情。如果你认同了这一点的话,那你就得认同做推广之前得先有个计划,也就是营销方案。这个营销方案你可以不着急确定,事先做足团队沟通,市场调查,做好执行方案以及费用预算等等。废话一句,此方案一旦确定就不能改变。

比方说你现在想把谋个产品推广出去,从而实现销售的目的。那么你就要开始思考自己的目标客户一般会出现在网上的哪个地方,把这些地方都罗列出来。然后思考自己目标客户大概喜好是什么样子从而撰写推广文案。

为什么说营销方案一旦确定就不能改变呢?请耐心看完整篇文章,您所有的疑问都会迎刃而解。

很多的个人还有企业在做线上推广的时候,事先都没有做一个推广方案出来。结果就会导致东一榔头,西一棒子。做的所有事情都是半成品。广告位买好了,广告没有做出来。平台认证做好了,内容没有做出来。内容做好了没有发出去,发出去了没有推广,推广了的没有效果。为什么没有效果呢?

我想说一个故事:朋友小A本来是一名很出色的网络推广高手,我跟他一起合作过很多推广项目,跟他一起做事的时候,我的心就像大海一样澎湃,因为我知道,他会搞得定。有一次他去到一家公司帮那个老板做线上推广。一开始老板跟他说的是做公众号推广,因为公众号本身是没有自带流量的,把内容做到那个上面的话就意味着还得自己去推广才能获得流量。于是他跟老板提建议说,为什么不能直接把内容做到有流量的地方去呢?老板一开始没理他,过了几天才跟他说那不如做短视频吧,只要内容做好了平台就会分配流量。

但这个时候,他已经做了很多的图文类的内容了,这些内容也是只能发到公众号上面去的,一下就又不做这个了,那前面的事情不就是白做了吗?当然,我的这个朋友小A性格也确实是挺好的,又耐着性子去帮那个老板做短视频。

可做短视频,不就是要购买一下摄影器材,还要开通一下做视频软件的会员这都是应该的嘛。其实去买这些东西的时候,老板就已经有些不开心了。东西买回来以后那就开始写文案策划然后开始拍,拍完以后开始做。做完以后就开始要发出去了。这个时候又遇到一个问题,短视频平台的认证还没有做,而如果不做认证的话就不能发营销类的视频,否则平台封号。于是我的这个朋友小A又厚着脸皮去申请认证经费,因为平台认证是要钱的。老板也把钱给他了,但这次老板已经明显很不开心了。

那么现在拿到钱了,总归可以开始认证然后发视频出去了吧?这个时候又出现一个问题,本来一家企业只要提供营业执照然后费缴就可以认证成功的。可偏偏这是一家加盟了别人公司品牌的企业。这个时候如果要用品牌名称来命名账号的话,就需要品牌方出授权书。可偏偏这个事情就卡住了。因为某种原因短时间内拿不到这个东西。朋友小A跟老板说不如换个名称?老板干干脆脆的把我朋友小A说了一顿,不能用这个品牌,我花那么多加盟费干什么@#!¥@4!最后这个事情就这样僵住了。

可上班不能不干活呀,那我的这个朋友小A还是来做这个公众号吧。那说到公众号推广,业内人士都懂,请大V转发,购买平台的广告位、等等。这些东西都是要花钱的,而且价格很贵。我朋友心里就想啊,这些方法老板一定不能同意。所以他就决定幸苦一点,手动去推广。怎么个推法呢?因为他老板的公司只是做本地生意的,所以他就想加200个本地微信群,后期通过同行合作的方法互换到1200个本地群。可前面的这些群,他也是需要一些经费才能加上的。经过我朋友初步的估算大概是需要1500这个样子。

他不能自己去垫这个钱吧?但他也知道老板肯定也不想给他这个钱了。于是他就想了一条计策。他列了三条推广方案发给老板。老板果不其然就选择了群推广这一条。因为这一条推广方案不仅便宜,而且后期价值巨大。

万万没想到啊!老板突然这个时候问他,你来公司一个多月了,你除了要钱要钱,你TM还干了些什么?!我朋友小A此时哑口无言,他不知道怎么去解释。多年的职业素养也不允许他去解释。可老板见他不说话,就越觉得我朋友小A是心虚。那么结果,肯定就是被开除。

我这个朋友收到了这样的待遇,他也是气不过,有一次喝酒的时候,他就跟我说了这个事情。然后我就告诉他,以后长点记性吧,做事之前先跟老板确定,明确告知整个事情做完以后会有什么效果,如果做到一半不做了又会是什么样子。你讲清楚了再去做一定会更好。

当然,我也没有必要安慰他什么,像我们这类人找工作其实还是不难的,实在不行不上班也没事。所以对于我们来说损失是没有的,只是事情发展成这样,谁都不愿意看到。那么最好的解决方式就是事先做好一份详细的营销方案,目标客户定位以及费用预算。把这些事情都做到位了,跟老板确定好了,再交给老板一个详细的执行方案。

哪怕是有足够自信的高手,有着极强把控局和势应变能力的人,也会败给事先没有营销方案。这类高手他是什么情况呢?他觉得没必要,因为他认为自己不可能会出现半途而废的情况,毕竟他是高手。包括我自己刚出道的时候也是这样,觉得没必要那么麻烦,毕竟自己那么牛,于我而言,只要有了目标就一定会实现。

对于傲视群雄的高手尚且如此,何况......说了这么多,我只想表达一个观点,做线上推广之前先做一份详细的营销方案。这个东西一旦确定就不能改变,请谨慎。他的重要性丝毫不亚于长途开车时的导航系统。

做营销=做噱头+做广告创意?NO!那只是表象,是最终的展现结果。

而在这之前,有许许多多的细致的工作需要我们去处理,去完善,去执行,甚至是去妥协。

通过产品研究从而确定目标客户——做一个目标客户画像——确定推广预算和预期效果——制定线上推广方案——制定执行方案——文案——渠道——达到预期效果。

一个有效的线上推广营销方案,它就像是一条鲜活的生命。那只要是生命,就会有它的生命周期。一般情况来讲我们为企业或者个人制定的线上推广营销方案是为期半年至一年的。长一点的是一年至三年。最长的有多长?IBM帮华为做了一个为期二十年的营销方案。这是一个什么概念呢?比方说这个做宠物喂食器的厂家,现阶段资金不够充裕,也没有一个造品牌的打算,他的整个一个推广行为只是为了销售。但是半年以后呢?他可能资金充裕了,他想要造品牌了,他想招代理加盟商了,那这个时候就需要制定另外一份营销方案。为期二十年的营销方案其实是有点恐怖的,它一定是把所有的方方面面都包括在里面了。那做这个东西的人,它的水准一定是王者以上,而且还不止一个。

何为营销?四个字回答:一对一群!那么第一步就是通过研究产品,确定目标客户群体。比方说我现在卖价值3000的智能宠物喂食器。请问您觉得什么样的人才需要这样的产品呢?答:首先他得有宠物、而且他还得没有足够的时间去陪伴自己宠物,他还得是一个人住。因为他如果有足够的时间陪伴他就不需要这种机器,因为他如果有老婆孩子,会有老婆孩子在家照顾宠物那也就不会需要这种机器。可能你会说,或许他孩子要上学,老婆要上班呢?嘿嘿嘿,我可以明确告诉你如果是这样的话,他不会养宠物。

综合来看,我们的客户应该有点闲钱,月薪一定是在1-2w左右,至少也得有7.5K到8K。因为他如果没有这个收入的话,他不可能在上班很忙的情况下还养宠物,更不会花这个买机器的钱。

那么这样子的一群人,他们会出现在网上的那些地方呢?我们写什么样的东西给他看才能使他触动呢?聪明如你,有了以上的这些已知条件,很容易就可以推算出来。

那么在做文案和投放的时候,我们首先需要确定什么事情?答:费用预算和预期效果!我们把目标客户想看的东西送到目标客户眼前使他看到,一定是要花钱才可以的。就看用什么样的方式花多花少的问题。那么钱出去了,就一定是要有预期效果的。

费用预算确定好了,现在就根据目标客户画像,根据费用预算来做一个营销方案,从而就可以得出预期效果。怎么得的呢?比方说,我在确保我的广告文案百分百能对自己的目标客户产生吸引力的情况下,我去一个宠物保养类网站投一块广告位。这个网站每天会有一万个宠物爱好者去点击,这些人当中有些已经买好了的,有些自己有时间陪伴的,有些消费不起的,有些用不上的(有的人养的是鱼)等等等等、我砍掉它九成,那也就是说,我们能通过这个网站获得1000个客户。那就是300w的销售额、一半利润的话就是150w。所以这块广告位的预算可以是15w一年。

那这个时候你又要问了,如果没有这个预算怎么办?两个解决办法,第一是跟网站合作,谈利润分成。第二是去该网站发帖子做推广。如果这两条路都行不通怎么办?你可以换个网站谈嘛!又不止它一家的咯。总之有钱是有钱的办法,没钱是没钱的办法嘛。

整个的一个线上营销的推广方案大概就是这样子去布局,如果不出意外的话,最终都是能够达到预期效果的。因为所有的事情都是经过精密的调查和推算的。

当然,还有最重要的事情,要放到最后来说:如何解决客户信任问题?款付货不发,质量有问题,没有如实描述,售后态度差等等。

答:方法一:找马总或者刘总,让他们提供一个平台给到你做担保交易。

方法二:建立公司官网,管局备案。

方法三:方法一二同时使用,把两者打通,在自己的官网给自己的店铺做一个广告位。

方法四,方法五.....很多很多。我就不一一赘述了。

营销方案做完以后就可以执行了吗?NO!NO!NO!方案是死的,人才是活的,再好的方案也要有厉害的人才能够执行出来的。作为老板,你敢让公司的前台去写广告文案吗?你敢让公司的洗碗阿姨去找投放渠道吗? 你敢让一个没有谈判能力的人去跟谈渠道合作吗?如果执行这个方案的人有些地方不懂不会,那我们只能选择妥协,去改变方案!

那整个的一个营销方案做出来以后,我们干什么?我们首先把这整个方案所有需要去做的事情列一张表格出来,然后把所有适合做这些事情的人召集起来开一个会。你把任务分配给他的时候一定要问清楚,他能不能做好,准备怎么去做,你有什么好的建议。经过团队沟通,确保事事有人做。

由于整个的一营销方案,一旦开始就不能停止,因为一旦半途而废损失无法估量。所以!开始之前一定要谨慎再谨慎。整个营销方案的可行性,执行方案的合理性,一定要经过反复的推演。切记!切记!其实是有补救办法的,但我不想说。因为我如果说了你就会有所依仗,你就会有恃无恐。总之、谨慎一些吧。

作者:网推界第一高手

来源:卢松松博客,欢迎分享


亚马逊站外推广实操干货,教你如何站外引流【亚马逊运营必看】

亚马逊站外推广实操攻略,不多说,直接上干货。

一、社交推广

在国外,流行的社交平台有Facebook, Twitter, Pinterest , Quora, Instagram等,其中Facebook是零售渠道的王者。FB就像微博一样,需要建立你自己的专页,圈粉引流,那具体应该怎么做呢?

以下是facebook的推广步骤:

1. 建立facebook账户,增加目标国家的好友。比如做的是美国站,就加美国的好友。

2. 定期更新内容,保持账号活跃度。怎么打造内容?明确一个要做的垂直领域,运动、音乐、母婴、时尚都属于垂直领域,选择和产品相关的垂直领域做内容。明确领域后,要看一下领域内现在活跃的大V都是如何做的,然后找一个有差异化的点打造自己的账号。

3. 互动。和粉丝互动,认真回复粉丝的留言。组建和加入群组,群组是社交网站的核心,经常和群组的人互动,会给账号带来更多的流量。

4. 使用facebook里的商店插件,在商店里定期推出一些活动,给予你的粉丝一些好处。

5. 操作一段时间后,把账号养起来,就可以定期发布产品的广告文案引流了。

二、博客推广

利用wordpress、myspace、自己建立的博客等做产品推广,都属于博客推广。

以下是博客推广的思路:

1. 内容定位。注册博客平台,定位好要做的垂直领域,然后在博客中发布高质量的内容。

2. 关键词布局。将产品相关的热门搜索词统计出来,再植入到博客当中。

3. 做好内容和关键词的布局后,引入的流量就会精准许多,可以开始做产品的软文工作正式引流了。

三、邮件推广

邮件营销是非常好用的运营手段。做好邮件营销,需要握好发邮件的时间、标题、内容等等几个技巧,才能有效提高销量。

以下是邮件推广的步骤:

1. 利用独立站、社交媒体和粉丝群获取邮件地址

2. 打造邮件内容,安排好时间发送邮件。邮件的标题需要有吸引力,千万不要在标题中直接索评,这样会让买家十分反感。一天中的上午八点、下午一点和下午四点是平均打开率最高的时间段,而上午六点、上午八点和下午一点是平均点击率最高的时段(美国时间),所以建议在这几个时间点发送邮件。

四、图片推广

国外热门的图片网站有http://pinterest.com、http://fashiolista.com等。 这类网站的图片会有很多的标签,很多的长尾关键词来吸收流量。这类网站以图片为主,会给人更好的视觉冲击,能够刺激别人的购买欲望。

以下是Pinterest推广的步骤:

1. 注册Pinterest账户,设置好这些图片的标题及属性。

2. 添加自己店铺或者产品的链接。

3. 优化关键词,将图片的排名做上去,得到更多的流量。

五、YouTube红人推广

YouTube作为全球最大的视频社交平台,其全球活跃用户超过10亿人,它在各地的营销价值甚至远远超越某些市场本土的媒体,而且YouTube上更是有无数的网红可以用来做引流推广,利用好了能带来巨大的流量。

以下是YouTube红人推广的步骤:

1. 寻找红人。用第三方平台像contentblvd、brandbacker、influenster、IZEA、hyprbrands、Scrunch、Markrwatch、Famebit.com来寻找红人。

2. 筛选红人。用http://socialblade.com查询的红人名字,排名,视频数量,观看数量,订阅量,最近30天的订阅情况等等。

3. 合作谈判。准备好给红人写信的模板,用邮件联系。和红人沟通视频怎么做,不要忘了植入店铺的链接。

六、短视频营销

随着Tiktok的火爆,引起全体跨境卖家关注。因为Tiktok是新兴的,具有强大带货能力的平台,是难得的机遇,充满无限可能。

以下是Tiktok红人推广的步骤:

1. 产出垂直领域的视频内容。

2. 按照Tiktok算法指标的完播率、点赞率、评论率、转化率、关注比、复看率这六个要素去优化视频内容。

3. 植入跳入亚马逊店铺的链接,tiktok视频被分配到的流量越大,则引入店铺的流量就越多。

站外推广还有很多思路,像Deal网站促销、Review站引流、谷歌搜索广告等等,都是站外推广的有效方式。新手的话就多去实践,尽量多接触各种站外推广的营销策略。成熟的运营,优化当下的站外推广策略,并寻找新的推广途径即可做好站外推广。希望你看了这篇文章后能有所收获,让站外推广给你的店铺,有效的带来更多的流量。


文章来源:https://www.ikjzd.com/home/121013

亚马逊日本站如何选品_亚马逊日本站选品攻略

随着历年"樱花季"的消费潮来临,亚马逊日本站的市场所迸发出的消费潜力大家都是有目共睹的。但亚马逊日本站如何选品却不是一件简单的事,很多欧美热销的大卖进驻日本站后,没有及时调整自己的亚马逊选品思路及策略、产品线规格,导致吃了闭门羹。

所以做日本站选品运营还是需要对亚马逊日本站热销产品有一定的认知,总结热销款的经验,了解日本的消费人群喜好,并将之灵活嵌入到自己产品身上,才有成为亚马逊爆款的可能,所以不妨先和小编一起先对当下的日本站进行一个初步的了解。

一、市场现状

2019年全球电商销售份额数据显示,日本的电商规模排名高居全球第四。而从增长趋势来看,日本电商规模也在逐年增长,日本电商化程度也在逐年提升。

二、消费喜好

日本是经济发达国家,且西化程度较高,消费习惯与欧美接近,除去日本特有的文化节日,大部分促销季也相似,比如:圣诞、元旦、情人节、母亲节、父亲节、PrimeDay等。

但若如此,就套用美国站和欧洲站的成功经验,往往是不合适的。在亚马逊日本站选品的时候,一定要注重产品差异化优势和质量优势,因为在日本站销售产品并不如在欧洲站这般,产品大众化,外观等等都差不多的,细节入微的差异化需求才是赢得好评的关键。

而且日本消费者工匠意识浓厚,对产品的细节把控可以说是以严苛来形容的,所以品控意识一定要到位,低质产品在日本是不可能存在活路的,而且别以为低价吸引到流量,低价换流量的策略往往在日本站也是行不通的,优质的产品和listing,是成为亚马逊爆款的基本要求。

三、热品分析

我们都知道,日本人受美国文化影响,如上班族的西装文化、棒球、野营等运动都深受欢迎,从品类上看,除去中国卖家难发展的品类如图书音像、食品医药等类目,服饰、消费电子、厨房家电、家居家装几个品类在美国和日本都占据一定市场份额,日本站可以优先从这些品类入手。

服装:

日本女性通常喜欢为自己添置连衣裙来做出行穿搭,男性则偏爱简洁风——一年四季可单穿或作为内搭的T恤也较受欢迎。由于体格偏瘦,日本男性也喜欢在购买裤子时强调塑身、收裤腿。日本每年的4月份是大学生求职的高频阶段,一些拥有蕾丝元素、较为简洁的衬衫、职业套装等都是该时期女性大量购置的产品。

家居产品:

日本的岛国性质,人多地少,让大多数住宅的面积是70㎡左右,所以日本消费者在购买家具用品时,首要考虑的就是对空间的合理利用,可以折叠和压缩的家居产品十分受欢迎:

可折叠的家居小物:伸缩衣架,可折叠盆,收纳盒,折叠篮,置物架等

方便收纳的小尺寸家具:储物架,电视支架,衣架,书架,户外椅等

户外运动:

与美国人一样,日本人也非常喜欢登山、野营、烧烤等户外活动。但与美国站运动品类旺季集中在年底不同,日本的运动品类销量随着气温趋势变化波动,越到夏季销量越高,在Prime day前后迎来销量的最高峰。

相对于其他很多需要注意的品类来说,户外这块的很多产品可以直接拿到日本站来销售,但需要在上半年提早做好准备!尤其是从4月份开始,户外烧烤所需的餐桌椅、帐篷、小推车等产品,高客单价的大件健身器材,应季的保冷包、太阳镜、潜水镜等,就开始热销了。

不过今年受疫情影响,相关产品的销售额可能出现不同幅度的下跌,挑选相关品类作为上新选择需要更加谨慎。

除此之外,想成为亚马逊日本站热销产品,还要注意一些小细节:

1、精美而有设计感的包装设计:

小到零食,大到衣柜,既拥有日本传统文化元素,又带有现代创意元素的包装最能打动日本消费者。

2、符合日本消费者审美的时尚品类配图:

模特以亚洲人为宜,可多多参考日本时尚杂志的配图。

3、地道、丰富翔实且还原使用感的产品描述;

用语需要简洁地道,但同时也不要怕罗嗦,特别是在涉及产品安全性等方面时,多啰嗦几句,突出使用触感,更能提高日本消费者的购买欲望。


文章来源:https://www.ikjzd.com/home/121000

亚马逊夏季爆款提前热卖!物流什么时候才恢复正常?

不知道是不是和隔离期囤食物有关,今年的冰箱、冷冻柜产品这类产品从疫情开始销量就增长很快。很多欧美家庭里原有的冰箱空间应付不了突如其来的库存,一堆需要保鲜的食物没地方放,不得不额外加购设备。这些往年本来在盛夏热卖的产品,今年提前成为了爆款。

近期在美国亚马逊上,整个Appliances品类的飙升榜前100名中,不同规格大小的冰箱、冰柜、制冰机相关的产品几乎占据半壁江山,其中仅是制冰机就有近20款。

1225.png

欧美人民真的很少喝热水,各种饮品里面都要加冰块,可以说对冰块有着强大的执念,不少人还喜欢干嚼冰块。难怪,制冰设备在美国人的生活里有着不可或缺的地位,制冰机可能还是不能出外买冷饮、熬过枯燥居家令中获得快乐的最快途径。

1226.png

比如,以下这款制冰机,是今年的新品,拿到了Appliances大类新品榜的第一位。只要插上电源,倒入适量的水,按照控制面板上的提示选择指定规格的冰块,几分钟之后就会制造出冰块。制冰机里的冰桶装满了或者水用完了都会有信号提示,制好的冰如果不马上用,可以转移到冷冻柜,因为制冰机没有保温功能,时间长了冰块会融合变成水,不过水又可以重新用于制造新的冰块。



目前亚马逊上卖得比较好的制冰机,从功能到造型上都很相似,体积都比较适中,非常适合家用。

1229.png

冰箱和冰柜,在欧美则更是长期有稳定需求的产品。近年来,产品向着小型、可移动的方向升级。

mini冰柜、mini冰箱、车载冰箱,这两年都是上升趋势很快的产品,据统计,整个mini制冷设备市场规模有14亿美元左右。

1330.png

mini制冷设备的配置要求一般是,60L以下的小容量,20kg以下的重量,身材要苗条,体积小于60*60*80cm(长x宽x高),方便移动携带,噪音要低,40分贝以下。

一般符合以上要求的冰箱基本都是单开门,功能是冷藏或者冷冻二选一,这类产品是小空间的理想制冷设备,适用于小型公寓、大学住宿、办公室、车库、房车里以及需要额外冷冻空间的家庭等。

例如以下这款mini冰柜,就是主攻冷冻功能,容量是1.1立方英寸,长宽高大约是44*47*48cm,内置一块隔板,体积比较娇小,冰柜门可以根据放置的场地选择从左侧开或者右侧开,这是几乎是所有单开门冰柜的标配功能,专门为了方便狭小空间摆放而设计的。

这台冰柜的制冷温度范围-14℃~-22℃,用于保存雪糕冰淇淋、冰冻海鲜、速冻食品、冰块等等,从展示图上来看,还能存放不少东西。

1333.png

以下这款,则具有多个尺寸选择,符合mini要求的还有一款是2.1立方英寸,长宽高大约是45*55*64cm,内置两块可拆卸隔板。


从亚马逊Upright Freezers小类的新品榜和热销榜上来看,大多mini冰柜的设计都是方方正正、规规矩矩的灰黑白小方块。

1336.png

还有这款mini冰箱,主攻冷藏功能,容量是1.7立方英寸,长宽高大约是44*47*50m,目前有600多Review,是一个Amazon's Choice产品了。

1337.png

内置一块玻璃隔板,整个冰箱主体可设置的最低温度是0℃,用于冷藏食物、啤酒饮料等,不过它顶部有一个8cm*5cm大的冷冻格,小心机设计可以满足小小的冰冻需求。

1338.png

以下这款mini冰箱同样有几个不同尺寸,其中符合mini要求的容量是2.5立方英寸,长宽高大约是44*47*68cm。

1339.png

内置两块可移动的玻璃隔板,冷冻格的体积比1.7立方英寸那款稍大一点。

1440.png

从Compact Refrigerators小类热销榜来看,mini冰箱的设计也是大同小异,不过对比mini冰柜来说好了点,起码多了点颜色变化。

1441.png

还有用于冷藏饮料的饮料冰箱,能最大程度利用冰箱空间来摆放饮料罐,像以下这款1.6立方英寸容量大小的冰箱就可以容纳60罐饮料,或者17瓶葡萄酒。用于厨房、办公室、宿舍或着私人酒吧都是非常完美的。

1442.png

除了mini冰箱冰柜,还有超mini冰箱。这类冰箱空间更小,当然也更加便携,多用于存放面膜、化妆品、护肤品、香水等,有美容小冰箱的称号,冷藏可以防止口红在夏季融化软化,减少香水液体和气味蒸发,护肤产品冷藏可以保持营养成本的活性,也可以用于存放药物、母乳等。

以下这款超mini冰箱在两个小类目都拿到Best Seller,容量4升,就是可以放6瓶330ML铝罐可乐的容量,能冷却的最低温度是0℃,虽然不能制热,但是可用于保温,断电封闭的情况下可以让热食不容易冷却,噪音低于25分贝,能用车载电源供电。

1443.png

1444.png

1445.png

这种小冰箱的受众大多都是女性,有专为美容护肤购买的美容达人,有专为储备母乳用的妈妈,有专为存放自带便当的白领等等,所以从目前亚马逊的产品热销榜上来看,小冰箱的设计都是比较好看的,粉嫩可爱与时尚感并存。

1446.png

以下这款产品,定位更加明确,冰箱门就是个带可调光led灯功能的化妆镜,小小个还可以直接摆放在化妆台面上。

1447.png

超mini冰箱的容量规格大概有4L、6L、9L、10L、15L、20L这几种。

1448.png

1449.png

1550.png

1551.png

1552.png

超mini冰箱是车载冰箱不错的选择,如果再加上车载和户外的特色功能,如专为泥泞的山路或陡峭的山谷设计的户外适应性,在颠簸不平的路途中也能出色完成制冷工作等,对于常外出自驾游的欧美户外达人来说,一定会非常喜欢。而确实,从今年发布的新品来看,这些功能确实已体现出来。

1553.png

车载冰箱也有不同的容量选择,像这款产品就有30L、40L、50L的容量可供选择。整体容量都比超mini冰箱大。另外值得说一说,图片制作看起来很直观,很专业,这样对提升销售转化非常有帮助。

1554.png

夏天要来了,各种制冷设备提前热卖,这是一块大蛋糕!而且,目前设备向小型化、轻量化方向发展,对于进入这个领域的卖家,事实上经济负担可以减轻一点。大货重货确实不是每个卖家都能承受得住的。这样的产品,还有更多不同的使用场景可以解锁,商机无限。

不过,现在苦心经营的亚马逊卖家,相信很多还在密切留意物流行情的变化,始终无法使出全力投入到选品运营中来。欧美空运一天一个价,快递派送还没完全恢复正常。海运目前相对正常一点,但也难保入仓和发货会不会出问题。像制冷设备这样的货物,投入资金量大,真在物流端出现状况,损失很大。希望疫情早日过去,物流早日恢复正常,不然,即使点子再好,产品再棒,今年的跨境电商生意也是让人忧心的!


来源:跨境电商跨境屋


文章来源:https://www.ikjzd.com/home/121041