如何在32位Linux上开发Android

如何在32位Linux上开发Android,android,linux,cordova,android-studio,android-gradle-plugin,Android,Linux,Cordova,Android Studio,Android Gradle Plugin,这个问题的标题是我能给出的最好答案,而这正是我想要做的:在32位Linux(特别是32位Ubuntu,运行适度最新的内核4.4.0-66-generic;3G RAM)上开发Android应用程序 到目前为止我所学到/尝试的: Android SDK从>23起停止支持32位Linux操作系统上的开发 向上 对于Android Studio,我无法绕过appcompat,以便为较低版本的Android(例如19版)进行构建,因为在没有选项/指令/清除指令的情况下,我将com.android.sup

这个问题的标题是我能给出的最好答案,而这正是我想要做的:在32位Linux(特别是32位Ubuntu,运行适度最新的内核4.4.0-66-generic;3G RAM)上开发Android应用程序

到目前为止我所学到/尝试的:

  • Android SDK从>23起停止支持32位Linux操作系统上的开发 向上
  • 对于Android Studio,我无法绕过appcompat,以便为较低版本的Android(例如19版)进行构建,因为在没有选项/指令/清除指令的情况下,我将
    com.android.support:appcompat-v7:25
    更改为
    com.android.support:appcompat-v7:19
    ,因此当我收到
    appcomat无法解析com.android.support:appcompat-v7:19的错误时,我并不感到惊讶
  • 在那个阶段,Android Studio中弹出了一个通知,我不需要appcompat for sdk version>19和构建工具<21(或类似的东西),然后我删除了
    com.Android.support:appcompat-v7:19
    ,然后下一个错误是
    无法解析com.Android.support:design:19

  • 我在谷歌上搜索了专门针对在32位Linux上开发Android应用程序的任何说明/流程指南,但没有找到

  • 我试过Cordova,但还是停留在gradle build上(可能还是因为上面的问题:android sdk不支持32位Linux上的开发),因为Cordova仍然依赖android sdk
  • 在谷歌漫游时,我偶然发现了Cordova,我喜欢它(可能是因为它基于CLI,我可以看到/控制一切,它甚至有一个--verbose选项,可以显示引擎盖下发生的一切),但在阅读了其他几篇文章后,我拼凑起来,让它构建在我的32位Linux上,我仍然被困在构建阶段,因为当构建过程进入gradle阶段时,它固执地坚持使用构建工具25.0.2,而我拼凑的关于如何设置构建工具版本的所有文章,都无法说服gradle使用我已经完全安装的构建工具19(使用Android SDK管理器)。为了让gradle为我工作,我曾尝试在config.xml中设置
    ,甚至在
    ~/project\u folder/platforms/Android/gradle.properties中设置
    cdvBuildToolsVersion=19
    ,但通过在Cordova的所有努力,我得到了以下回报:

    任务“:预生成”的执行失败。 找不到版本19.0.0的生成工具

    构建失败

    我只想在32位Ubuntu操作系统上设置一个简单、体面、可运行的Android开发环境

    请提供指导/指南/提示/帮助


    顺便说一句,请不要建议移动到64位Linux…至少现在不是这样

    我终于想出了一个相当简单的解决办法:在虚拟机中运行Windows

    虽然谷歌放弃了对32位Linux的支持,但它仍然支持32位Windows

    所以我所做的一切就是在我的32位Linux机器上安装32位Windows,然后在上面运行Android Studio——安装了所有必备组件,如Android SDK……等等。从这一点开始,我只是将重点转移到在面向Windows的指南中寻找支持/指南。简单、酷、简单!

    下面是关于64位的精彩教程,我是man在32位Ubuntu Linux上运行,在旧的赛扬PC上运行。我创建了hellow World应用程序,并在我的三星A5上运行。整个过程花了大约3到4个小时,因为我必须在32位的PC上解决一些问题

    版本号已注明日期,但很重要,因为当前版本不支持64位

  • sudo-apt-get-install-gradle
  • 安装oracle 8

    sudo添加apt存储库ppa:webupd8team/java sudo apt更新;sudo apt安装oracle-java8-installer javac-版本(用于确认版本) sudo apt安装oracle-java8-set-default

    (将此java版本设置为默认版本)

    导出JAVA_HOME=/usr/lib/jvm/JAVA-8-openjdk-i386 导出路径=${JAVA_HOME}/bin:$PATH

  • 安装adndroid SDK

  • 编写“Hello World”应用程序文件夹
  • 创建“AndroidManifest.xml”,如下所示:
  • 创建“activity_main.xml”,如下所示
  • 9.创建“MainActivity.java”,如下所示

    package net.gavin.hello;
            import android.app.Activity;
            import android.os.Bundle;
            import android.widget.TextView;
            public class MainActivity extends Activity
            {
                @Override
                protected void onCreate(Bundle savedInstanceState)
                {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    TextView text = (TextView)findViewById(R.id.my_text);
                    text.setText("Hello, world!");
                }
            }
    
  • 创建构建环境

    光盘~ SDK=“${HOME}/android SDK linux” BUILD_TOOLS=“${SDK}/BUILD TOOLS/21.0.1” PLATFORM=“${SDK}/platforms/android-16” mkdir-p构建/gen构建/obj构建/apk

  • 创建R.java(build/gen/net/gavin/hello/R.java)

  • “${BUILD_TOOLS}/aapt”包-f-m-J BUILD/gen/-S res-m AndroidManifest.xml-I”${PLATFORM}/android.jar”

  • 编译它

    javac-source 1.7-target 1.7-bootclasspath“${JAVA_HOME}/jre/lib/rt.jar”\ -类路径“${PLATFORM}/android.jar”-d build/obj\ build/gen/net/gavin/hello/R.java/net/gavin/hello/MainActivity.java

  • 转换为Dalvik代码

    “${BUILD_TOOLS}/dx”--dex--output=BUILD/apk/classes.dex BUILD/obj/

  • 将内容打包在一起

    “${BUILD_TOOLS}/aapt”包-f-M AndroidManifest.xml-S res/\ -I“${PLATFORM}/android.jar”\ -F build/Hello.unsigned.apk build/apk/

  • 对齐到4字节边界
    “${BUILD\u TOOLS}/zipalign”-f4 BUILD/Hello.unsigned.apk BUILD/Hello.aligned.apk

  • 创建密钥存储和密钥
    keytool-genkeypair-keystore keystore.jks-alias androidkey\
    -有效期10000-keyalg RSA-密钥大小2048\
    -storepass android-keypass android
  • 安装ket签名器(apksigner)
    sudo apt get安装apksigner
  • 使用密钥为应用程序签名
    “apksigner”符号--ks keystore.jks\
    --ks密钥别名androidkey--ks密码:android\
    --密钥传递:android--out build/Hello.apk\
    build/Hello.aligned.apk
  • 安装到设备
    “${SDK}/platform tools/adb”安装-r build/Hello.apk
    cd ~ mkdir android cd android mkdir helloworld cd helloworld
  • <?xml version="1.0" encoding="utf-8"?>
          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="net.gavin.hello"
                  versionCode="1"
                  versionName="0.1">
          <uses-sdk android:minSdkVersion="16"/>
          <application android:label="Hello">
              <activity android:name=".MainActivity">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN"/>
                      <category android:name="android.intent.category.LAUNCHER"/>
                  </intent-filter>
              </activity>
          </application>
      </manifest>
    
    cd ~/android/helloworld
          mkdir res
          cd res
          mkdir layout
          cd layout
    
    <?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:gravity="center"
              android:orientation="vertical">
              <TextView
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:id="@+id/my_text"/>         </LinearLayout>
    
    cd ~ 
    mkdir java
    cd java
    mkdir net
    cd net
    mkdir gavin
    cd gavin
    mkdir hello
    
    package net.gavin.hello;
            import android.app.Activity;
            import android.os.Bundle;
            import android.widget.TextView;
            public class MainActivity extends Activity
            {
                @Override
                protected void onCreate(Bundle savedInstanceState)
                {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    TextView text = (TextView)findViewById(R.id.my_text);
                    text.setText("Hello, world!");
                }
            }