【问题标题】:How to develop for Android on a 32 bit Linux如何在 32 位 Linux 上为 Android 开发
【发布时间】:2017-09-04 20:21:20
【问题描述】:

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

到目前为止我学到/尝试了什么:

  1. Android SDK 自 >23 起停止支持 32 位 Linux 操作系统上的开发 向上
  2. 对于 Android Studio,我无法绕过 appcompat,以便为较低版本的 android(例如版本 19)构建,因为在没有选项/指令/清除指令的情况下,我将 com.android.support:appcompat-v7:25 更改为 @987654323 @ 所以当我收到 appcomat could not resolve com.android.support:appcompat-v7:19 的错误时我并不感到惊讶
  3. 在那个阶段,Android Studio 中弹出一条通知,我不需要 appcompat for sdk version > 19 和 build tools com.android.support:appcompat-v7:19 然后下一个错误是failed to resolve com.android.support:design:19

  4. 我尝试在谷歌上搜索任何专门针对在 32 位 Linux 上开发 Android 应用程序的说明/流程指南,但发现没有

  5. 自 Cordova 以来,我尝试了 Cordova,但一直停留在 gradle build(可能仍然是因为上述相同的问题:android-sdk not support dev on 32 bit Linux)还是依赖android-sdk

在我的谷歌漫游中,我偶然发现了 Cordova,我很喜欢它(可能是因为它基于 CLI 并且我可以查看/控制所有内容,它甚至还有一个 --verbose 选项显示了幕后发生的所有事情)但是在阅读了其他几篇文章后,我拼凑起来让它在我的 32 位 Linux 上构建,我仍然卡在构建阶段,因为当构建过程到达 gradle 阶段时,它顽固地坚持关于使用 build-tools 25.0.2,以及我拼凑的所有关于如何设置 build-tool 版本的文章,我无法说服 gradle 使用我已经完全拥有的 build-tools 19已安装(使用 Android SDK 管理器)。为了让 gradle 为我工作,我尝试在 config.xml 中设置 <preference name="android-targetSdkVersion" value="19"/>,甚至在 ~/project_folder/platforms/android/gradle.properties 中设置 cdvBuildToolsVersion=19,但通过在 Cordova 中的所有这些努力,我得到了回报:

任务“:preBuild”执行失败。 找不到构建工具修订版 19.0.0

构建失败

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

请指路/指南/提示/帮助!

顺便说一句,请不要建议迁移到 64 位 Linux...至少现在不会

【问题讨论】:

  • 对于 Android Studio,在将平台工具降级到 23.0.1 时,我在应用程序 build.gradle 中遇到了两个错误。分别是:无法解析com.android.support.test.espresso:espresso-core:2.0,也无法解析com.android.support:design:19(分别在build.gradle文件中的androidTestCompile('com.android.support.test.espresso:espresso-core:2.0',compile 'com.android.support:design:19'行上)
  • 我设法从 stackoverflow.com/questions/21449947/… 获得了一个完整的示例 app/build.gradle 文件。现在错误是Error:The SDK Build Tools revision (19.1.0) is too low for project ':app'. Minimum required is 25.0.0。有没有办法让 gradle 停止为这个高 api 级别开枪?
  • 针对您的最后一个问题,我猜想在 AndroidManifest.xml 中更改 ''。我不确定,只是猜测。

标签: android linux cordova android-studio android-gradle-plugin


【解决方案1】:

按照this 64 位的精彩教程,我设法让它在一台旧的赛扬 PC 上运行的 32 位 Ubuntu Linux 上 100% 运行。我创建了hello orld 应用程序,并在我的三星A5 上运行它。整个过程大约需要 3 到 4 个小时,因为我必须为 32 位解决一些问题。

版本号已过时,但很重要,因为当前版本不支持 64 位。

  1. sudo apt-get install gradle
  2. 安装 oracle 8

    sudo add-apt-repository ppa:webupd8team/java sudo apt 更新; sudo apt install oracle-java8-installer javac -version(确认版本) sudo apt install oracle-java8-set-default

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

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

  3. 安装安卓 SDK

  curl -O https://dl.google.com/android/android-sdk_r21.0.1-linux.tgz
  tar zxf android-sdk_r21.0.1-linux.tgz
  curl -O https://dl.google.com/android/repository/build-tools_r21-linux.zip
  unzip build-tools_r21-linux.zip
  mkdir android-sdk-linux/build-tools
  mv android-5.0 android-sdk-linux/build-tools/21.0.1
  curl -O https://dl.google.com/android/repository/android-16_r05.zip
  unzip android-16_r05.zip
  mv android-4.1.2 android-sdk-linux/platforms/android-16
  curl -O https://dl.google.com/android/repository/platform-tools_r21-linux.zip
  unzip platform-tools_r21-linux.zip -d android-sdk-linux/
  1. 编写“Hello World”应用文件夹
cd ~
mkdir android
cd android
mkdir helloworld
cd helloworld
  1. 如下创建“AndroidManifest.xml”:
<?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>
  1. 创建文件夹“res/layout/”
cd ~/android/helloworld
      mkdir res
      cd res
      mkdir layout
      cd layout
  1. 如下创建“activity_main.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:gravity="center"
          android:orientation="vertical">
          <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:id="@+id/my_text"/>         </LinearLayout>
  1. java/net/gavin/hello/
cd ~ 
mkdir java
cd java
mkdir net
cd net
mkdir gavin
cd gavin
mkdir hello

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!");
            }
        }
  1. 创建构建环境

    CD~ SDK="${HOME}/android-sdk-linux" BUILD_TOOLS="${SDK}/build-tools/21.0.1" PLATFORM="${SDK}/platforms/android-16" mkdir -p build/gen build/obj build/apk

  2. 创建 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"

  1. 编译

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

  2. 转换为 Dalvik 代码

    "${BUILD_TOOLS}/dx" --dex --output=build/apk/classes.dex build/obj/

  3. 将内容打包在一起

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

  4. 对齐到 4 字节边界 "${BUILD_TOOLS}/zipalign" -f 4 build/Hello.unsigned.apk build/Hello.aligned.apk

  5. 创建密钥存储和密钥 keytool -genkeypair -keystore keystore.jks -alias androidkey \ -validity 10000 -keyalg RSA -keysize 2048 \ -storepass android -keypass android
  6. 安装 ket 签名器 (apksigner) sudo apt-get install apksigner
  7. 使用密钥签署应用程序 "apksigner" sign --ks keystore.jks \ --ks-key-alias androidkey --ks-pass pass:android \ --key-pass pass:android --out build/Hello.apk \ build/Hello.aligned.apk
  8. 安装到设备 "${SDK}/platform-tools/adb" install -r build/Hello.apk
  9. 在设备上运行 "${SDK}/platform-tools/adb" shell am start -n net.gavin.hello/.MainActivity
  10. 庆祝著名,因为那是忙碌的。

注意:19 和 20 假设您已将手机设置为开发者模式,并通过 USB 连接到您的 PC。在这种情况下,我只是将它通过 ftp 传输到我的手机,然后从那里安装。没问题。

【讨论】:

  • 哇!那是一吨!
  • 看起来是这样,但如果你一步一步地遵循这个过程,并在你偶然发现它们时处理任何(希望是次要的)问题,那么根本不会花很长时间。
  • PS,将其格式化以至少显示所有代码在我看来似乎比让代码编译更具挑战性......
  • 附带说明:如果您的存储库不提供 apksigner 工具,第 17 步可能会变成一个全新的任务。对于 Ubuntu,它仅在 Artful 和 Bionic 中可用(最新的 LTS,尚未发布)。实际上,我在我的 Ubuntu 16.04 上下载 Artful DEB 包并安装它没有问题(您首先需要安装 fastjar 然后 jarwrapper 否则将无法满足依赖项)。
  • 在第 20 步获得error type 3 Activity class {net.gavin.hello/net.gavin.hello.MainActivity} does not exist.。必须深入挖掘。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多