[Rose Studio] 生成Windows、Android、iOS的项目文件

本文中studio指Rose Studio。

不论iOS还是Android,可说都要基于一个模板工程去生成,考虑到总须要studio,这个模板工程就是studio。但考虑完整性等原因,模板不是studio的直接复制。

一、Windows

1.1 如何生成模板

Windows的模板除了要让生成已有的项目,还要让生成新建项目。

  1. 移除除3rdparty、3rdparty2、4lib*、applet、libbasic、studio外所有项目。
  2. 对applet。删除aplt_leagor_basic、rose_lua外的所有内容。
  3. 移除gui/dialogs组下除了home.cpp、home.hpp外所有内容。
  4. 移除Header Files组下所有内容。
  5. 移除Source Files组下除了main.cpp外所有内容。
  6. 把vc下的apps.sln、applet.vcxproj、applet.vcxproj.filters、applet.vcxproj.user、libbasic.vcxproj、libbasic.vcxproj.filters、libbasic.vcxproj.user、studio.vcxproj、studio.vcxproj.filters、studio.vcxproj.user复制到windows-prj。

小程序libleagor_basic.vcproj、libleagor_basic.vcproj.filters

  1. 移除除Header Files、Source Files外的那些组。
  2. 移除Header Files组下所有内容。
  3. 移除Source Files组下除了main.cpp外所有内容。
  4. 把vc下的libleagor_basic.vcproj、libleagor_basic.vcproj.filters复制到windows-prj。

 

1.2 如何由模板生成app项目文件

假设要生成的app是“blesmart”,bundle_id是com.leagor.blesmart。复制阶段已复制了以下文件。

  • librose.vcxproj
  • librose.vcxproj.filters
  • blesmart.vcxproj
  • blesmart.vcxproj.filters

生成vc/blesmart.sln。

  1. 从blesmart.vcxproj提取出guid,即“<ProjectGuid>{”“}</ProjectGuid>”中的部分,记为guid_str。
  2. 以只读方式打开<windows-prj>/apps.sln
  3. 把文件中所有字符串studio替换为blesmart。
  4. 把文件中所有字符串3641E31E-36BF-4E03-8879-DE33ADC07D68替换为guid_str,即blesmart的guid。(3641E31E-36BF-4E03-8879-DE33ADC07D68是studio的guid)
  5. 把修改出的数据保存到vc/studio.sln。

生成vc/blesmart.vcxproj.user。

  1. 以只读方式打开<windows-prj>/studio.vcxproj.user。
  2. 把文件中所字符串apps-res替换为blesmart-res。
  3. 把修改出的数据保存到vc/blesmart.vcxproj.user。

1.3 如何新建项目

假设新建项目的id是hello,guid是11111111-2222-3333-4444-555555555555。

生成hello.vcxproj

  1. 打开<windows-prj>/studio.vcxproj。
  2. 把文件中所有字符串studio替换为hello。
  3. 把文件中所有字符串3641E31E-36BF-4E03-8879-DE33ADC07D68替换为hello的guid。
  4. 把修改出的数据保存到vc/hello.vcxproj。

生成hello.vcxproj.filters。

  1. 打开<windows-prj>/studio.vcxproj.filters。
  2. 把文件中所有字符串studio替换为hello。
  3. 把修改出的数据保存到vc/hello.vcxproj.filters。

生成hello.vcxproj.user。

  1. 复制<windows-prj>/studio.vcxproj.user到vc目录,并改名为hello.vcxproj.user。注:不用改此文件内容,新项目是加到工作包,当中资源包路径是“apps-res”。

修改vc/apps.sln,让增加新建的hello项目。

  1. 向Global外增加以下内容。
    Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello.vcxproj", "{11111111-2222-3333-4444-555555555555}"
    EndProject
  2. 向GlobalSection块内增加以下内容。
    {11111111-2222-3333-4444-555555555555}.Debug|Win32.ActiveCfg = Debug|Win32
    {11111111-2222-3333-4444-555555555555}.Debug|Win32.Build.0 = Debug|Win32
    {11111111-2222-3333-4444-555555555555}.Release|Win32.ActiveCfg = Release|Win32
    {11111111-2222-3333-4444-555555555555}.Release|Win32.Build.0 = Release|Win32

 

1.4 增加、删除*.hpp、*.cpp

增加、删除文件涉及到studio.vcxproj、studio.vcxproj.filters。

Visual Studio把文件分为两类,需要编译的(ClCompile Include)和不需要编译的(ClInclude Include)。但不论哪种,它们都放在<ItemGroup>块。

studio.vcxproj指示项目有哪些文件,studio.vcxproj.filters指示这些文件放在哪个filter。

增加文件时,可能需要动态增加<ItemGroup>。举个例子,当前没有(ClInclude Include),可要增加*.hpp,这时就需要增加<ItemGroup>。同理,删除文件时如果<ItemGroup>已没有文件,那就需要删除。

Studio在处理增加*.hpp、*.cpp分两步。

 

1.4.1 判断是否能增加

studio.vcxproj。存在<ItemGroup>,<ClCompile Include="..\..\studio\main.cpp"

studio.vcxproj.filters。存在1)<ItemGroup>,存在<Filter Include="gui\dialogs">。2)<ItemGroup>,<ClCompile Include="..\..\studio\main.cpp"

 

1.4.2 执行增加

studio.vcxproj。
    <ClCompile Include="..\..\studio\gui\dialogs\control_setting.cpp">
      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)gui\dialogs\</ObjectFileName>
      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)gui\dialogs\</ObjectFileName>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
      </ExcludedFromBuild>
    </ClCompile>

studio.vcxproj.filters。
    <ClCompile Include="..\..\studio\gui\dialogs\control_setting.cpp">
      <Filter>gui\dialogs</Filter>
    </ClCompile>

 

二、Android

2.1 如何生成模板

  1. .idea/modules.xml

    项目需要两个iml文件,.idea/modules.xml写了这两文件位置。

    <module fileurl="file://$PROJECT_DIR$/android.iml" filepath="$PROJECT_DIR$/android.iml" />
    <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
    android.iml是项目iml,此项目名叫android,位在项目根下。
    app.iml是模块iml,此模块名叫app,位在模块根下。

    这两文件较复杂,生成模板时删除,由Android Studio自动生成。但在自动生成时随机出现过生成失败,失败时在.idea/modules.xml又加了一个android.iml。

  2. gradle/wrapper/gradle-wrapper.properties
    模板使用的gradle版本是3.3,它写在<android>/gradle/wrapper/gradle-wrapper.properties。这文件直接写有gradle的版本号,生成模板时删除整个gradle目录。
  3. build.gradle

    中间要依赖com.android.tools.build:gradle:2.3.3。gradle的版本号可能在变。生成模板时不能删这文件,一旦删除会打开会报以下错误。

    The project 'xxxx' is not a Gradle-based project.
  4. app/build.gradle
    中间写compileSdkVersion、buildToolsVersion、targetSdkVersion。必须指定compileSdkVersion、buildToolsVersion的版本号。

 

2.2 如何由模板生成app项目文件

假设要生成的app是“blesmart”,bundle_id是com.leagor.blesmart。复制阶段已复制了以下文件。

  1. 复制<apps-src>/apps/projectfiles/android-prj目录,改名为android。
  2. 处理/app/src/main/AndroidManifest.xml。

    1.1 定位package="后的com.leagor.studio,把它替换为com.leagor.blesmart。

    1.2 如果ble=true,添加和蓝牙相关权限。

  3. 生成/app/src/main/java/com/leagor/blesmart/app.java。

    3.1:打开/app/src/main/java/com/leagor/studio/app.java。

    3.2:定位package="后的com.leagor.studio,把它替换为com.leagor.blesmart。

    3.3:新建/app/src/main/java/com/leagor/blesmart目录,把app.java复制到处目录。

    3.4:删除/app/src/main/java/com/leagor/studio目录。(这里要根据com.leagor.blesmart、com.leagor.studo开始出现的不同段选择删除哪目录)

  4. 处理/app/build.gradle。
    4.1:定位package="后的applicationId,把它替换为com.leagor.blesmart。
  5. 处理/app/src/main/res/values/strings.xml
    5.1:把文件中所有字符串studio替换为blesmart。
  6. 处理/app/jni/Android.mk

    6.1:把/app/jni/Android.mk文件名改为Android.mk.tmp。

    6.2:把文件中所有字符串studio替换为blesmart。

    6.3:修改过的内容存入Android.mk。

    6.4:删除Android.mk.tmp。

  7. 生成<app_src>/scripts/android_set_variable.bat

    7.1:打开<app_src>/scripts/android_set_variable.tpl。

    7.3:%_APP_SRC%替换为c:\ddksample\blesmart-src。

三、iOS

3.1 如何生成模板

  1. 增加Health Kit。
  2. 移除src组下的所有内容。

 

3.2 如何由模板生成app项目文件

假设要生成的app是“blesmart”,bundle_id是com.leagor.blesmart。

  1. 复制<apps-src>/apps/projectfiles/ios-prj目录。
  2. 把<Xcode-iOS>/stduio目录名改为<ios>/blesmart。
  3. 把<Xcode-iOS>/studio.xcodeproj目录名改为blesmart.xcodeproj。
  4. 把<Xcode-iOS>/blesmart.xcodeproj/project.pbxproj文件名改为project.pbxproj.tmp。
  5. 处理project.pbxproj.tmp。

    5.1 如果healthkit=false,1)删除所有包含字符串studio.entitlements的行。2)删除SystemCapabilities = { }。

    5.2 把文件中所有字符串studio替换为blesmart。

    5.3 把文件中所有以PRODUCT_BUNDLE_IDENTIFIER = 为前缀和“;”之间部分替换为com.leagor.blesmart。

  6. 删除project.pbxproj.tmp。
  7. 处理<Xcode-iOS>/blesmart/studio.entitlements文件。如果healthkit=true,把它改名为blesmart.entitlements,否则删除该文件。

全部评论: 0

    写评论: