どのようにすれば解決できるでしょうか?
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー MSB3073 コマンド ""C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Apps\apache-ant-1.9.3\bin\ant.bat" debug -Dout.final.file="C:\Users\(ユーザ名)\Desktop\test\test\test.Packaging\ARM\Debug\test.apk"" はコード 1 で終了しました。 test.Packaging C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\MDD\Android\V150\Android.Common.targets 396
参考にしたJavaプログラム実行コード1(http://dxlib.o.oo7.jp/lecture/Android/Android_Java.html)
参考にしたJavaプログラム実行コード2(https://qiita.com/yasumodev/items/a5cbac4278cd14c74899)
以下、ソースを載せます。
(エラー発生箇所はconnectProj.java内です)
connectProj.java
► スポイラーを表示
package com.connectProj.Packaging;
import android.app.NativeActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.View;
import java.lang.Runnable;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class connectProj extends NativeActivity
{
NativeActivity AppActivity ;
EditText EditView ;
AlertDialog.Builder AlBuilder ;
// 入力された文字列を保存するメンバー変数
String InputString ;
// 文字列の入力が終わったら 1 にするフラグ用変数
int InputEnd ;
// 文字列入力ダイアログを開始する
public void StartInputStringDialog()
{
// NativeActivity の参照をメンバー変数に保存しておく
AppActivity = this ;
// UIスレッドで実行する処理を登録する
runOnUiThread( new Runnable ()
{
// UIスレッドで呼ばれる関数
@Override public void run()
{
// 文字列入力の View を作成
EditView = new EditText( AppActivity ) ;
// ダイアログを作成
AlBuilder = new AlertDialog.Builder( AppActivity ) ;
// ダイアログのタイトルを設定
AlBuilder.setTitle( "テキスト入力ダイアログ" ) ;
// ダイアログに文字列の View をセット
AlBuilder.setView( EditView ) ;
// ダイアログに OK ボタンを追加
AlBuilder.setPositiveButton( "OK", new DialogInterface.OnClickListener()
{
// OK ボタンが押されたときに呼ばれる関数
public void onClick( DialogInterface dialog, int whichButton )
{
// 入力された文字列をメンバー変数に保存
//InputString = EditView.getText().toString() ;
// *ここから*
HttpClient httpClient = new DefaultHttpClient();
// 大阪の天気予報XMLデータ
HttpGet httpGet = new HttpGet("http://www.drk7.jp/weather/xml/27.xml");
HttpResponse httpResponse = httpClient.execute(httpGet); // httpClient.execute(httpGet)でエラーが出ます
String str = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
InputString=str;
// *ここまでがエラーの発生原因です。*
// 入力されたかどうかのフラグを立てる
InputEnd = 1 ;
// タイトルバーとナビゲーションバーを非表示にする処理
View decor = AppActivity.getWindow().getDecorView() ;
decor.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LOW_PROFILE |
View.SYSTEM_UI_FLAG_FULLSCREEN |
View.SYSTEM_UI_FLAG_IMMERSIVE |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY );
}
});
// ダイアログを表示
AlBuilder.show() ;
}
}) ;
}
}
► スポイラーを表示
<?xml version="1.0" encoding="utf-8"?>
<!-- Changes made to Package Name should also be reflected in the Debugging - Package Name property, in the Property Pages -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.$(ApplicationName)" android:versionCode="1" android:versionName="1.0">
<!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19"/>
<uses-permission android:name="android.permission.INTERNET" />
<!-- This .apk has no Java code itself, so set hasCode to false. -->
<application android:label="@string/app_name" android:hasCode="true" android:theme="@android:style/Theme.NoTitleBar" android:icon="@drawable/icon">
<!-- Our activity is the built-in NativeActivity framework class.
This will take care of integrating with our NDK code. -->
<activity android:name="com.connectProj.Packaging.connectProj" android:label="@string/app_name" android:configChanges="orientation|screenSize" android:launchMode="singleInstance" android:screenOrientation="portrait">
<!-- Tell NativeActivity the name of our .so -->
<meta-data android:name="android.app.lib_name" android:value="$(AndroidAppLibName)"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
► スポイラーを表示
#include "DxLib.h"
#include <string.h>
int android_main(void)
{
JNIEnv *env;
const ANativeActivity *NativeActivity;
int InputEnd;
char InputString[1024];
// 背景を灰色にする
SetBackgroundColor(128, 128, 128);
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;
// 描画先を裏画面に変更
SetDrawScreen(DX_SCREEN_BACK);
// アプリの NativeActivity を取得しておく
NativeActivity = GetNativeActivity();
// Java の関数 StartInputStringDialog の呼び出し
{
// JavaVM とソフト実行用スレッドを関連付け( C++ から Java の機能を使用するために必要 )
if (NativeActivity->vm->AttachCurrentThreadAsDaemon(&env, NULL) != JNI_OK)
{
return -1;
}
// Java のクラス connectProj を取得
jclass jclass_connectProj = env->GetObjectClass(NativeActivity->clazz);
// Java のクラス connectProj のメンバー関数 StartInputStringDialog の ID を取得
jmethodID jmethodID_StartInputDialog = env->GetMethodID(jclass_connectProj, "StartInputStringDialog", "()V");
// Java のクラス connectProj のメンバー関数 StartInputStringDialog の呼び出し
env->CallVoidMethod(NativeActivity->clazz, jmethodID_StartInputDialog);
// Java のクラス connectProj の参照を削除
env->DeleteLocalRef(jclass_connectProj);
// JavaVM とソフト実行用スレッドの関連付け終了
NativeActivity->vm->DetachCurrentThread();
}
// 入力が完了したかどうかのフラグを倒す
InputEnd = 0;
// メインループ
while (ProcessMessage() == 0)
{
// 裏画面の内容をクリア
ClearDrawScreen();
// 入力が完了していなかったら Java のクラス connectProj のメンバー変数 InputEnd と InputString の情報を取得する
if (InputEnd == 0)
{
// JavaVM とソフト実行用スレッドを関連付け( C++ から Java の機能を使用するために必要 )
if (NativeActivity->vm->AttachCurrentThreadAsDaemon(&env, NULL) != JNI_OK)
{
return -1;
}
// Java のクラス connectProj を取得
jclass jclass_connectProj = env->GetObjectClass(NativeActivity->clazz);
// Java のクラス connectProj のメンバー変数 InputEnd の ID を取得
jfieldID jfieldID_InputEnd = env->GetFieldID(jclass_connectProj, "InputEnd", "I");
// Java のクラス connectProj のメンバー変数 InputEnd の値をローカル変数 InputEnd に代入
InputEnd = env->GetIntField(NativeActivity->clazz, jfieldID_InputEnd);
// InputEnd が 1 になっていたら入力が完了しているので InputString の値を取得する
if (InputEnd == 1)
{
// Java のクラス connectProj のメンバー変数 InputString の ID を取得
jfieldID jfieldID_InputString = env->GetFieldID(jclass_connectProj, "InputString", "Ljava/lang/String;");
// Java のクラス connectProj のメンバー変数 InputString の jstring オブジェクトを取得
jstring jstring_InputString = (jstring)env->GetObjectField(NativeActivity->clazz, jfieldID_InputString);
// Java のクラス connectProj のメンバー変数 InputString の jstring から C++ 用の文字列のアドレスを取得
const char *chars_InputString = env->GetStringUTFChars(jstring_InputString, NULL);
// 文字列をローカル変数 InputString にコピー
strcpy(InputString, chars_InputString);
// Java のクラス connectProj のメンバー変数 InputString の jstring から取得した C++ 用の文字列のアドレスを解放
env->ReleaseStringUTFChars(jstring_InputString, chars_InputString);
// Java のクラス connectProj のメンバー変数 InputString の jstring オブジェクトの参照を削除
env->DeleteLocalRef(jstring_InputString);
}
// Java のクラス connectProj の参照を削除
env->DeleteLocalRef(jclass_connectProj);
// JavaVM とソフト実行用スレッドの関連付け終了
NativeActivity->vm->DetachCurrentThread();
}
// InputEnd と InputString の状態を画面に描画
DrawFormatString(0, 100, GetColor(255, 255, 255), "InputEnd:%d InputString:%s", InputEnd, InputString);
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}